[
  {
    "path": "12fa-docker-golang/README.md",
    "content": "# The 12 Factors of Docker & Go\n\nThis is a general roadmap what to cover within the book. It lists external\nprojects and references for the type of software which can be used to\nsatisfy individual guidelines of the 12-Factor app. The criteria for\ninclusion will be based on idiomatic guidelines and the traction which\nindividual projects managed to get.\n\nLeanpub: [12 Factor Applications with Docker and Go](https://leanpub.com/12fa-docker-golang)\n\n## I. Codebase - One codebase tracked in revision control, many deploys\n\nThe obvious choice in regards to codebase today is git. There are two\naspects which are interesting here. One is the software being used\non the server side, and options for self-hosting (GitLab, Gogs) and the\nother is development methodologies for teams.\n\n- [x] Self hosted git option: [Gogs](https://gogs.io/)\n- [x] Workflows for development with git - [Feature branches](https://www.atlassian.com/git/tutorials/comparing-workflows)\n\n## II. Dependencies - Explicitly declare and isolate dependencies\n\nThere are a few package managers which are available for Go. Depending on your needs,\nany might be fine. My personal favorite is [gvt](https://github.com/FiloSottile/gvt) and\nI've seen [godep](https://github.com/tools/godep) many times in the wild.\n\nIn addition to a quick how-to and why in regards to vendoring, there should be some\nthings explained here in terms of our own dependencies and how to structure the project\nin such a way, that reuse from other projects is possible.\n\n## III. Config - Store config in the environment\n\n- [x] [spf13/viper](https://github.com/spf13/viper)\n- [x] [namsral/flag](https://github.com/namsral/flag)\n- [x] [joho/godotenv](https://github.com/joho/godotenv)\n\nThe project `spf13/viper` will be covered due to terrific adption by several large projects.\nThe other packages are listed as simpler options which may be considered for a\nnano-services approach, where only few configuration/environment variables are needed.\n\n## IV. Backing services - Treat backing services as attached resources\n\nDemonstrate use of common backing services.\n\n- [x] MySQL [jmoiron/sqlx](https://github.com/jmoiron/sqlx)\n- [x] Redis [garyburd/redigo](https://github.com/garyburd/redigo)\n- ~~Minio/S3 [minio/minio-go](https://github.com/minio/minio-go)~~\n\n## V. Build, release, run - Strictly separate build and run stages\n\nThere are a few considerations to make when publishing 12 Factor apps. While applications\nwith multiple files may be the norm, there's existing software which is used for packaging\nthese apps, and more. I'd like to cover a few things:\n\n### Build\n\nSet up and use a CI system which fully supports Docker.\n\n- [x] Codeship CI\n- ~~GitLab CI?~~\n- ~~[Buildkite](https://buildkite.com/)~~\n\n### Release\n\nThis is very variable and subject to changes.\n\n- [x] Setting up a docker registry [docker/registry](https://docs.docker.com/registry/),\n- ~~Using the GitLab container registry,~~\n- [x] Registry review: [Amazon ECR](https://aws.amazon.com/ecr/), Google GCR, Docker Hub, Quay.io\n- [x] Building your own release system (Codeship, release to Docker Hub and Github)\n\n### Run\n\nSubject to change.\n\n- [x] Docker to run go applications, scaling with docker swarm,\n- [x] Migrating your container(s) to the cloud (Digital Ocean `doctl`, in intro)\n- [ ] set up a scalable docker swarm with doctl?\n\n## VI. Processes - Execute the app as one or more stateless processes\n\nThe principle says that the application itself shouldn't keep a local state - a local cache or\nin-memory values. For persistent data storage a database or a caching server like redis or memcached\nshould be used as a backing service. The intent of this guideline is to improve reliability of\nthe service in face of random outages. If individual apps don't have their own caches or data,\nit means that you can tolerate the outage with low impact.\n\nThis chapter is closely related to \"IX. Disposability\" in the sense that there's just one\nlogical conclusion towards testing it - reap some of the running application processes in\norder to discover possible problems in terms of caches and data storage.\n\n## VII. Port binding - Export services via port binding\n\nExposing ports via `net/http` and Docker `-p` option is the baseline for this chapter.\nThere are possible areas of extending the principles behind it:\n\n1. Exposing a multi-host service with docker swarm (networking),\n2. Private network topology with an exposed reverse-proxy setup,\n3. Multi-host Docker private networking\n\n## VIII. Concurrency - Scale out via the process model\n\nWhile not applicable to Go programs directly, due to it's strong concurrency model and ability to\nscale it's processing to multiple CPU cores, it is worth to look at this option as a way to provide\nredundancy via the process model, and with this also a graceful upgrade path when deploying new\napplication versions. By using Docker we can also satisfy basic process management requirements\nset forth in the 12FA guidelines - respond to crashed processes and handle user initiated restarts\nand shutdowns.\n\n## IX. Disposability - Maximize robustness with fast startup and graceful shutdown\n\nMuch like the principle set out in \"VI. Processes\", the 12FA guidelines push home the notion\nthat each application may fail at any given moment, and that it should be resilient to these failures.\n\nSeveral approaches to automating failure and testing this should be noted - one of the\nmost known is [Netflix Chaos Monkey](https://blog.codinghorror.com/working-with-the-chaos-monkey/).\n\n> One of the first systems our engineers built in AWS is called the Chaos Monkey. The Chaos Monkey’s job is to randomly kill instances and services within our architecture. If we aren’t constantly testing our ability to succeed despite failure, then it isn’t likely to work when it matters most – in the event of an unexpected outage.\n\nIn terms of recovery, docker swarm and docker infrakit might be good options to start with, to\ndemonstrate how it's possible to tolerate failure in a clustered environment. There are some\nsecondary goals within this chapter in terms of how a program behaves in terms of it's workload.\n\n## X. Dev/prod parity - Keep development, staging, and production as similar as possible\n\nEven if we're not using Docker to keep these environments as similar as possible, we have\nto account for the nature of the 12FA guidelines - each application is a microservice, which\nshould only define it's dependencies explicitly (12FA, item II.).\n\nWhile I realize that some dependencies (e.g. `rsync`) are provided completely outside the Go app,\nit is possible to have \"pre-flight\" check within the application itself which would report\npossible issues (much like automake `./configure` does).\n\n## XI. Logs - Treat logs as event streams\n\nOutput logs appropriately to stdout/stderr and have external tooling to review this output\nwhen applicable. There are tools that work within the Docker ecosystem like [Rancher](http://rancher.com/),\nand there are external tools like [Logstash](https://www.elastic.co/products/logstash) which may\nprovide insight to your logs.\n\n- [x] Use Papertrail from Docker (stdout),\n- [x] Papertrail as a backing-service\n\n## XII. Admin processes - Run admin/management tasks as one-off processes\n"
  },
  {
    "path": "12fa-docker-golang/chapter1/apiservice/apiservice.go",
    "content": "package apiservice\n\nimport \"fmt\"\nimport \"github.com/namsral/flag\"\n\nvar (\n\tnetworkPort = flag.String(\"port\", \"8080\", \"Network port to listen on\")\n)\n\nfunc HelloWorld() {\n\tflag.Parse();\n\tfmt.Printf(\"Hello world! Network port: %s\\n\", *networkPort);\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter1/main.go",
    "content": "package main\n\nimport \"app/apiservice\"\n\nfunc main() {\n\tapiservice.HelloWorld()\n}"
  },
  {
    "path": "12fa-docker-golang/chapter1/run",
    "content": "#!/bin/bash\ndocker run --rm -it -v `pwd`:/go/src/app -w /go/src/app golang go run main.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter1/subpackage1.go",
    "content": "package subpackage1\n\nimport \"fmt\"\nimport \"app/subpackage2\"\n\nfunc Hello() {\n\treturn subpackage2.Hello();\n}"
  },
  {
    "path": "12fa-docker-golang/chapter1/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter1/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter1/vendor/github.com/namsral/flag/flag.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/*Package flag implements command-line flag parsing.\n\nUsage:\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n    import \"flag\"\n    var ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\nIf you like, you can bind the flag to a variable using the Var() functions.\n    var flagvar int\n    func init() {\n        flag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n    }\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n    flag.Var(&flagVal, \"name\", \"help message for flagname\")\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n    flag.Parse()\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n    fmt.Println(\"ip has value \", *ip)\n    fmt.Println(\"flagvar has value \", flagvar)\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nCommand line flag syntax:\n    -flag\n    -flag=x\n    -flag x  // non-boolean flags only\nOne or two minus signs may be used; they are equivalent.\nThe last form is not permitted for boolean flags because the\nmeaning of the command\n    cmd -x *\nwill change if there is a file called 0, false, etc.  You must\nuse the -flag=false form to turn off a boolean flag.\n\nFlag parsing stops just before the first non-flag argument\n(\"-\" is a non-flag argument) or after the terminator \"--\".\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags may be 1, 0, t, f, true, false, TRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n*/\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how to handle flag parsing errors.\ntype ErrorHandling int\n\nconst (\n\tContinueOnError ErrorHandling = iota\n\tExitOnError\n\tPanicOnError\n)\n\n// A FlagSet represents a set of defined flags.  The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\texitOnError   bool     // does the program exit if there's an error?\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each.  It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each.  It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// PrintDefaults prints, to standard error unless configured\n// otherwise, the default values of all defined flags in the set.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\tformat := \"  -%s=%s: %s\\n\"\n\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t// put quotes on the value\n\t\t\tformat = \"  -%s=%q: %s\\n\"\n\t\t}\n\t\tfmt.Fprintf(f.out(), format, flag.Name, flag.DefValue, flag.Usage)\n\t})\n}\n\n// PrintDefaults prints to standard error the default values of all defined command-line flags.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// The function is a variable that may be changed to point to a custom function.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set, or the usage function if\n// the flag set is CommandLine.\nfunc (f *FlagSet) usage() {\n\tif f == CommandLine {\n\t\tUsage()\n\t} else if f.Usage == nil {\n\t\tdefaultUsage(f)\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for  -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tfv.Set(\"true\")\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name.  Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help was set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tf.ParseEnv(os.Environ())\n\n\t// Parse configuration from file\n\tconfigFlag := f.actual[\"config\"]\n\tif configFlag != nil {\n\t\tf.ParseFile(configFlag.Value.String())\n\t}\n\n\treturn nil\n}\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif !hasValue {\n\t\t\t\treturn f.failf(\"environment variable needs an value: %s\", name)\n\t\t\t}\n\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif !hasValue {\n\t\t\t\treturn f.failf(\"configuration variable needs an argument: %s\", name)\n\t\t\t}\n\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed returns true if the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// Init sets the name, environment name prefix, and error handling property\n// for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter1/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"881a43080604bcf99ab1118a814d1cb2c268fc36\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter11/main.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/apex/log\"\n\t\"github.com/apex/log/handlers/multi\"\n\t\"github.com/apex/log/handlers/papertrail\"\n\t\"github.com/apex/log/handlers/text\"\n)\n\nfunc main() {\n\thandlerText := text.New(os.Stdout)\n\thandlerPapertrail := papertrail.New(&papertrail.Config{\n\t\tHost:     \"logs5\",\n\t\tPort:     41062,\n\t\tHostname: \"app\",\n\t\tTag:      \"production\",\n\t})\n\thandler := multi.New(handlerPapertrail, handlerText)\n\n\tlog.SetHandler(handler)\n\n\tctx := log.WithFields(log.Fields{\n\t\t\"file\": \"something.png\",\n\t\t\"type\": \"image/png\",\n\t\t\"user\": \"tobi\",\n\t})\n\n\tfor range time.Tick(time.Second * 2) {\n\t\tctx.Info(\"upload\")\n\t\tctx.Info(\"upload complete\")\n\t\tctx.Warn(\"upload retry\")\n\t\tctx.WithError(errors.New(\"unauthorized\")).Error(\"upload failed\")\n\t\tctx.Errorf(\"failed to upload %s\", \"img.png\")\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/run",
    "content": "#!/bin/bash\nfunction gvt_fetch {\n\tif [ ! -d \"vendor/$1\" ]; then\n\t\tgvt fetch $1\n\tfi\n}\n\ngvt_fetch \"github.com/apex/log\"\ngvt_fetch \"github.com/apex/log/handlers/text\"\ngvt_fetch \"github.com/apex/log/handlers/papertrail\"\ngvt_fetch \"github.com/apex/log/handlers/multi\"\n\ngo run main.go"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/LICENSE",
    "content": "(The MIT License)\n\nCopyright (c) 2015 TJ Holowaychuk &lt;tj@tjholowaychuk.coma&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/default.go",
    "content": "package log\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n)\n\n// field used for sorting.\ntype field struct {\n\tName  string\n\tValue interface{}\n}\n\n// by sorts fields by name.\ntype byName []field\n\nfunc (a byName) Len() int           { return len(a) }\nfunc (a byName) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name }\n\n// handleStdLog outpouts to the stlib log.\nfunc handleStdLog(e *Entry) error {\n\tlevel := levelNames[e.Level]\n\n\tvar fields []field\n\n\tfor k, v := range e.Fields {\n\t\tfields = append(fields, field{k, v})\n\t}\n\n\tsort.Sort(byName(fields))\n\n\tvar b bytes.Buffer\n\tfmt.Fprintf(&b, \"%5s %-25s\", level, e.Message)\n\n\tfor _, f := range fields {\n\t\tfmt.Fprintf(&b, \" %s=%v\", f.Name, f.Value)\n\t}\n\n\tlog.Println(b.String())\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/doc.go",
    "content": "/*\nPackage log implements a simple structured logging API designed with few assumptions. Designed for\ncentralized logging solutions such as Kinesis which require encoding and decoding before fanning-out\nto handlers.\n\nYou may use this package with inline handlers, much like Logrus, however a centralized solution\nis recommended so that apps do not need to be re-deployed to add or remove logging service\nproviders.\n*/\npackage log\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/entry.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n)\n\n// assert interface compliance.\nvar _ Interface = (*Entry)(nil)\n\n// Now returns the current time.\nvar Now = time.Now\n\n// Entry represents a single log entry.\ntype Entry struct {\n\tLogger    *Logger   `json:\"-\"`\n\tFields    Fields    `json:\"fields\"`\n\tLevel     Level     `json:\"level\"`\n\tTimestamp time.Time `json:\"timestamp\"`\n\tMessage   string    `json:\"message\"`\n\tstart     time.Time\n\tfields    []Fields\n}\n\n// NewEntry returns a new entry for `log`.\nfunc NewEntry(log *Logger) *Entry {\n\treturn &Entry{\n\t\tLogger: log,\n\t}\n}\n\n// WithFields returns a new entry with `fields` set.\nfunc (e *Entry) WithFields(fields Fielder) *Entry {\n\tf := []Fields{}\n\tf = append(f, e.fields...)\n\tf = append(f, fields.Fields())\n\treturn &Entry{\n\t\tLogger: e.Logger,\n\t\tfields: f,\n\t}\n}\n\n// WithField returns a new entry with the `key` and `value` set.\nfunc (e *Entry) WithField(key string, value interface{}) *Entry {\n\treturn e.WithFields(Fields{key: value})\n}\n\n// WithError returns a new entry with the \"error\" set to `err`.\n//\n// The given error may implement .Fielder, if it does the method\n// will add all its `.Fields()` into the returned entry.\nfunc (e *Entry) WithError(err error) *Entry {\n\tctx := e.WithField(\"error\", err.Error())\n\n\tif s, ok := err.(stackTracer); ok {\n\t\tframe := s.StackTrace()[0]\n\n\t\tname := fmt.Sprintf(\"%n\", frame)\n\t\tfile := fmt.Sprintf(\"%+s\", frame)\n\t\tline := fmt.Sprintf(\"%d\", frame)\n\n\t\tparts := strings.Split(file, \"\\n\\t\")\n\t\tif len(parts) > 1 {\n\t\t\tfile = parts[1]\n\t\t}\n\n\t\tctx = ctx.WithField(\"source\", fmt.Sprintf(\"%s: %s:%s\", name, file, line))\n\t}\n\n\tif f, ok := err.(Fielder); ok {\n\t\tctx = ctx.WithFields(f.Fields())\n\t}\n\n\treturn ctx\n}\n\n// Debug level message.\nfunc (e *Entry) Debug(msg string) {\n\te.Logger.log(DebugLevel, e, msg)\n}\n\n// Info level message.\nfunc (e *Entry) Info(msg string) {\n\te.Logger.log(InfoLevel, e, msg)\n}\n\n// Warn level message.\nfunc (e *Entry) Warn(msg string) {\n\te.Logger.log(WarnLevel, e, msg)\n}\n\n// Error level message.\nfunc (e *Entry) Error(msg string) {\n\te.Logger.log(ErrorLevel, e, msg)\n}\n\n// Fatal level message, followed by an exit.\nfunc (e *Entry) Fatal(msg string) {\n\te.Logger.log(FatalLevel, e, msg)\n\tos.Exit(1)\n}\n\n// Debugf level formatted message.\nfunc (e *Entry) Debugf(msg string, v ...interface{}) {\n\te.Debug(fmt.Sprintf(msg, v...))\n}\n\n// Infof level formatted message.\nfunc (e *Entry) Infof(msg string, v ...interface{}) {\n\te.Info(fmt.Sprintf(msg, v...))\n}\n\n// Warnf level formatted message.\nfunc (e *Entry) Warnf(msg string, v ...interface{}) {\n\te.Warn(fmt.Sprintf(msg, v...))\n}\n\n// Errorf level formatted message.\nfunc (e *Entry) Errorf(msg string, v ...interface{}) {\n\te.Error(fmt.Sprintf(msg, v...))\n}\n\n// Fatalf level formatted message, followed by an exit.\nfunc (e *Entry) Fatalf(msg string, v ...interface{}) {\n\te.Fatal(fmt.Sprintf(msg, v...))\n}\n\n// Trace returns a new entry with a Stop method to fire off\n// a corresponding completion log, useful with defer.\nfunc (e *Entry) Trace(msg string) *Entry {\n\te.Info(msg)\n\tv := e.WithFields(e.Fields)\n\tv.Message = msg\n\tv.start = time.Now()\n\treturn v\n}\n\n// Stop should be used with Trace, to fire off the completion message. When\n// an `err` is passed the \"error\" field is set, and the log level is error.\nfunc (e *Entry) Stop(err *error) {\n\tif err == nil || *err == nil {\n\t\te.WithField(\"duration\", time.Since(e.start)).Info(e.Message)\n\t} else {\n\t\te.WithField(\"duration\", time.Since(e.start)).WithError(*err).Error(e.Message)\n\t}\n}\n\n// mergedFields returns the fields list collapsed into a single map.\nfunc (e *Entry) mergedFields() Fields {\n\tf := Fields{}\n\n\tfor _, fields := range e.fields {\n\t\tfor k, v := range fields {\n\t\t\tf[k] = v\n\t\t}\n\t}\n\n\treturn f\n}\n\n// finalize returns a copy of the Entry with Fields merged.\nfunc (e *Entry) finalize(level Level, msg string) *Entry {\n\treturn &Entry{\n\t\tLogger:    e.Logger,\n\t\tFields:    e.mergedFields(),\n\t\tLevel:     level,\n\t\tMessage:   msg,\n\t\tTimestamp: Now(),\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/cli/cli.go",
    "content": "// Package cli implements a colored text handler suitable for command-line interfaces.\npackage cli\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/apex/log\"\n)\n\n// Default handler outputting to stderr.\nvar Default = New(os.Stderr)\n\n// start time.\nvar start = time.Now()\n\n// colors.\nconst (\n\tnone   = 0\n\tred    = 31\n\tgreen  = 32\n\tyellow = 33\n\tblue   = 34\n\tgray   = 37\n)\n\n// Colors mapping.\nvar Colors = [...]int{\n\tlog.DebugLevel: gray,\n\tlog.InfoLevel:  blue,\n\tlog.WarnLevel:  yellow,\n\tlog.ErrorLevel: red,\n\tlog.FatalLevel: red,\n}\n\n// Strings mapping.\nvar Strings = [...]string{\n\tlog.DebugLevel: \"•\",\n\tlog.InfoLevel:  \"•\",\n\tlog.WarnLevel:  \"•\",\n\tlog.ErrorLevel: \"⨯\",\n\tlog.FatalLevel: \"⨯\",\n}\n\n// Handler implementation.\ntype Handler struct {\n\tmu      sync.Mutex\n\tWriter  io.Writer\n\tPadding int\n}\n\n// New handler.\nfunc New(w io.Writer) *Handler {\n\treturn &Handler{\n\t\tWriter:  w,\n\t\tPadding: 3,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tcolor := Colors[e.Level]\n\tlevel := Strings[e.Level]\n\tnames := e.Fields.Names()\n\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\n\tfmt.Fprintf(h.Writer, \"\\033[%dm%*s\\033[0m %-25s\", color, h.Padding+1, level, e.Message)\n\n\tfor _, name := range names {\n\t\tif name == \"source\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tfmt.Fprintf(h.Writer, \" \\033[%dm%s\\033[0m=%v\", color, name, e.Fields.Get(name))\n\t}\n\n\tfmt.Fprintln(h.Writer)\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/discard/discard.go",
    "content": "// Package discard implements a no-op handler useful for benchmarks and tests.\npackage discard\n\nimport (\n\t\"github.com/apex/log\"\n)\n\n// Default handler.\nvar Default = New()\n\n// Handler implementation.\ntype Handler struct{}\n\n// New handler.\nfunc New() *Handler {\n\treturn &Handler{}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/es/es.go",
    "content": "// Package es implements an Elasticsearch batch handler. Currently this implementation\n// assumes the index format of \"logs-YY-MM-DD\".\npackage es\n\nimport (\n\t\"io\"\n\tstdlog \"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/tj/go-elastic/batch\"\n\n\t\"github.com/apex/log\"\n)\n\n// TODO(tj): allow dumping logs to stderr on timeout\n// TODO(tj): allow custom format that does not include .fields etc\n// TODO(tj): allow interval flushes\n// TODO(tj): allow explicit Flush() (for Lambda where you have to flush at the end of function)\n\n// Elasticsearch interface.\ntype Elasticsearch interface {\n\tBulk(io.Reader) error\n}\n\n// Config for handler.\ntype Config struct {\n\tBufferSize int           // BufferSize is the number of logs to buffer before flush (default: 100)\n\tFormat     string        // Format for index\n\tClient     Elasticsearch // Client for ES\n}\n\n// defaults applies defaults to the config.\nfunc (c *Config) defaults() {\n\tif c.BufferSize == 0 {\n\t\tc.BufferSize = 100\n\t}\n\n\tif c.Format == \"\" {\n\t\tc.Format = \"logs-06-01-02\"\n\t}\n}\n\n// Handler implementation.\ntype Handler struct {\n\t*Config\n\n\tmu    sync.Mutex\n\tbatch *batch.Batch\n}\n\n// New handler with BufferSize\nfunc New(config *Config) *Handler {\n\tconfig.defaults()\n\treturn &Handler{\n\t\tConfig: config,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\n\tif h.batch == nil {\n\t\th.batch = &batch.Batch{\n\t\t\tIndex:   time.Now().Format(h.Config.Format),\n\t\t\tElastic: h.Client,\n\t\t\tType:    \"log\",\n\t\t}\n\t}\n\n\th.batch.Add(e)\n\n\tif h.batch.Size() >= h.BufferSize {\n\t\tgo h.flush(h.batch)\n\t\th.batch = nil\n\t}\n\n\treturn nil\n}\n\n// flush the given `batch` asynchronously.\nfunc (h *Handler) flush(batch *batch.Batch) {\n\tsize := batch.Size()\n\tstart := time.Now()\n\tstdlog.Printf(\"log/elastic: flushing %d logs\", size)\n\n\tif err := batch.Flush(); err != nil {\n\t\tstdlog.Printf(\"log/elastic: failed to flush %d logs: %s\", size, err)\n\t}\n\n\tstdlog.Printf(\"log/elastic: flushed %d logs in %s\", size, time.Since(start))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/graylog/graylog.go",
    "content": "// Package implements a Graylog-backed handler.\npackage graylog\n\nimport (\n\t\"github.com/apex/log\"\n\t\"github.com/aphistic/golf\"\n)\n\n// Handler implementation.\ntype Handler struct {\n\tlogger *golf.Logger\n\tclient *golf.Client\n}\n\n// New handler.\n// Connection string should be in format \"udp://<ip_address>:<port>\".\n// Server should have GELF input enabled on that port.\nfunc New(url string) (*Handler, error) {\n\tc, err := golf.NewClient()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = c.Dial(url)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tl, err := c.NewLogger()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Handler{\n\t\tlogger: l,\n\t\tclient: c,\n\t}, nil\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tswitch e.Level {\n\tcase log.DebugLevel:\n\t\treturn h.logger.Dbgm(e.Fields, e.Message)\n\tcase log.InfoLevel:\n\t\treturn h.logger.Infom(e.Fields, e.Message)\n\tcase log.WarnLevel:\n\t\treturn h.logger.Warnm(e.Fields, e.Message)\n\tcase log.ErrorLevel:\n\t\treturn h.logger.Errm(e.Fields, e.Message)\n\tcase log.FatalLevel:\n\t\treturn h.logger.Critm(e.Fields, e.Message)\n\t}\n\n\treturn nil\n}\n\n// Closes connection to server, flushing message queue.\nfunc (h *Handler) Close() error {\n\treturn h.client.Close()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/json/json.go",
    "content": "// Package json implements a JSON handler.\npackage json\n\nimport (\n\tj \"encoding/json\"\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/apex/log\"\n)\n\n// Default handler outputting to stderr.\nvar Default = New(os.Stderr)\n\n// Handler implementation.\ntype Handler struct {\n\tmu  sync.Mutex\n\tenc *j.Encoder\n}\n\n// New handler.\nfunc New(w io.Writer) *Handler {\n\treturn &Handler{\n\t\tenc: j.NewEncoder(w),\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\treturn h.enc.Encode(e)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/kinesis/kinesis.go",
    "content": "package kinesis\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\n\t\"github.com/apex/log\"\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"github.com/aws/aws-sdk-go/service/kinesis\"\n\t\"github.com/rogpeppe/fastuuid\"\n\tk \"github.com/tj/go-kinesis\"\n)\n\n// Handler implementation.\ntype Handler struct {\n\tappName  string\n\tproducer *k.Producer\n\tgen      *fastuuid.Generator\n}\n\n// New handler sending logs to Kinesis. To configure producer options or pass your\n// own AWS Kinesis client use NewConfig instead.\nfunc New(stream string) *Handler {\n\treturn NewConfig(k.Config{\n\t\tStreamName: stream,\n\t\tClient:     kinesis.New(session.New(aws.NewConfig())),\n\t})\n}\n\n// NewConfig handler sending logs to Kinesis. The `config` given is passed to the batch\n// Kinesis producer, and a random value is used as the partition key for even distribution.\nfunc NewConfig(config k.Config) *Handler {\n\tproducer := k.New(config)\n\tproducer.Start()\n\treturn &Handler{\n\t\tproducer: producer,\n\t\tgen:      fastuuid.MustNewGenerator(),\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tb, err := json.Marshal(e)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tuuid := h.gen.Next()\n\tkey := base64.StdEncoding.EncodeToString(uuid[:])\n\treturn h.producer.Put(b, key)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/level/level.go",
    "content": "// Package level implements a level filter handler.\npackage level\n\nimport \"github.com/apex/log\"\n\n// Handler implementation.\ntype Handler struct {\n\tLevel   log.Level\n\tHandler log.Handler\n}\n\n// New handler.\nfunc New(h log.Handler, level log.Level) *Handler {\n\treturn &Handler{\n\t\tLevel:   level,\n\t\tHandler: h,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tif e.Level < h.Level {\n\t\treturn nil\n\t}\n\n\treturn h.Handler.HandleLog(e)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/logfmt/logfmt.go",
    "content": "// Package logfmt implements a \"logfmt\" format handler.\npackage logfmt\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/apex/log\"\n\t\"github.com/go-logfmt/logfmt\"\n)\n\n// Default handler outputting to stderr.\nvar Default = New(os.Stderr)\n\n// Handler implementation.\ntype Handler struct {\n\tmu  sync.Mutex\n\tenc *logfmt.Encoder\n}\n\n// New handler.\nfunc New(w io.Writer) *Handler {\n\treturn &Handler{\n\t\tenc: logfmt.NewEncoder(w),\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tnames := e.Fields.Names()\n\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\n\th.enc.EncodeKeyval(\"timestamp\", e.Timestamp)\n\th.enc.EncodeKeyval(\"level\", e.Level.String())\n\th.enc.EncodeKeyval(\"message\", e.Message)\n\n\tfor _, name := range names {\n\t\th.enc.EncodeKeyval(name, e.Fields.Get(name))\n\t}\n\n\th.enc.EndRecord()\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/memory/memory.go",
    "content": "// Package memory implements an in-memory handler useful for testing, as the\n// entries can be accessed after writes.\npackage memory\n\nimport (\n\t\"sync\"\n\n\t\"github.com/apex/log\"\n)\n\n// Handler implementation.\ntype Handler struct {\n\tmu      sync.Mutex\n\tEntries []*log.Entry\n}\n\n// New handler.\nfunc New() *Handler {\n\treturn &Handler{}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\th.Entries = append(h.Entries, e)\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/multi/multi.go",
    "content": "// Package multi implements a handler which invokes a number of handlers.\npackage multi\n\nimport (\n\t\"github.com/apex/log\"\n)\n\n// Handler implementation.\ntype Handler struct {\n\tHandlers []log.Handler\n}\n\n// New handler.\nfunc New(h ...log.Handler) *Handler {\n\treturn &Handler{\n\t\tHandlers: h,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tfor _, handler := range h.Handlers {\n\t\t// TODO(tj): maybe just write to stderr here, definitely not ideal\n\t\t// to miss out logging to a more critical handler if something\n\t\t// goes wrong\n\t\tif err := handler.HandleLog(e); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/papertrail/papertrail.go",
    "content": "// Package papertrail implements a papertrail logfmt format handler.\npackage papertrail\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log/syslog\"\n\t\"net\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/apex/log\"\n\t\"github.com/go-logfmt/logfmt\"\n)\n\n// TODO: syslog portion is ad-hoc for my serverless use-case,\n// I don't really need hostnames etc, but this should be improved\n\n// Config for Papertrail.\ntype Config struct {\n\t// Papertrail settings.\n\tHost string // Host subdomain such as \"logs4\"\n\tPort int    // Port number\n\n\t// Application settings\n\tHostname string // Hostname value\n\tTag      string // Tag value\n}\n\n// Handler implementation.\ntype Handler struct {\n\t*Config\n\n\tmu   sync.Mutex\n\tconn net.Conn\n}\n\n// New handler.\nfunc New(config *Config) *Handler {\n\tconn, err := net.Dial(\"udp\", fmt.Sprintf(\"%s.papertrailapp.com:%d\", config.Host, config.Port))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn &Handler{\n\t\tConfig: config,\n\t\tconn:   conn,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tts := time.Now().Format(time.Stamp)\n\n\tvar buf bytes.Buffer\n\n\tenc := logfmt.NewEncoder(&buf)\n\tenc.EncodeKeyval(\"level\", e.Level.String())\n\tenc.EncodeKeyval(\"message\", e.Message)\n\n\tfor k, v := range e.Fields {\n\t\tenc.EncodeKeyval(k, v)\n\t}\n\n\tenc.EndRecord()\n\n\tmsg := []byte(fmt.Sprintf(\"<%d>%s %s %s[%d]: %s\\n\", syslog.LOG_KERN, ts, h.Hostname, h.Tag, os.Getpid(), buf.String()))\n\n\th.mu.Lock()\n\t_, err := h.conn.Write(msg)\n\th.mu.Unlock()\n\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/handlers/text/text.go",
    "content": "// Package text implements a development-friendly textual handler.\npackage text\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/apex/log\"\n)\n\n// Default handler outputting to stderr.\nvar Default = New(os.Stderr)\n\n// start time.\nvar start = time.Now()\n\n// colors.\nconst (\n\tnone   = 0\n\tred    = 31\n\tgreen  = 32\n\tyellow = 33\n\tblue   = 34\n\tgray   = 37\n)\n\n// Colors mapping.\nvar Colors = [...]int{\n\tlog.DebugLevel: gray,\n\tlog.InfoLevel:  blue,\n\tlog.WarnLevel:  yellow,\n\tlog.ErrorLevel: red,\n\tlog.FatalLevel: red,\n}\n\n// Strings mapping.\nvar Strings = [...]string{\n\tlog.DebugLevel: \"DEBUG\",\n\tlog.InfoLevel:  \"INFO\",\n\tlog.WarnLevel:  \"WARN\",\n\tlog.ErrorLevel: \"ERROR\",\n\tlog.FatalLevel: \"FATAL\",\n}\n\n// Handler implementation.\ntype Handler struct {\n\tmu     sync.Mutex\n\tWriter io.Writer\n}\n\n// New handler.\nfunc New(w io.Writer) *Handler {\n\treturn &Handler{\n\t\tWriter: w,\n\t}\n}\n\n// HandleLog implements log.Handler.\nfunc (h *Handler) HandleLog(e *log.Entry) error {\n\tcolor := Colors[e.Level]\n\tlevel := Strings[e.Level]\n\tnames := e.Fields.Names()\n\n\th.mu.Lock()\n\tdefer h.mu.Unlock()\n\n\tts := time.Since(start) / time.Second\n\tfmt.Fprintf(h.Writer, \"\\033[%dm%6s\\033[0m[%04d] %-25s\", color, level, ts, e.Message)\n\n\tfor _, name := range names {\n\t\tfmt.Fprintf(h.Writer, \" \\033[%dm%s\\033[0m=%v\", color, name, e.Fields.Get(name))\n\t}\n\n\tfmt.Fprintln(h.Writer)\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/interface.go",
    "content": "package log\n\n// Interface represents the API of both Logger and Entry.\ntype Interface interface {\n\tWithFields(fields Fielder) *Entry\n\tWithField(key string, value interface{}) *Entry\n\tWithError(err error) *Entry\n\tDebug(msg string)\n\tInfo(msg string)\n\tWarn(msg string)\n\tError(msg string)\n\tFatal(msg string)\n\tDebugf(msg string, v ...interface{})\n\tInfof(msg string, v ...interface{})\n\tWarnf(msg string, v ...interface{})\n\tErrorf(msg string, v ...interface{})\n\tFatalf(msg string, v ...interface{})\n\tTrace(msg string) *Entry\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/levels.go",
    "content": "package log\n\nimport (\n\t\"errors\"\n\t\"strings\"\n)\n\n// Level of severity.\ntype Level int\n\n// Log levels.\nconst (\n\tDebugLevel Level = iota\n\tInfoLevel\n\tWarnLevel\n\tErrorLevel\n\tFatalLevel\n)\n\nvar levelNames = [...]string{\n\tDebugLevel: \"debug\",\n\tInfoLevel:  \"info\",\n\tWarnLevel:  \"warn\",\n\tErrorLevel: \"error\",\n\tFatalLevel: \"fatal\",\n}\n\n// String implements io.Stringer.\nfunc (l Level) String() string {\n\treturn levelNames[l]\n}\n\n// MarshalJSON returns the level string.\nfunc (l Level) MarshalJSON() ([]byte, error) {\n\treturn []byte(`\"` + l.String() + `\"`), nil\n}\n\n// ParseLevel parses level string.\nfunc ParseLevel(s string) (Level, error) {\n\tswitch strings.ToLower(s) {\n\tcase \"debug\":\n\t\treturn DebugLevel, nil\n\tcase \"info\":\n\t\treturn InfoLevel, nil\n\tcase \"warn\", \"warning\":\n\t\treturn WarnLevel, nil\n\tcase \"error\":\n\t\treturn ErrorLevel, nil\n\tcase \"fatal\":\n\t\treturn FatalLevel, nil\n\tdefault:\n\t\treturn -1, errors.New(\"invalid level\")\n\t}\n}\n\n// MustParseLevel parses level string or panics.\nfunc MustParseLevel(s string) Level {\n\tl, err := ParseLevel(s)\n\tif err != nil {\n\t\tpanic(\"invalid log level\")\n\t}\n\n\treturn l\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/logger.go",
    "content": "package log\n\nimport (\n\tstdlog \"log\"\n\t\"sort\"\n)\n\n// assert interface compliance.\nvar _ Interface = (*Logger)(nil)\n\n// Fielder is an interface for providing fields to custom types.\ntype Fielder interface {\n\tFields() Fields\n}\n\n// Fields represents a map of entry level data used for structured logging.\ntype Fields map[string]interface{}\n\n// Fields implements Fielder.\nfunc (f Fields) Fields() Fields {\n\treturn f\n}\n\n// Get field value by name.\nfunc (f Fields) Get(name string) interface{} {\n\treturn f[name]\n}\n\n// Names returns field names sorted.\nfunc (f Fields) Names() (v []string) {\n\tfor k := range f {\n\t\tv = append(v, k)\n\t}\n\n\tsort.Strings(v)\n\treturn\n}\n\n// The HandlerFunc type is an adapter to allow the use of ordinary functions as\n// log handlers. If f is a function with the appropriate signature,\n// HandlerFunc(f) is a Handler object that calls f.\ntype HandlerFunc func(*Entry) error\n\n// HandleLog calls f(e).\nfunc (f HandlerFunc) HandleLog(e *Entry) error {\n\treturn f(e)\n}\n\n// Handler is used to handle log events, outputting them to\n// stdio or sending them to remote services. See the \"handlers\"\n// directory for implementations.\n//\n// It is left up to Handlers to implement thread-safety.\ntype Handler interface {\n\tHandleLog(*Entry) error\n}\n\n// Logger represents a logger with configurable Level and Handler.\ntype Logger struct {\n\tHandler Handler\n\tLevel   Level\n}\n\n// WithFields returns a new entry with `fields` set.\nfunc (l *Logger) WithFields(fields Fielder) *Entry {\n\treturn NewEntry(l).WithFields(fields.Fields())\n}\n\n// WithField returns a new entry with the `key` and `value` set.\n//\n// Note that the `key` should not have spaces in it - use camel\n// case or underscores\nfunc (l *Logger) WithField(key string, value interface{}) *Entry {\n\treturn NewEntry(l).WithField(key, value)\n}\n\n// WithError returns a new entry with the \"error\" set to `err`.\nfunc (l *Logger) WithError(err error) *Entry {\n\treturn NewEntry(l).WithError(err)\n}\n\n// Debug level message.\nfunc (l *Logger) Debug(msg string) {\n\tNewEntry(l).Debug(msg)\n}\n\n// Info level message.\nfunc (l *Logger) Info(msg string) {\n\tNewEntry(l).Info(msg)\n}\n\n// Warn level message.\nfunc (l *Logger) Warn(msg string) {\n\tNewEntry(l).Warn(msg)\n}\n\n// Error level message.\nfunc (l *Logger) Error(msg string) {\n\tNewEntry(l).Error(msg)\n}\n\n// Fatal level message, followed by an exit.\nfunc (l *Logger) Fatal(msg string) {\n\tNewEntry(l).Fatal(msg)\n}\n\n// Debugf level formatted message.\nfunc (l *Logger) Debugf(msg string, v ...interface{}) {\n\tNewEntry(l).Debugf(msg, v...)\n}\n\n// Infof level formatted message.\nfunc (l *Logger) Infof(msg string, v ...interface{}) {\n\tNewEntry(l).Infof(msg, v...)\n}\n\n// Warnf level formatted message.\nfunc (l *Logger) Warnf(msg string, v ...interface{}) {\n\tNewEntry(l).Warnf(msg, v...)\n}\n\n// Errorf level formatted message.\nfunc (l *Logger) Errorf(msg string, v ...interface{}) {\n\tNewEntry(l).Errorf(msg, v...)\n}\n\n// Fatalf level formatted message, followed by an exit.\nfunc (l *Logger) Fatalf(msg string, v ...interface{}) {\n\tNewEntry(l).Fatalf(msg, v...)\n}\n\n// Trace returns a new entry with a Stop method to fire off\n// a corresponding completion log, useful with defer.\nfunc (l *Logger) Trace(msg string) *Entry {\n\treturn NewEntry(l).Trace(msg)\n}\n\n// log the message, invoking the handler. We clone the entry here\n// to bypass the overhead in Entry methods when the level is not\n// met.\nfunc (l *Logger) log(level Level, e *Entry, msg string) {\n\tif level < l.Level {\n\t\treturn\n\t}\n\n\tif err := l.Handler.HandleLog(e.finalize(level, msg)); err != nil {\n\t\tstdlog.Printf(\"error logging: %s\", err)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/pkg.go",
    "content": "package log\n\n// singletons ftw?\nvar Log Interface = &Logger{\n\tHandler: HandlerFunc(handleStdLog),\n\tLevel:   InfoLevel,\n}\n\n// SetHandler sets the handler. This is not thread-safe.\n// The default handler outputs to the stdlib log.\nfunc SetHandler(h Handler) {\n\tif logger, ok := Log.(*Logger); ok {\n\t\tlogger.Handler = h\n\t}\n}\n\n// SetLevel sets the log level. This is not thread-safe.\nfunc SetLevel(l Level) {\n\tif logger, ok := Log.(*Logger); ok {\n\t\tlogger.Level = l\n\t}\n}\n\n// WithFields returns a new entry with `fields` set.\nfunc WithFields(fields Fielder) *Entry {\n\treturn Log.WithFields(fields)\n}\n\n// WithField returns a new entry with the `key` and `value` set.\nfunc WithField(key string, value interface{}) *Entry {\n\treturn Log.WithField(key, value)\n}\n\n// WithError returns a new entry with the \"error\" set to `err`.\nfunc WithError(err error) *Entry {\n\treturn Log.WithError(err)\n}\n\n// Debug level message.\nfunc Debug(msg string) {\n\tLog.Debug(msg)\n}\n\n// Info level message.\nfunc Info(msg string) {\n\tLog.Info(msg)\n}\n\n// Warn level message.\nfunc Warn(msg string) {\n\tLog.Warn(msg)\n}\n\n// Error level message.\nfunc Error(msg string) {\n\tLog.Error(msg)\n}\n\n// Fatal level message, followed by an exit.\nfunc Fatal(msg string) {\n\tLog.Fatal(msg)\n}\n\n// Debugf level formatted message.\nfunc Debugf(msg string, v ...interface{}) {\n\tLog.Debugf(msg, v...)\n}\n\n// Infof level formatted message.\nfunc Infof(msg string, v ...interface{}) {\n\tLog.Infof(msg, v...)\n}\n\n// Warnf level formatted message.\nfunc Warnf(msg string, v ...interface{}) {\n\tLog.Warnf(msg, v...)\n}\n\n// Errorf level formatted message.\nfunc Errorf(msg string, v ...interface{}) {\n\tLog.Errorf(msg, v...)\n}\n\n// Fatalf level formatted message, followed by an exit.\nfunc Fatalf(msg string, v ...interface{}) {\n\tLog.Fatalf(msg, v...)\n}\n\n// Trace returns a new entry with a Stop method to fire off\n// a corresponding completion log, useful with defer.\nfunc Trace(msg string) *Entry {\n\treturn Log.Trace(msg)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/apex/log/stack.go",
    "content": "package log\n\nimport \"github.com/pkg/errors\"\n\n// stackTracer interface.\ntype stackTracer interface {\n\tStackTrace() errors.StackTrace\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Erik Davidson\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": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/chunker.go",
    "content": "package golf\n\nimport (\n\t\"errors\"\n\t\"github.com/satori/go.uuid\"\n\t\"io\"\n\t\"math\"\n)\n\ntype chunker struct {\n\tchunkSize int\n\tbuff      []byte\n\tw         io.Writer\n}\n\nfunc newChunker(w io.Writer, chunkSize int) (*chunker, error) {\n\tif chunkSize < 13 {\n\t\treturn nil, errors.New(\"Chunk size must be at least 13.\")\n\t}\n\n\tc := &chunker{\n\t\tchunkSize: chunkSize,\n\t\tbuff:      make([]byte, 0),\n\t\tw:         w,\n\t}\n\n\treturn c, nil\n}\n\nfunc (c *chunker) reset() {\n\tc.buff = make([]byte, 0)\n}\nfunc (c *chunker) Write(p []byte) (int, error) {\n\tc.buff = append(c.buff, p...)\n\treturn len(p), nil\n}\n\nfunc (c *chunker) Flush() error {\n\tidFull := uuid.NewV4()\n\terr := c.flushWithId(idFull.Bytes()[0:8])\n\treturn err\n}\n\nfunc (c *chunker) flushWithId(id []byte) error {\n\tif len(id) < 8 || len(id) > 8 {\n\t\treturn errors.New(\"id length must be equal to 8\")\n\t}\n\n\toffset := 0\n\tbuffLen := len(c.buff)\n\tchunkSize := c.chunkSize - 12\n\n\t// Reusing this buffer may cause problems with duplicate data being sent\n\t// if the data isn't written to something else by the io.Writer before\n\t// the chunk's data is updated.\n\tchunkBuff := make([]byte, c.chunkSize)\n\tcopy(chunkBuff[0:2], []byte{0x1e, 0x0f})\n\tcopy(chunkBuff[2:10], id)\n\n\ttotalChunks := int(math.Ceil(float64(buffLen) / float64(chunkSize)))\n\tchunkBuff[11] = byte(totalChunks)\n\n\tfor {\n\t\tleft := buffLen - offset\n\t\tif left > chunkSize {\n\t\t\tcopy(chunkBuff[12:], c.buff[offset:offset+chunkSize])\n\t\t\tc.w.Write(chunkBuff)\n\t\t} else {\n\t\t\tcopy(chunkBuff[12:], c.buff[offset:offset+left])\n\t\t\tc.w.Write(chunkBuff[0 : left+12])\n\t\t\tbreak\n\t\t}\n\n\t\toffset += chunkSize\n\t\tchunkBuff[10] += 1\n\t}\n\n\tc.reset()\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/client.go",
    "content": "package golf\n\nimport (\n\t\"compress/gzip\"\n\t\"compress/zlib\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Compression type to use for GELF messages that are sent\nconst (\n\tCOMP_NONE = iota // No compression\n\tCOMP_GZIP        // gzip compression\n\tCOMP_ZLIB        // zlib compression\n)\n\ntype Client struct {\n\thostname string\n\n\tconn net.Conn\n\n\tqueue      []*Message\n\tqueueMutex sync.Mutex\n\n\tmsgChan  chan *Message\n\tqueueCtl chan int\n\tsendCtl  chan int\n\n\tconfig ClientConfig\n}\n\n// Configuration used when creating a server instance\ntype ClientConfig struct {\n\tChunkSize   int // The data size for each chunk sent to the server\n\tCompression int // Compression to use for messagec.\n}\n\n/*\nCreate a new Client instance with the default values for ClientConfig:\n\n {\n\tChunkSize: 1420,\n\tCompression: COMP_GZIP,\n }\n*/\nfunc NewClient() (*Client, error) {\n\tcc := ClientConfig{\n\t\tChunkSize:   1420,\n\t\tCompression: COMP_GZIP,\n\t}\n\treturn NewClientWithConfig(cc)\n}\n\n// Create a new Client instance with the given ClientConfig\nfunc NewClientWithConfig(config ClientConfig) (*Client, error) {\n\tc := &Client{\n\t\tconfig: config,\n\t\tqueue:  make([]*Message, 0),\n\n\t\tmsgChan:  make(chan *Message, 500),\n\t\tqueueCtl: make(chan int),\n\t\tsendCtl:  make(chan int),\n\t}\n\n\thost, err := os.Hostname()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.hostname = host\n\n\treturn c, nil\n}\n\n// Connect to a GELF server at the given URI.\nfunc (c *Client) Dial(uri string) error {\n\tparsedUri, err := url.Parse(uri)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !strings.Contains(parsedUri.Host, \":\") {\n\t\tparsedUri.Host = parsedUri.Host + \":12201\"\n\t}\n\n\tswitch parsedUri.Scheme {\n\tcase \"udp\":\n\tcase \"tcp\":\n\tdefault:\n\t\treturn errors.New(\"Unsupported scheme provided\")\n\t}\n\n\tconn, err := net.Dial(parsedUri.Scheme, parsedUri.Host)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.conn = conn\n\n\tgo c.queueReceiver()\n\tgo c.msgSender()\n\n\treturn nil\n}\n\n// Close the connection to the server. This call will block until all the\n// currently queued messages for the client are sent.\nfunc (c *Client) Close() error {\n\tif c.conn == nil {\n\t\t// Already shut down so it doesn't need to run again\n\t\treturn nil\n\t}\n\n\t// First quit the queue and wait for it to respond\n\t// that it's quit\n\tc.queueCtl <- 1\n\tfor {\n\t\tquitVal := <-c.queueCtl\n\t\tif quitVal == 2 {\n\t\t\tbreak\n\t\t}\n\t\tc.queueCtl <- quitVal\n\t}\n\n\t// Then quit the sender and wait for it to respond\n\t// that it's quit\n\tc.sendCtl <- 1\n\tfor {\n\t\tquitVal := <-c.sendCtl\n\t\tif quitVal == 2 {\n\t\t\tbreak\n\t\t}\n\t\tc.sendCtl <- quitVal\n\t}\n\n\terr := c.conn.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.conn = nil\n\n\treturn nil\n}\n\n// Queue the given message at the end of the message queue\nfunc (c *Client) QueueMsg(msg *Message) error {\n\tif msg.Timestamp == nil {\n\t\tcurTime := time.Now()\n\t\tmsg.Timestamp = &curTime\n\t}\n\n\tc.msgChan <- msg\n\treturn nil\n}\n\nfunc (c *Client) queueReceiver() {\n\tfor {\n\t\tselect {\n\t\tcase msg := <-c.msgChan:\n\t\t\tc.queueMutex.Lock()\n\t\t\tc.queue = append(c.queue, msg)\n\t\t\tc.queueMutex.Unlock()\n\t\tcase quitVal := <-c.queueCtl:\n\t\t\tif quitVal == 1 {\n\t\t\t\t// Don't quit if there are still\n\t\t\t\t// messages in the channel\n\t\t\t\tif len(c.msgChan) > 0 {\n\t\t\t\t\tc.queueCtl <- 1\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tc.queueCtl <- 2\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (c *Client) msgSender() {\n\tvar msg *Message\n\tfor {\n\t\tif len(c.queue) > 0 {\n\t\t\tc.queueMutex.Lock()\n\t\t\tmsg, c.queue = c.queue[0], c.queue[1:]\n\t\t\tc.queueMutex.Unlock()\n\n\t\t\tdata, err := generateMsgJson(msg)\n\t\t\tif err != nil {\n\t\t\t\t// TODO Not sure what to do at this point? Fail the\n\t\t\t\t// message silently?\n\t\t\t\t// Might be able to add an error channel that the\n\t\t\t\t// user can watch for errors\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\terr = c.writeMsg(data, c.conn, COMP_GZIP)\n\t\t\tif err != nil {\n\t\t\t\t// TODO Same as above...\n\t\t\t}\n\t\t} else {\n\t\t\ttime.Sleep(1 * time.Second)\n\n\t\t\tselect {\n\t\t\tcase quitVal := <-c.sendCtl:\n\t\t\t\tif quitVal == 1 {\n\t\t\t\t\tif len(c.queue) > 0 {\n\t\t\t\t\t\tc.sendCtl <- 1\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tc.sendCtl <- 2\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (c *Client) writeMsg(data string, w io.Writer, compression int) error {\n\tchnk, err := newChunker(w, c.config.ChunkSize)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer chnk.Flush()\n\n\tswitch compression {\n\tcase COMP_GZIP:\n\t\tgz, err := gzip.NewWriterLevel(chnk, gzip.DefaultCompression)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgz.Write([]byte(data))\n\t\tgz.Close()\n\tcase COMP_ZLIB:\n\t\tzz, err := zlib.NewWriterLevel(chnk, zlib.DefaultCompression)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tzz.Write([]byte(data))\n\t\tzz.Close()\n\tdefault:\n\t\tchnk.Write([]byte(data))\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/json.go",
    "content": "package golf\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\n// Workaround for json encoding 64 bit floats.  When using\n// a normal float it's marshalled in scientific notation instead\n// of decimal notation\ntype jsonFloat struct {\n\tval float64\n}\n\nfunc newJsonFloat(val float64) *jsonFloat {\n\treturn &jsonFloat{val: val}\n}\nfunc (jf *jsonFloat) MarshalJSON() ([]byte, error) {\n\treturn []byte(fmt.Sprintf(\"%0f\", jf.val)), nil\n}\n\nfunc generateMsgJson(msg *Message) (string, error) {\n\tobj := make(map[string]interface{}, 0)\n\n\tobj[\"version\"] = msg.version\n\tobj[\"host\"] = msg.Hostname\n\tobj[\"level\"] = msg.Level\n\n\tobj[\"short_message\"] = msg.ShortMessage\n\tif len(msg.FullMessage) > 0 {\n\t\tobj[\"full_message\"] = msg.FullMessage\n\t}\n\n\tts := float64(msg.Timestamp.UnixNano()) * float64(0.000000001)\n\tobj[\"timestamp\"] = newJsonFloat(ts)\n\n\t// First add all the logger level attrs if it exists\n\tif msg.logger != nil {\n\t\tfor attrName, attrVal := range msg.logger.attrs {\n\t\t\tobj[fmt.Sprintf(\"_%v\", attrName)] = attrVal\n\t\t}\n\t}\n\n\t// Next add all the message level attrs. Those override\n\t// logger level attrs\n\tfor attrName, attrVal := range msg.Attrs {\n\t\tobj[fmt.Sprintf(\"_%v\", attrName)] = attrVal\n\t}\n\n\tdata, err := json.Marshal(obj)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(data), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/log.go",
    "content": "package golf\n\nimport (\n\t\"fmt\"\n)\n\nfunc (l *Logger) genMsg(attrs map[string]interface{}, level int, msg string, va ...interface{}) *Message {\n\tnewMsg := l.NewMessage()\n\tnewMsg.Level = level\n\tif len(va) > 0 {\n\t\tnewMsg.ShortMessage = fmt.Sprintf(msg, va...)\n\t} else {\n\t\tnewMsg.ShortMessage = msg\n\t}\n\tnewMsg.Attrs = attrs\n\treturn newMsg\n}\n\nfunc (l *Logger) logMsg(attrs map[string]interface{}, level int, msg string, va ...interface{}) error {\n\tnewMsg := l.genMsg(attrs, level, msg, va...)\n\treturn l.client.QueueMsg(newMsg)\n}\n\n// Dbg logs message 'msg' at LEVEL_DBG level\nfunc (l *Logger) Dbg(msg string) error {\n\treturn l.logMsg(nil, LEVEL_DBG, msg)\n}\n\n// Log a message at LEVEL_DBG with 'format' populated with values from 'va'\nfunc (l *Logger) Dbgf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_DBG, format, va...)\n}\n\n// Log a message at LEVEL_DBG with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Dbgm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_DBG, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_INFO level\nfunc (l *Logger) Info(msg string) error {\n\treturn l.logMsg(nil, LEVEL_INFO, msg)\n}\n\n// Log a message at LEVEL_INFO with 'format' populated with values from 'va'\nfunc (l *Logger) Infof(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_INFO, format, va...)\n}\n\n// Log a message at LEVEL_INFO with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Infom(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_INFO, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_NOTICE level\nfunc (l *Logger) Notice(msg string) error {\n\treturn l.logMsg(nil, LEVEL_NOTICE, msg)\n}\n\n// Log a message at LEVEL_NOTICE with 'format' populated with values from 'va'\nfunc (l *Logger) Noticef(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_NOTICE, format, va...)\n}\n\n// Log a message at LEVEL_NOTICE with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Noticem(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_NOTICE, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_WARN level\nfunc (l *Logger) Warn(msg string) error {\n\treturn l.logMsg(nil, LEVEL_WARN, msg)\n}\n\n// Log a message at LEVEL_WARN with 'format' populated with values from 'va'\nfunc (l *Logger) Warnf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_WARN, format, va...)\n}\n\n// Log a message at LEVEL_WARN with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Warnm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_WARN, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_ERR level\nfunc (l *Logger) Err(msg string) error {\n\treturn l.logMsg(nil, LEVEL_ERR, msg)\n}\n\n// Log a message at LEVEL_ERR with 'format' populated with values from 'va'\nfunc (l *Logger) Errf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_ERR, format, va...)\n}\n\n// Log a message at LEVEL_ERR with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Errm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_ERR, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_CRIT level\nfunc (l *Logger) Crit(msg string) error {\n\treturn l.logMsg(nil, LEVEL_CRIT, msg)\n}\n\n// Log a message at LEVEL_CRIT with 'format' populated with values from 'va'\nfunc (l *Logger) Critf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_CRIT, format, va...)\n}\n\n// Log a message at LEVEL_CRIT with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Critm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_CRIT, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_ALERT level\nfunc (l *Logger) Alert(msg string) error {\n\treturn l.logMsg(nil, LEVEL_ALERT, msg)\n}\n\n// Log a message at LEVEL_ALERT with 'format' populated with values from 'va'\nfunc (l *Logger) Alertf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_ALERT, format, va...)\n}\n\n// Log a message at LEVEL_ALERT with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Alertm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_ALERT, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_EMERG level\nfunc (l *Logger) Emerg(msg string) error {\n\treturn l.logMsg(nil, LEVEL_EMERG, msg)\n}\n\n// Log a message at LEVEL_EMERG with 'format' populated with values from 'va'\nfunc (l *Logger) Emergf(format string, va ...interface{}) error {\n\treturn l.logMsg(nil, LEVEL_EMERG, format, va...)\n}\n\n// Log a message at LEVEL_EMERG with 'format' populated with values from 'va'. The\n// attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc (l *Logger) Emergm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn l.logMsg(attrs, LEVEL_EMERG, format, va...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/log_default.go",
    "content": "package golf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nvar defaultLogger *Logger\n\n// Set the default Logger. Any calls to log messages not associated with a\n// specific Logger (such as calling l.Dbg()) will use the default logger.\nfunc DefaultLogger(l *Logger) {\n\tdefaultLogger = l\n}\n\nfunc genDefaultMsg(attrs map[string]interface{}, level int, msg string, va ...interface{}) *Message {\n\tnewMsg := defaultLogger.NewMessage()\n\tnewMsg.Level = level\n\tif len(va) > 0 {\n\t\tnewMsg.ShortMessage = fmt.Sprintf(msg, va...)\n\t} else {\n\t\tnewMsg.ShortMessage = msg\n\t}\n\tnewMsg.Attrs = attrs\n\treturn newMsg\n}\n\nfunc logDefaultMsg(attrs map[string]interface{}, level int, msg string, va ...interface{}) error {\n\tif defaultLogger == nil {\n\t\treturn errors.New(\"A default logger is not set.\")\n\t}\n\n\tnewMsg := genDefaultMsg(attrs, level, msg, va...)\n\treturn defaultLogger.client.QueueMsg(newMsg)\n}\n\n// Log a message 'msg' at LEVEL_DBG level on the default logger\nfunc Dbg(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_DBG, msg)\n}\n\n// Log a message at LEVEL_DBG with 'format' populated with values from 'va' on the default logger\nfunc Dbgf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_DBG, format, va...)\n}\n\n// Log a message at LEVEL_DBG with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Dbgm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_DBG, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_INFO level on the default logger\nfunc Info(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_INFO, msg)\n}\n\n// Log a message at LEVEL_INFO with 'format' populated with values from 'va' on the default logger\nfunc Infof(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_INFO, format, va...)\n}\n\n// Log a message at LEVEL_INFO with 'format' populated with values from 'va'  on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Infom(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_INFO, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_NOTICE level on the default logger\nfunc Notice(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_NOTICE, msg)\n}\n\n// Log a message at LEVEL_NOTICE with 'format' populated with values from 'va' on the default logger\nfunc Noticef(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_NOTICE, format, va...)\n}\n\n// Log a message at LEVEL_NOTICE with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Noticem(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_NOTICE, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_WARN level on the default logger\nfunc Warn(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_WARN, msg)\n}\n\n// Log a message at LEVEL_WARN with 'format' populated with values from 'va' on the default logger\nfunc Warnf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_WARN, format, va...)\n}\n\n// Log a message at LEVEL_WARN with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Warnm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_WARN, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_ERR level on the default logger on the default logger\nfunc Err(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_ERR, msg)\n}\n\n// Log a message at LEVEL_ERR with 'format' populated with values from 'va' on the default logger\nfunc Errf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_ERR, format, va...)\n}\n\n// Log a message at LEVEL_ERR with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Errm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_ERR, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_CRIT level on the default logger\nfunc Crit(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_CRIT, msg)\n}\n\n// Log a message at LEVEL_CRIT with 'format' populated with values from 'va' on the default logger\nfunc Critf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_CRIT, format, va...)\n}\n\n// Log a message at LEVEL_CRIT with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Critm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_CRIT, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_ALERT level on the default logger\nfunc Alert(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_ALERT, msg)\n}\n\n// Log a message at LEVEL_ALERT with 'format' populated with values from 'va' on the default logger\nfunc Alertf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_ALERT, format, va...)\n}\n\n// Log a message at LEVEL_ALERT with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Alertm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_ALERT, format, va...)\n}\n\n// Log a message 'msg' at LEVEL_EMERG level on the default logger\nfunc Emerg(msg string) error {\n\treturn logDefaultMsg(nil, LEVEL_EMERG, msg)\n}\n\n// Log a message at LEVEL_EMERG with 'format' populated with values from 'va' on the default logger\nfunc Emergf(format string, va ...interface{}) error {\n\treturn logDefaultMsg(nil, LEVEL_EMERG, format, va...)\n}\n\n// Log a message at LEVEL_EMERG with 'format' populated with values from 'va' on the default logger.\n// The attributes from 'attrs' will be included with the message, overriding any that may\n// be set at the Logger level\nfunc Emergm(attrs map[string]interface{}, format string, va ...interface{}) error {\n\treturn logDefaultMsg(attrs, LEVEL_EMERG, format, va...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/logger.go",
    "content": "package golf\n\n// A Logger is a set of attributes associated with a Client. When a message is\n// sent with the Logger, the attributes from that Logger will be added to the\n// message.\ntype Logger struct {\n\tclient *Client\n\n\tattrs map[string]interface{}\n}\n\nfunc newLogger() *Logger {\n\tlog := &Logger{\n\t\tattrs: make(map[string]interface{}, 0),\n\t}\n\treturn log\n}\n\n// Create a new Logger associated with the Client.  Any messages logged with\n// this Logger (and any Logger cloned from this) will be sent to Client.\nfunc (c *Client) NewLogger() (*Logger, error) {\n\tlog := newLogger()\n\tlog.client = c\n\n\treturn log, nil\n}\n\n// Create a new Logger with a shallow copy of the original Logger's attributes\nfunc (l *Logger) Clone() *Logger {\n\tnewLogger, _ := l.client.NewLogger()\n\n\tfor attrKey, attrVal := range l.attrs {\n\t\tnewLogger.SetAttr(attrKey, attrVal)\n\t}\n\n\treturn newLogger\n}\n\n// Retrieve the current value of the Logger level attribute named 'name'.\n// Returns nil if the attribute was not found\nfunc (l *Logger) Attr(name string) interface{} {\n\tval, ok := l.attrs[name]\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn val\n}\n\n// Set an attribute named 'name' to the value 'val' at the Logger\n// level of attributes\nfunc (l *Logger) SetAttr(name string, val interface{}) {\n\tl.attrs[name] = val\n}\n\n// Remove the attribute named 'name' from the Logger level of attributes\nfunc (l *Logger) RemAttr(name string) {\n\tdelete(l.attrs, name)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/main.go",
    "content": "/*\nProvides logging capabilities using the GELF (https://www.graylog.org/resources/gelf-2/) log format\n\n*/\npackage golf\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aphistic/golf/message.go",
    "content": "package golf\n\nimport (\n\t\"time\"\n)\n\n// Levels to be used when logging messages.  These match syslog levels as the\n// GELF spec specifies.\nconst (\n\tLEVEL_EMERG  = iota // Emergency\n\tLEVEL_ALERT         // Alert\n\tLEVEL_CRIT          // Critical\n\tLEVEL_ERR           // Error\n\tLEVEL_WARN          // Warning\n\tLEVEL_NOTICE        // Notice\n\tLEVEL_INFO          // Informational\n\tLEVEL_DBG           // Debug\n)\n\n// A message to be serialized and sent to the GELF server\ntype Message struct {\n\tlogger *Logger\n\n\tversion      string                 // GELF version to serialize to\n\tLevel        int                    // Log level for the message (see LEVEL_DBG, etc)\n\tHostname     string                 // Hostname of the client\n\tTimestamp    *time.Time             // Timestamp for the message. Populated automatically if left nil\n\tShortMessage string                 // Short log message\n\tFullMessage  string                 // Full message (optional). Can be used for things like stack traces.\n\tAttrs        map[string]interface{} // A list of attributes to add to the message\n}\n\n// Create a new message associated with a Logger.  When the message is sent, it\n// will use the attributes associated with the Logger it was created from in addition\n// to its own\nfunc (l *Logger) NewMessage() *Message {\n\tmsg := newMessage()\n\tmsg.logger = l\n\tmsg.Hostname = l.client.hostname\n\treturn msg\n}\n\nfunc newMessage() *Message {\n\treturn newMessageForVersion(\"1.1\")\n}\nfunc newMessageForVersion(version string) *Message {\n\tmsg := &Message{\n\t\tversion: version,\n\n\t\tAttrs: make(map[string]interface{}, 0),\n\t}\n\treturn msg\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/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": "12fa-docker-golang/chapter11/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 new request error wrapper for the given Error\n// provided.\nfunc NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure {\n\treturn newRequestError(err, statusCode, reqID)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go",
    "content": "package awserr\n\nimport \"fmt\"\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}\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\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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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 the 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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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\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.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\tstringValue(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\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/client/client.go",
    "content": "package client\n\nimport (\n\t\"fmt\"\n\t\"net/http/httputil\"\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\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(request.NamedHandler{Name: \"awssdk.client.LogRequest\", Fn: logRequest})\n\tc.Handlers.Send.PushBackNamed(request.NamedHandler{Name: \"awssdk.client.LogResponse\", Fn: logResponse})\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\nfunc logRequest(r *request.Request) {\n\tlogBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)\n\tdumpedBody, err := httputil.DumpRequestOut(r.HTTPRequest, logBody)\n\tif err != nil {\n\t\tr.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err))\n\t\treturn\n\t}\n\n\tif logBody {\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, r.ClientInfo.ServiceName, r.Operation.Name, string(dumpedBody)))\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\nfunc logResponse(r *request.Request) {\n\tvar msg = \"no response data\"\n\tif r.HTTPResponse != nil {\n\t\tlogBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)\n\t\tdumpedBody, err := httputil.DumpResponse(r.HTTPResponse, logBody)\n\t\tif err != nil {\n\t\t\tr.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err))\n\t\t\treturn\n\t\t}\n\n\t\tmsg = string(dumpedBody)\n\t} else if r.Error != nil {\n\t\tmsg = r.Error.Error()\n\t}\n\tr.Config.Logger.Log(fmt.Sprintf(logRespMsg, r.ClientInfo.ServiceName, r.Operation.Name, msg))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go",
    "content": "package client\n\nimport (\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\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//      service.DefaultRetryer\n//    }\n//\n//    // This implementation always has 100 max retries\n//    func (d retryer) MaxRetries() uint { 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\nvar seededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())})\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\tminTime = 500\n\t}\n\n\tretryCount := r.RetryCount\n\tif retryCount > 13 {\n\t\tretryCount = 13\n\t} else if throttle && retryCount > 8 {\n\t\tretryCount = 8\n\t}\n\n\tdelay := (1 << uint(retryCount)) * (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\tif r.HTTPResponse.StatusCode >= 500 {\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\tif r.HTTPResponse.StatusCode == 502 ||\n\t\tr.HTTPResponse.StatusCode == 503 ||\n\t\tr.HTTPResponse.StatusCode == 504 {\n\t\treturn true\n\t}\n\treturn r.IsErrorThrottle()\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"
  },
  {
    "path": "12fa-docker-golang/chapter11/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\tAPIVersion    string\n\tEndpoint      string\n\tSigningName   string\n\tSigningRegion string\n\tJSONVersion   string\n\tTargetPrefix  string\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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 tructure.\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// 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\n\t//   AWS 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 request.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// @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html\n\t//   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// 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 endpiont 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\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// 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// 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.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\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/context.go",
    "content": "package aws\n\nimport (\n\t\"time\"\n)\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\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\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/context_1_6.go",
    "content": "// +build !go1.7\n\npackage aws\n\nimport \"time\"\n\n// An emptyCtx is a copy of the the Go 1.7 context.emptyCtx type. This\n// is copied to provide a 1.6 and 1.5 safe version of context that is compatible\n// with Go 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"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/context_1_7.go",
    "content": "// +build go1.7\n\npackage aws\n\nimport \"context\"\n\nvar (\n\tbackgroundCtx = context.Background()\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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// 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": "12fa-docker-golang/chapter11/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\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"runtime\"\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 aded 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\tswitch body := r.Body.(type) {\n\t\tcase nil:\n\t\t\tlength = 0\n\t\tcase lener:\n\t\t\tlength = int64(body.Len())\n\t\tcase io.Seeker:\n\t\t\tr.BodyStart, _ = body.Seek(0, 1)\n\t\t\tend, _ := body.Seek(0, 2)\n\t\t\tbody.Seek(r.BodyStart, 0) // make sure to seek back to original location\n\t\t\tlength = end - r.BodyStart\n\t\tdefault:\n\t\t\tpanic(\"Cannot get length of body, must provide `ContentLength`\")\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\n// SDKVersionUserAgentHandler is a request handler for adding the SDK Version 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\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 signficantly before it is sent. Or significant delays\n// occur whne 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// 10 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(10 * 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{Name: \"core.SendHandler\", Fn: func(r *request.Request) {\n\tvar err error\n\tr.HTTPResponse, err = r.Config.HTTPClient.Do(r.HTTPRequest)\n\tif err != nil {\n\t\t// Prevent leaking if an HTTPResponse was returned. Clean up\n\t\t// the body.\n\t\tif r.HTTPResponse != nil {\n\t\t\tr.HTTPResponse.Body.Close()\n\t\t}\n\t\t// Capture the case where url.Error is returned for error processing\n\t\t// response. e.g. 301 without location header comes back as string\n\t\t// error and r.HTTPResponse is nil. Other url redirect errors will\n\t\t// comeback in a similar method.\n\t\tif e, ok := err.(*url.Error); ok && e.Err != nil {\n\t\t\tif s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil {\n\t\t\t\tcode, _ := strconv.ParseInt(s[1], 10, 64)\n\t\t\t\tr.HTTPResponse = &http.Response{\n\t\t\t\t\tStatusCode: int(code),\n\t\t\t\t\tStatus:     http.StatusText(int(code)),\n\t\t\t\t\tBody:       ioutil.NopCloser(bytes.NewReader([]byte{})),\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif r.HTTPResponse == nil {\n\t\t\t// Add a dummy request response object to ensure the HTTPResponse\n\t\t\t// value is consistent.\n\t\t\tr.HTTPResponse = &http.Response{\n\t\t\t\tStatusCode: int(0),\n\t\t\t\tStatus:     http.StatusText(int(0)),\n\t\t\t\tBody:       ioutil.NopCloser(bytes.NewReader([]byte{})),\n\t\t\t}\n\t\t}\n\t\t// Catch all other request errors.\n\t\tr.Error = awserr.New(\"RequestError\", \"send request failed\", err)\n\t\tr.Retryable = aws.Bool(true) // network errors are retryable\n\n\t\t// Override the error with a context canceled error, if that was canceled.\n\t\tctx := r.Context()\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\tr.Error = awserr.New(request.CanceledErrorCode,\n\t\t\t\t\"request context canceled\", ctx.Err())\n\t\t\tr.Retryable = aws.Bool(false)\n\t\tdefault:\n\t\t}\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 {\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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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\t//\n\t// @readonly\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 := NewChainCredentials(\n//         []Provider{\n//             &EnvProvider{},\n//             &EC2RoleProvider{\n//                 Client: ec2metadata.New(sess),\n//             },\n//         })\n//\n//     // Usage of ChainCredentials with aws.Config\n//     svc := ec2.New(&aws.Config{Credentials: creds})\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": "12fa-docker-golang/chapter11/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 := 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 := NewCredentials(&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 := NewCredentials(&MyProvider{})\n//     credValue, err := creds.Get()\n//\npackage credentials\n\nimport (\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(&aws.Config{Credentials: AnonymousCredentials})\n//     // Access public S3 buckets.\n//\n// @readonly\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 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\tif e.CurrentTime == nil {\n\t\te.CurrentTime = time.Now\n\t}\n\treturn e.expiration.Before(e.CurrentTime())\n}\n\n// A Credentials provides synchronous 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\tm            sync.Mutex\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\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.Lock()\n\tdefer c.m.Unlock()\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"
  },
  {
    "path": "12fa-docker-golang/chapter11/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\"path\"\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)\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(\"SerializationError\", \"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(path.Join(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(\"SerializationError\",\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": "12fa-docker-golang/chapter11/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)\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\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\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(\"SerializationError\",\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\tif err := json.NewDecoder(r.HTTPResponse.Body).Decode(&errOut); err != nil {\n\t\tr.Error = awserr.New(\"SerializationError\",\n\t\t\t\"failed to decode endpoint credentials\",\n\t\t\terr,\n\t\t)\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": "12fa-docker-golang/chapter11/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\t//\n\t// @readonly\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\t//\n\t// @readonly\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// * 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": "12fa-docker-golang/chapter11/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\t\"path/filepath\"\n\n\t\"github.com/go-ini/ini\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\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\t//\n\t// @readonly\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.Load(filename)\n\tif err != nil {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsLoad\", \"failed to load shared credentials file\", err)\n\t}\n\tiniProfile, err := config.GetSection(profile)\n\tif err != nil {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsLoad\", \"failed to get profile\", err)\n\t}\n\n\tid, err := iniProfile.GetKey(\"aws_access_key_id\")\n\tif err != nil {\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\terr)\n\t}\n\n\tsecret, err := iniProfile.GetKey(\"aws_secret_access_key\")\n\tif err != nil {\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.Key(\"aws_session_token\")\n\n\treturn Value{\n\t\tAccessKeyID:     id.String(),\n\t\tSecretAccessKey: secret.String(),\n\t\tSessionToken:    token.String(),\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 p.Filename == \"\" {\n\t\tif p.Filename = os.Getenv(\"AWS_SHARED_CREDENTIALS_FILE\"); p.Filename != \"\" {\n\t\t\treturn p.Filename, nil\n\t\t}\n\n\t\thomeDir := os.Getenv(\"HOME\") // *nix\n\t\tif homeDir == \"\" {           // Windows\n\t\t\thomeDir = os.Getenv(\"USERPROFILE\")\n\t\t}\n\t\tif homeDir == \"\" {\n\t\t\treturn \"\", ErrSharedCredentialsHomeNotFound\n\t\t}\n\n\t\tp.Filename = filepath.Join(homeDir, \".aws\", \"credentials\")\n\t}\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": "12fa-docker-golang/chapter11/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\t//\n\t// @readonly\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": "12fa-docker-golang/chapter11/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\"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/service/sts\"\n)\n\n// StdinTokenProvider will prompt on stdout 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.Printf(\"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\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\tinput := &sts.AssumeRoleInput{\n\t\tDurationSeconds: aws.Int64(int64(p.Duration / 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": "12fa-docker-golang/chapter11/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/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)\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.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: []credentials.Provider{\n\t\t\t&credentials.EnvProvider{},\n\t\t\t&credentials.SharedCredentialsProvider{Filename: \"\", Profile: \"\"},\n\t\t\tRemoteCredProvider(*cfg, handlers),\n\t\t},\n\t})\n}\n\nconst (\n\thttpProviderEnvVar     = \"AWS_CONTAINER_CREDENTIALS_FULL_URI\"\n\tecsCredsProviderEnvVar = \"AWS_CONTAINER_CREDENTIALS_RELATIVE_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(ecsCredsProviderEnvVar); len(uri) > 0 {\n\t\tu := fmt.Sprintf(\"http://169.254.170.2%s\", uri)\n\t\treturn httpCredProvider(cfg, handlers, u)\n\t}\n\n\treturn ec2RoleProvider(cfg, handlers)\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 if host := aws.URLHostname(parsed); !(host == \"localhost\" || host == \"127.0.0.1\") {\n\t\terrMsg = fmt.Sprintf(\"invalid host address, %q, only localhost and 127.0.0.1 are valid.\", host)\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},\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": "12fa-docker-golang/chapter11/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\"path\"\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)\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:   path.Join(\"/\", \"meta-data\", p),\n\t}\n\n\toutput := &metadataOutput{}\n\treq := c.NewRequest(op, nil, output)\n\n\treturn output.Content, req.Send()\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:   path.Join(\"/\", \"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\n\treturn output.Content, req.Send()\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:   path.Join(\"/\", \"dynamic\", p),\n\t}\n\n\toutput := &metadataOutput{}\n\treq := c.NewRequest(op, nil, output)\n\n\treturn output.Content, req.Send()\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(\"SerializationError\",\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(\"SerializationError\",\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\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": "12fa-docker-golang/chapter11/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.\npackage ec2metadata\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\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/request\"\n)\n\n// ServiceName is the name of the service.\nconst ServiceName = \"ec2metadata\"\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\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// 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(\"SerializationError\", \"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(\"SerializationError\", \"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": "12fa-docker-golang/chapter11/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}\n\n\treturn ps, nil\n}\n\nfunc custAddS3DualStack(p *partition) {\n\tif p.ID != \"aws\" {\n\t\treturn\n\t}\n\n\ts, ok := p.Services[\"s3\"]\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[\"s3\"] = 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\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": "12fa-docker-golang/chapter11/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\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\tEuWest1RegionID      = \"eu-west-1\"      // EU (Ireland).\n\tEuWest2RegionID      = \"eu-west-2\"      // EU (London).\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)\n\n// AWS GovCloud (US) partition's regions.\nconst (\n\tUsGovWest1RegionID = \"us-gov-west-1\" // AWS GovCloud (US).\n)\n\n// Service identifiers\nconst (\n\tAcmServiceID                          = \"acm\"                          // Acm.\n\tApigatewayServiceID                   = \"apigateway\"                   // Apigateway.\n\tApplicationAutoscalingServiceID       = \"application-autoscaling\"      // ApplicationAutoscaling.\n\tAppstream2ServiceID                   = \"appstream2\"                   // Appstream2.\n\tAutoscalingServiceID                  = \"autoscaling\"                  // Autoscaling.\n\tBatchServiceID                        = \"batch\"                        // Batch.\n\tBudgetsServiceID                      = \"budgets\"                      // Budgets.\n\tClouddirectoryServiceID               = \"clouddirectory\"               // Clouddirectory.\n\tCloudformationServiceID               = \"cloudformation\"               // Cloudformation.\n\tCloudfrontServiceID                   = \"cloudfront\"                   // Cloudfront.\n\tCloudhsmServiceID                     = \"cloudhsm\"                     // Cloudhsm.\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\tCognitoIdentityServiceID              = \"cognito-identity\"             // CognitoIdentity.\n\tCognitoIdpServiceID                   = \"cognito-idp\"                  // CognitoIdp.\n\tCognitoSyncServiceID                  = \"cognito-sync\"                 // CognitoSync.\n\tConfigServiceID                       = \"config\"                       // Config.\n\tCurServiceID                          = \"cur\"                          // Cur.\n\tDatapipelineServiceID                 = \"datapipeline\"                 // Datapipeline.\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\tEsServiceID                           = \"es\"                           // Es.\n\tEventsServiceID                       = \"events\"                       // Events.\n\tFirehoseServiceID                     = \"firehose\"                     // Firehose.\n\tGameliftServiceID                     = \"gamelift\"                     // Gamelift.\n\tGlacierServiceID                      = \"glacier\"                      // Glacier.\n\tHealthServiceID                       = \"health\"                       // Health.\n\tIamServiceID                          = \"iam\"                          // Iam.\n\tImportexportServiceID                 = \"importexport\"                 // Importexport.\n\tInspectorServiceID                    = \"inspector\"                    // Inspector.\n\tIotServiceID                          = \"iot\"                          // Iot.\n\tKinesisServiceID                      = \"kinesis\"                      // Kinesis.\n\tKinesisanalyticsServiceID             = \"kinesisanalytics\"             // Kinesisanalytics.\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\tMeteringMarketplaceServiceID          = \"metering.marketplace\"         // MeteringMarketplace.\n\tMobileanalyticsServiceID              = \"mobileanalytics\"              // Mobileanalytics.\n\tMonitoringServiceID                   = \"monitoring\"                   // Monitoring.\n\tMturkRequesterServiceID               = \"mturk-requester\"              // MturkRequester.\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\tRoute53ServiceID                      = \"route53\"                      // Route53.\n\tRoute53domainsServiceID               = \"route53domains\"               // Route53domains.\n\tRuntimeLexServiceID                   = \"runtime.lex\"                  // RuntimeLex.\n\tS3ServiceID                           = \"s3\"                           // S3.\n\tSdbServiceID                          = \"sdb\"                          // Sdb.\n\tServicecatalogServiceID               = \"servicecatalog\"               // Servicecatalog.\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\tWafServiceID                          = \"waf\"                          // Waf.\n\tWafRegionalServiceID                  = \"waf-regional\"                 // WafRegional.\n\tWorkdocsServiceID                     = \"workdocs\"                     // Workdocs.\n\tWorkspacesServiceID                   = \"workspaces\"                   // Workspaces.\n\tXrayServiceID                         = \"xray\"                         // Xray.\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// 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 := endpoints.DefaultResolver()\n//    partitions := resolver.(endpoints.EnumPartitions).Partitions()\n//    for _, p := range partitions {\n//        // ... inspect partitions\n//    }\nfunc DefaultResolver() Resolver {\n\treturn defaultPartitions\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-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-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\"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\"acm\": 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\"apigateway\": 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-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-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\"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\"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\"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-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\"batch\": 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\"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\"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\"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\"cloudformation\": 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\"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\"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-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\"codebuild\": 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-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codecommit\": 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\t\"us-east-2\": 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-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\"codepipeline\": 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\"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-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-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\"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-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\"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-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\"config\": 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\"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\"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\"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-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\"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-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\"ds\": 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-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-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\"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-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\"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\"ecr\": 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\"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\"ecs\": 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\"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\"elasticache\": 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\"elasticbeanstalk\": 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\"elasticfilesystem\": service{\n\n\t\t\tEndpoints: endpoints{\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\"elasticloadbalancing\": 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-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\"elasticmapreduce\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"{region}.{service}.{dnsSuffix}\",\n\t\t\t\tProtocols:     []string{\"http\", \"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\tSSLCommonName: \"{service}.{region}.{dnsSuffix}\",\n\t\t\t\t},\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\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\"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\"es\": 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-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-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\"firehose\": 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\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\"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\"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-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\"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\"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-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\"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-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\"kinesis\": 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\"kinesisanalytics\": 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\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\"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\"lambda\": 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-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\"us-east-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\"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\"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\"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-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\"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\"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-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\"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\"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\"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\"opsworks-cm\": 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\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\"us-east-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\"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\"rds\": 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\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-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\"rekognition\": 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\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\"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\"us-east-1\": 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-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-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\"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\"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\"servicecatalog\": 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\"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\"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-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},\n\t\t},\n\t\t\"snowball\": 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\"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\"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-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\"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-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\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-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-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-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\"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-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\"streams.dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"http\", \"https\", \"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-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      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-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-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\"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-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\"tagging\": 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\"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\"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\"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\"workspaces\": 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-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\"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},\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},\n\tServices: services{\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},\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},\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},\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},\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},\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},\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},\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},\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\"elasticache\": 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\"elasticbeanstalk\": 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\"elasticloadbalancing\": 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},\n\t\t},\n\t\t\"elasticmapreduce\": 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},\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},\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},\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\"kinesis\": 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\"logs\": 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\"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},\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},\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},\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},\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},\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},\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\", \"http\", \"https\", \"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},\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},\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},\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},\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-west-1\": region{\n\t\t\tDescription: \"AWS GovCloud (US)\",\n\t\t},\n\t},\n\tServices: services{\n\t\t\"autoscaling\": service{\n\n\t\t\tEndpoints: endpoints{\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\"cloudformation\": 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\"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\"cloudtrail\": 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\"config\": 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\"directconnect\": 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\"dynamodb\": 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\"ec2\": 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\"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\"elasticache\": 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-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-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\"glacier\": service{\n\n\t\t\tEndpoints: endpoints{\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\"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\"kinesis\": 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\"kms\": 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\"logs\": 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\"monitoring\": 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-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-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-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\"snowball\": 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\"sns\": service{\n\n\t\t\tEndpoints: endpoints{\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-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\"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-west-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\"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-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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.Name)\n//         for id, _ := range p.Regions() {\n//             fmt.Println(\"*\", id)\n//         }\n//\n//         fmt.Println(\"Services for\", p.Name)\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": "12fa-docker-golang/chapter11/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 unkonwn 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// 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 := range p.p.Regions {\n\t\trs[id] = Region{\n\t\t\tid: id,\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// 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// Endpoints returns a map of Endpoints indexed by their ID for all known\n// endpoints for 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// 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//// NewEndpointNotFoundError builds and returns NewEndpointNotFoundError.\n//func NewEndpointNotFoundError(p, s, r string) EndpointNotFoundError {\n//\treturn EndpointNotFoundError{\n//\t\tawsError:  awserr.New(\"EndpointNotFoundError\", \"unable to find endpoint\", nil),\n//\t\tPartition: p,\n//\t\tService:   s,\n//\t\tRegion:    r,\n//\t}\n//}\n//\n//// Error returns string representation of the error.\n//func (e EndpointNotFoundError) Error() string {\n//\textra := fmt.Sprintf(\"partition: %q, service: %q, region: %q\",\n//\t\te.Partition, e.Service, e.Region)\n//\treturn awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr())\n//}\n//\n//// String returns the string representation of the error.\n//func (e EndpointNotFoundError) String() string {\n//\treturn e.Error()\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": "12fa-docker-golang/chapter11/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\tsigningName := e.CredentialScope.Service\n\tif len(signingName) == 0 {\n\t\tsigningName = service\n\t}\n\n\treturn ResolvedEndpoint{\n\t\tURL:           u,\n\t\tSigningRegion: signingRegion,\n\t\tSigningName:   signingName,\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": "12fa-docker-golang/chapter11/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\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\ttmpl := template.Must(template.New(\"tmpl\").Funcs(funcMap).Parse(v3Tmpl))\n\tif err := tmpl.ExecuteTemplate(outFile, \"defaults\", resolver); 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\" . }}\n\n\t{{ range $_, $partition := . }}\n\t\t{{ template \"partition region consts\" $partition }}\n\t{{ end }}\n\n\t{{ template \"service consts\" . }}\n\t\n\t{{ template \"endpoint resolvers\" . }}\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// Casting the return value of this func to a EnumPartitions will\n\t// allow you to get a list of the partitions in the order the endpoints\n\t// will be resolved in.\n\t//\n\t//    resolver := endpoints.DefaultResolver()\n\t//    partitions := resolver.(endpoints.EnumPartitions).Partitions()\n\t//    for _, p := range partitions {\n\t//        // ... inspect partitions\n\t//    }\n\tfunc DefaultResolver() Resolver {\n\t\treturn defaultPartitions\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": "12fa-docker-golang/chapter11/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\t//\n\t// @readonly\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\t//\n\t// @readonly\n\tErrMissingEndpoint = awserr.New(\"MissingEndpoint\", \"'Endpoint' configuration is required for this service\", nil)\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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//\tvalues := JSONValue{\n//\t\t\"Foo\": \"Bar\",\n//\t}\n//\tvalues[\"Baz\"] = \"Qux\"\ntype JSONValue map[string]interface{}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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 nill, 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 nill, 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\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": "12fa-docker-golang/chapter11/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\tUnmarshalMeta    HandlerList\n\tUnmarshalError   HandlerList\n\tRetry            HandlerList\n\tAfterRetry       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\tUnmarshalError:   h.UnmarshalError.copy(),\n\t\tUnmarshalMeta:    h.UnmarshalMeta.copy(),\n\t\tRetry:            h.Retry.copy(),\n\t\tAfterRetry:       h.AfterRetry.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.UnmarshalMeta.Clear()\n\th.UnmarshalError.Clear()\n\th.ValidateResponse.Clear()\n\th.Retry.Clear()\n\th.AfterRetry.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// 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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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\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, 0)\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": "12fa-docker-golang/chapter11/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\"\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)\n\nconst (\n\t// ErrCodeSerialization is the serialization error code that is received\n\t// during protocol unmarshaling.\n\tErrCodeSerialization = \"SerializationError\"\n\n\t// ErrCodeResponseTimeout is the connection timeout error that is recieved\n\t// during body reads.\n\tErrCodeResponseTimeout = \"ResponseTimeout\"\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\tTime             time.Time\n\tExpireTime       time.Duration\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\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\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\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.ResetBody()\n}\n\n// Presign returns the request's signed URL. Error will be returned\n// if the signing fails.\nfunc (r *Request) Presign(expireTime time.Duration) (string, error) {\n\tr.ExpireTime = expireTime\n\tr.NotHoist = false\n\n\tif r.Operation.BeforePresignFn != nil {\n\t\tr = r.copy()\n\t\terr := r.Operation.BeforePresignFn(r)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\n\tr.Sign()\n\tif r.Error != nil {\n\t\treturn \"\", r.Error\n\t}\n\treturn r.HTTPRequest.URL.String(), nil\n}\n\n// PresignRequest behaves just like presign, but hoists all headers and signs them.\n// Also returns the signed hash back to the user\nfunc (r *Request) PresignRequest(expireTime time.Duration) (string, http.Header, error) {\n\tr.ExpireTime = expireTime\n\tr.NotHoist = true\n\tr.Sign()\n\tif r.Error != nil {\n\t\treturn \"\", nil, r.Error\n\t}\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// Anny 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// Send 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\n// ResetBody rewinds the request body backto its starting position, and\n// set's 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.\nfunc (r *Request) ResetBody() {\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 := computeBodyLength(r.Body)\n\tif err != nil {\n\t\tr.Error = awserr.New(ErrCodeSerialization, \"failed to compute request body size\", err)\n\t\treturn\n\t}\n\n\tif l == 0 {\n\t\tr.HTTPRequest.Body = noBodyReader\n\t} else if l > 0 {\n\t\tr.HTTPRequest.Body = 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.\n\t\tswitch r.Operation.HTTPMethod {\n\t\tcase \"GET\", \"HEAD\", \"DELETE\":\n\t\t\tr.HTTPRequest.Body = noBodyReader\n\t\tdefault:\n\t\t\tr.HTTPRequest.Body = r.safeBody\n\t\t}\n\t}\n}\n\n// Attempts to compute the length of the body of the reader using the\n// io.Seeker interface. If the value is not seekable because of being\n// a ReaderSeekerCloser without an unerlying Seeker -1 will be returned.\n// If no error occurs the length of the body will be returned.\nfunc computeBodyLength(r io.ReadSeeker) (int64, error) {\n\tseekable := true\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 := r.(type) {\n\tcase aws.ReaderSeekerCloser:\n\t\tseekable = v.IsSeeker()\n\tcase *aws.ReaderSeekerCloser:\n\t\tseekable = v.IsSeeker()\n\t}\n\tif !seekable {\n\t\treturn -1, nil\n\t}\n\n\tcurOffset, err := r.Seek(0, 1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tendOffset, err := r.Seek(0, 2)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t_, err = r.Seek(curOffset, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn endOffset - curOffset, 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\tfor {\n\t\tif aws.BoolValue(r.Retryable) {\n\t\t\tif r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {\n\t\t\t\tr.Config.Logger.Log(fmt.Sprintf(\"DEBUG: Retrying Request %s/%s, attempt %d\",\n\t\t\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))\n\t\t\t}\n\n\t\t\t// The previous http.Request will have a reference to the r.Body\n\t\t\t// and the HTTP Client's Transport may still be reading from\n\t\t\t// the request's body even though the Client's Do returned.\n\t\t\tr.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)\n\t\t\tr.ResetBody()\n\n\t\t\t// Closing response body to ensure that no response body is leaked\n\t\t\t// between retry attempts.\n\t\t\tif r.HTTPResponse != nil && r.HTTPResponse.Body != nil {\n\t\t\t\tr.HTTPResponse.Body.Close()\n\t\t\t}\n\t\t}\n\n\t\tr.Sign()\n\t\tif r.Error != nil {\n\t\t\treturn r.Error\n\t\t}\n\n\t\tr.Retryable = nil\n\n\t\tr.Handlers.Send.Run(r)\n\t\tif r.Error != nil {\n\t\t\tif !shouldRetryCancel(r) {\n\t\t\t\treturn r.Error\n\t\t\t}\n\n\t\t\terr := r.Error\n\t\t\tr.Handlers.Retry.Run(r)\n\t\t\tr.Handlers.AfterRetry.Run(r)\n\t\t\tif r.Error != nil {\n\t\t\t\tdebugLogReqError(r, \"Send Request\", false, r.Error)\n\t\t\t\treturn r.Error\n\t\t\t}\n\t\t\tdebugLogReqError(r, \"Send Request\", true, err)\n\t\t\tcontinue\n\t\t}\n\t\tr.Handlers.UnmarshalMeta.Run(r)\n\t\tr.Handlers.ValidateResponse.Run(r)\n\t\tif r.Error != nil {\n\t\t\terr := r.Error\n\t\t\tr.Handlers.UnmarshalError.Run(r)\n\t\t\tr.Handlers.Retry.Run(r)\n\t\t\tr.Handlers.AfterRetry.Run(r)\n\t\t\tif r.Error != nil {\n\t\t\t\tdebugLogReqError(r, \"Validate Response\", false, r.Error)\n\t\t\t\treturn r.Error\n\t\t\t}\n\t\t\tdebugLogReqError(r, \"Validate Response\", true, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tr.Handlers.Unmarshal.Run(r)\n\t\tif r.Error != nil {\n\t\t\terr := r.Error\n\t\t\tr.Handlers.Retry.Run(r)\n\t\t\tr.Handlers.AfterRetry.Run(r)\n\t\t\tif r.Error != nil {\n\t\t\t\tdebugLogReqError(r, \"Unmarshal Response\", false, r.Error)\n\t\t\t\treturn r.Error\n\t\t\t}\n\t\t\tdebugLogReqError(r, \"Unmarshal Response\", true, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tbreak\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\nfunc shouldRetryCancel(r *Request) bool {\n\tawsErr, ok := r.Error.(awserr.Error)\n\ttimeoutErr := false\n\terrStr := r.Error.Error()\n\tif ok {\n\t\tif awsErr.Code() == CanceledErrorCode {\n\t\t\treturn false\n\t\t}\n\t\terr := awsErr.OrigErr()\n\t\tnetErr, netOK := err.(net.Error)\n\t\ttimeoutErr = netOK && netErr.Temporary()\n\t\tif urlErr, ok := err.(*url.Error); !timeoutErr && ok {\n\t\t\terrStr = urlErr.Err.Error()\n\t\t}\n\t}\n\n\t// There can be two types of canceled errors here.\n\t// The first being a net.Error and the other being an error.\n\t// If the request was timed out, we want to continue the retry\n\t// process. Otherwise, return the canceled error.\n\treturn timeoutErr ||\n\t\t(errStr != \"net/http: request canceled\" &&\n\t\t\terrStr != \"net/http: request canceled while waiting for connection\")\n\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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// Is an empty reader that will trigger the Go HTTP client to not include\n// and body in the HTTP request.\nvar noBodyReader = noBody{}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go",
    "content": "// +build go1.8\n\npackage request\n\nimport \"net/http\"\n\n// Is a http.NoBody reader instructing Go HTTP client to not include\n// and body in the HTTP request.\nvar noBodyReader = http.NoBody\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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\n\tstarted    bool\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\treturn !(p.started && len(p.nextTokens) == 0)\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.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\tv, _ := awsutil.ValuesAtPath(r.Data, outToken)\n\t\tif len(v) > 0 {\n\t\t\ttokens = append(tokens, v[0])\n\t\t\ttokenAdded = true\n\t\t} else {\n\t\t\ttokens = append(tokens, nil)\n\t\t}\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": "12fa-docker-golang/chapter11/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 service.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\"LimitExceededException\":                 {}, // Deleting 10+ DynamoDb tables at once\n\t\"TooManyRequestsException\":               {}, // Lambda functions\n\t\"PriorRequestNotComplete\":                {}, // Route53\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\nfunc isSerializationErrorRetryable(err error) bool {\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\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 && aerr.Code() != ErrCodeSerialization {\n\t\t\treturn isCodeRetryable(aerr.Code())\n\t\t} else if ok {\n\t\t\treturn isSerializationErrorRetryable(aerr.OrigErr())\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/request/serialization_error.go",
    "content": "// +build !appengine\n\npackage request\n\nimport (\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n)\n\nfunc isErrConnectionReset(err error) bool {\n\tif opErr, ok := err.(*net.OpError); ok {\n\t\tif sysErr, ok := opErr.Err.(*os.SyscallError); ok {\n\t\t\treturn sysErr.Err == syscall.ECONNRESET\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/request/serialization_error_appengine.go",
    "content": "// +build appengine\n\npackage request\n\nimport (\n\t\"strings\"\n)\n\nfunc isErrConnectionReset(err error) bool {\n\treturn strings.Contains(err.Error(), \"connection reset\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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)\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:  ParamMinValueErrCode,\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"
  },
  {
    "path": "12fa-docker-golang/chapter11/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 performing blocking call which will\n// wait for an resource state to be satisfied 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}\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 if err := aws.SleepWithContext(ctx, delay); err != nil {\n\t\t\treturn awserr.New(CanceledErrorCode, \"waiter context canceled\", err)\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": "12fa-docker-golang/chapter11/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.Println(\"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 credentials\nfile (~/.aws/config).\n\nCredentials are the values the SDK should use for authenticating requests with\nAWS Services. They arfrom 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 stscrds.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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go",
    "content": "package session\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n)\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 Authroity (CA) Bundle PEM file\n\t// that the SDK will use instead of the 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\nvar (\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\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)\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// 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 = \"EnvConfigCredentials\"\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\tcfg.SharedCredentialsFile = sharedCredentialsFilename()\n\tcfg.SharedConfigFile = sharedConfigFilename()\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\nfunc sharedCredentialsFilename() string {\n\tif name := os.Getenv(\"AWS_SHARED_CREDENTIALS_FILE\"); len(name) > 0 {\n\t\treturn name\n\t}\n\n\treturn filepath.Join(userHomeDir(), \".aws\", \"credentials\")\n}\n\nfunc sharedConfigFilename() string {\n\tif name := os.Getenv(\"AWS_CONFIG_FILE\"); len(name) > 0 {\n\t\treturn name\n\t}\n\n\treturn filepath.Join(userHomeDir(), \".aws\", \"config\")\n}\n\nfunc userHomeDir() string {\n\thomeDir := os.Getenv(\"HOME\") // *nix\n\tif len(homeDir) == 0 {       // windows\n\t\thomeDir = os.Getenv(\"USERPROFILE\")\n\t}\n\n\treturn homeDir\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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/stscreds\"\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)\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.ClientConfigProvider.\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\ts, err := newSession(Options{}, envCfg, cfgs...)\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\t\treturn s\n\t}\n\n\treturn deprecatedNewSession(cfgs...)\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// 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: 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\n\treturn s\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// Order config files will be loaded in with later files overwriting\n\t// previous config file values.\n\tcfgFiles := []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile}\n\tif !envCfg.EnableSharedConfig {\n\t\t// The shared config file (~/.aws/config) is only loaded if instructed\n\t\t// to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG).\n\t\tcfgFiles = cfgFiles[1:]\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\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\tt = &http.Transport{}\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\t// Configure credentials if not already set\n\tif cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {\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\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\t\t\tcfg.Credentials = stscreds.NewCredentials(\n\t\t\t\t&Session{\n\t\t\t\t\tConfig:   &cfgCp,\n\t\t\t\t\tHandlers: handlers.Copy(),\n\t\t\t\t},\n\t\t\t\tsharedCfg.AssumeRole.RoleARN,\n\t\t\t\tfunc(opt *stscreds.AssumeRoleProvider) {\n\t\t\t\t\topt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName\n\n\t\t\t\t\t// Assume role with external ID\n\t\t\t\t\tif len(sharedCfg.AssumeRole.ExternalID) > 0 {\n\t\t\t\t\t\topt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Assume role with MFA\n\t\t\t\t\tif len(sharedCfg.AssumeRole.MFASerial) > 0 {\n\t\t\t\t\t\topt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)\n\t\t\t\t\t\topt.TokenProvider = sessOpts.AssumeRoleTokenProvider\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\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 {\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\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\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\tSigningName:   resolved.SigningName,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go",
    "content": "package session\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/go-ini/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\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// 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\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// 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\ntype sharedConfigFile struct {\n\tFilename string\n\tIniData  *ini.File\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\tb, err := ioutil.ReadFile(filename)\n\t\tif err != nil {\n\t\t\t// Skip files which can't be opened and read for whatever reason\n\t\t\tcontinue\n\t\t}\n\n\t\tf, err := ini.Load(b)\n\t\tif err != nil {\n\t\t\treturn nil, SharedConfigLoadError{Filename: filename}\n\t\t}\n\n\t\tfiles = append(files, sharedConfigFile{\n\t\t\tFilename: filename, IniData: f,\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\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, err := file.IniData.GetSection(profile)\n\tif err != nil {\n\t\t// Fallback to to alternate profile name: profile <name>\n\t\tsection, err = file.IniData.GetSection(fmt.Sprintf(\"profile %s\", profile))\n\t\tif err != nil {\n\t\t\treturn SharedConfigProfileNotExistsError{Profile: profile, Err: err}\n\t\t}\n\t}\n\n\t// Shared Credentials\n\takid := section.Key(accessKeyIDKey).String()\n\tsecret := section.Key(secretAccessKey).String()\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.Key(sessionTokenKey).String(),\n\t\t\tProviderName:    fmt.Sprintf(\"SharedConfigCredentials: %s\", file.Filename),\n\t\t}\n\t}\n\n\t// Assume Role\n\troleArn := section.Key(roleArnKey).String()\n\tsrcProfile := section.Key(sourceProfileKey).String()\n\tif len(roleArn) > 0 && len(srcProfile) > 0 {\n\t\tcfg.AssumeRole = assumeRoleConfig{\n\t\t\tRoleARN:         roleArn,\n\t\t\tSourceProfile:   srcProfile,\n\t\t\tExternalID:      section.Key(externalIDKey).String(),\n\t\t\tMFASerial:       section.Key(mfaSerialKey).String(),\n\t\t\tRoleSessionName: section.Key(roleSessionNameKey).String(),\n\t\t}\n\t}\n\n\t// Region\n\tif v := section.Key(regionKey).String(); len(v) > 0 {\n\t\tcfg.Region = 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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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 failes 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\"bytes\"\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/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-Website-Redirect-Location\":                             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// Disales 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, 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, signTime)\n}\n\nfunc (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, 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:              exp != 0,\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.assignAmzQueryValues()\n\tctx.build(v4.DisableHeaderHoisting)\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) 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 is bested used only 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\tsignSDKRequestWithCurrTime(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\tsignSDKRequestWithCurrTime(req, time.Now, opts...)\n\t\t},\n\t}\n}\n\nfunc signSDKRequestWithCurrTime(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\tsigningTime := req.Time\n\tif !req.LastSignedAt.IsZero() {\n\t\tsigningTime = req.LastSignedAt\n\t}\n\n\tsignedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(),\n\t\tname, region, req.ExpireTime, signingTime,\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 = curTimeFn()\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) {\n\tctx.buildTime()             // no depends\n\tctx.buildCredentialString() // no depends\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.buildBodyDigest()\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\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\theaderValues[i] = \"host:\" + ctx.Request.URL.Host\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\n\tctx.canonicalHeaders = strings.Join(stripExcessSpaces(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() {\n\thash := ctx.Request.Header.Get(\"X-Amz-Content-Sha256\")\n\tif hash == \"\" {\n\t\tif ctx.unsignedPayload || (ctx.isPresign && ctx.ServiceName == \"s3\") {\n\t\t\thash = \"UNSIGNED-PAYLOAD\"\n\t\t} else if ctx.Body == nil {\n\t\t\thash = emptyStringSHA256\n\t\t} else {\n\t\t\thash = hex.EncodeToString(makeSha256Reader(ctx.Body))\n\t\t}\n\t\tif ctx.unsignedPayload || ctx.ServiceName == \"s3\" || ctx.ServiceName == \"glacier\" {\n\t\t\tctx.Request.Header.Set(\"X-Amz-Content-Sha256\", hash)\n\t\t}\n\t}\n\tctx.bodyDigest = hash\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, 1)\n\tdefer reader.Seek(start, 0)\n\n\tio.Copy(hash, reader)\n\treturn hash.Sum(nil)\n}\n\nconst doubleSpaces = \"  \"\n\nvar doubleSpaceBytes = []byte(doubleSpaces)\n\nfunc stripExcessSpaces(headerVals []string) []string {\n\tvals := make([]string, len(headerVals))\n\tfor i, str := range headerVals {\n\t\t// Trim leading and trailing spaces\n\t\ttrimmed := strings.TrimSpace(str)\n\n\t\tidx := strings.Index(trimmed, doubleSpaces)\n\t\tvar buf []byte\n\t\tfor idx > -1 {\n\t\t\t// Multiple adjacent spaces found\n\t\t\tif buf == nil {\n\t\t\t\t// first time create the buffer\n\t\t\t\tbuf = []byte(trimmed)\n\t\t\t}\n\n\t\t\tstripToIdx := -1\n\t\t\tfor j := idx + 1; j < len(buf); j++ {\n\t\t\t\tif buf[j] != ' ' {\n\t\t\t\t\tbuf = append(buf[:idx+1], buf[j:]...)\n\t\t\t\t\tstripToIdx = j\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif stripToIdx >= 0 {\n\t\t\t\tidx = bytes.Index(buf[stripToIdx:], doubleSpaceBytes)\n\t\t\t\tif idx >= 0 {\n\t\t\t\t\tidx += stripToIdx\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tidx = -1\n\t\t\t}\n\t\t}\n\n\t\tif buf != nil {\n\t\t\tvals[i] = string(buf)\n\t\t} else {\n\t\t\tvals[i] = trimmed\n\t\t}\n\t}\n\treturn vals\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/aws/types.go",
    "content": "package aws\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\n// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Should\n// only be used with an io.Reader that is also an io.Seeker. Doing so may\n// cause request signature errors, or request body's not sent for GET, HEAD\n// and DELETE HTTP methods.\n//\n// Deprecated: Should only be used with io.ReadSeeker. If using for\n// S3 PutObject to stream content use s3manager.Uploader instead.\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// 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 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// 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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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.8.12\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go",
    "content": "// Package ec2query provides serialization of AWS EC2 requests and responses.\npackage ec2query\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/ec2.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 ec2query protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.ec2query.Build\", Fn: Build}\n\n// Build builds a request for the EC2 protocol.\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, true); err != nil {\n\t\tr.Error = awserr.New(\"SerializationError\", \"failed encoding EC2 Query request\", err)\n\t}\n\n\tif r.ExpireTime == 0 {\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go",
    "content": "package ec2query\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/ec2.json unmarshal_test.go\n\nimport (\n\t\"encoding/xml\"\n\t\"io\"\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 ec2query protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.ec2query.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling ec2query protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.ec2query.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// UnmarshalErrorHandler is a named request handler for unmarshaling ec2query protocol request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.ec2query.UnmarshalError\", Fn: UnmarshalError}\n\n// Unmarshal unmarshals a response body for the EC2 protocol.\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, \"\")\n\t\tif err != nil {\n\t\t\tr.Error = awserr.New(\"SerializationError\", \"failed decoding EC2 Query response\", err)\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// UnmarshalMeta unmarshals response headers for the EC2 protocol.\nfunc UnmarshalMeta(r *request.Request) {\n\t// TODO implement unmarshaling of request IDs\n}\n\ntype xmlErrorResponse struct {\n\tXMLName   xml.Name `xml:\"Response\"`\n\tCode      string   `xml:\"Errors>Error>Code\"`\n\tMessage   string   `xml:\"Errors>Error>Message\"`\n\tRequestID string   `xml:\"RequestID\"`\n}\n\n// UnmarshalError unmarshals a response error for the EC2 protocol.\nfunc UnmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\n\tresp := &xmlErrorResponse{}\n\terr := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp)\n\tif err != nil && err != io.EOF {\n\t\tr.Error = awserr.New(\"SerializationError\", \"failed decoding EC2 Query error response\", err)\n\t} else {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(resp.Code, resp.Message, nil),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tresp.RequestID,\n\t\t)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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/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\tt = \"map\"\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 value.Type() {\n\t\tcase timeType:\n\t\t\tconverted := v.Interface().(*time.Time)\n\n\t\t\tbuf.Write(strconv.AppendInt(scratch[:0], converted.UTC().Unix(), 10))\n\t\tcase byteSliceType:\n\t\t\tif !value.IsNil() {\n\t\t\t\tconverted := value.Interface().([]byte)\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\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go",
    "content": "package jsonutil\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"reflect\"\n\t\"time\"\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\tb, err := ioutil.ReadAll(stream)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif len(b) == 0 {\n\t\treturn nil\n\t}\n\n\tif err := json.Unmarshal(b, &out); 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\tt = \"map\"\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\terrf := func() error {\n\t\treturn fmt.Errorf(\"unsupported value: %v (%s)\", value.Interface(), value.Type())\n\t}\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\tdefault:\n\t\t\treturn errf()\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\tt := time.Unix(int64(d), 0).UTC()\n\t\t\tvalue.Set(reflect.ValueOf(&t))\n\t\tdefault:\n\t\t\treturn errf()\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 errf()\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported JSON value (%v)\", data)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go",
    "content": "// Package jsonrpc provides JSON RPC utilities for serialization of AWS\n// requests and responses.\npackage jsonrpc\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/json.json build_test.go\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/json.json unmarshal_test.go\n\nimport (\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\t\"strings\"\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/json/jsonutil\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\"\n)\n\nvar emptyJSON = []byte(\"{}\")\n\n// BuildHandler is a named request handler for building jsonrpc protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.jsonrpc.Build\", Fn: Build}\n\n// UnmarshalHandler is a named request handler for unmarshaling jsonrpc protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.jsonrpc.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling jsonrpc protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.jsonrpc.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// UnmarshalErrorHandler is a named request handler for unmarshaling jsonrpc protocol request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.jsonrpc.UnmarshalError\", Fn: UnmarshalError}\n\n// Build builds a JSON payload for a JSON RPC request.\nfunc Build(req *request.Request) {\n\tvar buf []byte\n\tvar err error\n\tif req.ParamsFilled() {\n\t\tbuf, err = jsonutil.BuildJSON(req.Params)\n\t\tif err != nil {\n\t\t\treq.Error = awserr.New(\"SerializationError\", \"failed encoding JSON RPC request\", err)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tbuf = emptyJSON\n\t}\n\n\tif req.ClientInfo.TargetPrefix != \"\" || string(buf) != \"{}\" {\n\t\treq.SetBufferBody(buf)\n\t}\n\n\tif req.ClientInfo.TargetPrefix != \"\" {\n\t\ttarget := req.ClientInfo.TargetPrefix + \".\" + req.Operation.Name\n\t\treq.HTTPRequest.Header.Add(\"X-Amz-Target\", target)\n\t}\n\tif req.ClientInfo.JSONVersion != \"\" {\n\t\tjsonVersion := req.ClientInfo.JSONVersion\n\t\treq.HTTPRequest.Header.Add(\"Content-Type\", \"application/x-amz-json-\"+jsonVersion)\n\t}\n}\n\n// Unmarshal unmarshals a response for a JSON RPC service.\nfunc Unmarshal(req *request.Request) {\n\tdefer req.HTTPResponse.Body.Close()\n\tif req.DataFilled() {\n\t\terr := jsonutil.UnmarshalJSON(req.Data, req.HTTPResponse.Body)\n\t\tif err != nil {\n\t\t\treq.Error = awserr.New(\"SerializationError\", \"failed decoding JSON RPC response\", err)\n\t\t}\n\t}\n\treturn\n}\n\n// UnmarshalMeta unmarshals headers from a response for a JSON RPC service.\nfunc UnmarshalMeta(req *request.Request) {\n\trest.UnmarshalMeta(req)\n}\n\n// UnmarshalError unmarshals an error response for a JSON RPC service.\nfunc UnmarshalError(req *request.Request) {\n\tdefer req.HTTPResponse.Body.Close()\n\tbodyBytes, err := ioutil.ReadAll(req.HTTPResponse.Body)\n\tif err != nil {\n\t\treq.Error = awserr.New(\"SerializationError\", \"failed reading JSON RPC error response\", err)\n\t\treturn\n\t}\n\tif len(bodyBytes) == 0 {\n\t\treq.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(\"SerializationError\", req.HTTPResponse.Status, nil),\n\t\t\treq.HTTPResponse.StatusCode,\n\t\t\t\"\",\n\t\t)\n\t\treturn\n\t}\n\tvar jsonErr jsonErrorResponse\n\tif err := json.Unmarshal(bodyBytes, &jsonErr); err != nil {\n\t\treq.Error = awserr.New(\"SerializationError\", \"failed decoding JSON RPC error response\", err)\n\t\treturn\n\t}\n\n\tcodes := strings.SplitN(jsonErr.Code, \"#\", 2)\n\treq.Error = awserr.NewRequestFailure(\n\t\tawserr.New(codes[len(codes)-1], jsonErr.Message, nil),\n\t\treq.HTTPResponse.StatusCode,\n\t\treq.RequestID,\n\t)\n}\n\ntype jsonErrorResponse struct {\n\tCode    string `json:\"__type\"`\n\tMessage string `json:\"message\"`\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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(\"SerializationError\", \"failed encoding Query request\", err)\n\t\treturn\n\t}\n\n\tif r.ExpireTime == 0 {\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": "12fa-docker-golang/chapter11/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\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\tv.Set(name, value.UTC().Format(ISO8601UTC))\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": "12fa-docker-golang/chapter11/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.New(\"SerializationError\", \"failed decoding Query response\", err)\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go",
    "content": "package query\n\nimport (\n\t\"encoding/xml\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\ntype xmlErrorResponse struct {\n\tXMLName   xml.Name `xml:\"ErrorResponse\"`\n\tCode      string   `xml:\"Error>Code\"`\n\tMessage   string   `xml:\"Error>Message\"`\n\tRequestID string   `xml:\"RequestId\"`\n}\n\ntype xmlServiceUnavailableResponse struct {\n\tXMLName xml.Name `xml:\"ServiceUnavailableException\"`\n}\n\n// UnmarshalErrorHandler is a name request handler to unmarshal request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.query.UnmarshalError\", Fn: UnmarshalError}\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\tbodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\tif err != nil {\n\t\tr.Error = awserr.New(\"SerializationError\", \"failed to read from query HTTP response body\", err)\n\t\treturn\n\t}\n\n\t// First check for specific error\n\tresp := xmlErrorResponse{}\n\tdecodeErr := xml.Unmarshal(bodyBytes, &resp)\n\tif decodeErr == nil {\n\t\treqID := resp.RequestID\n\t\tif reqID == \"\" {\n\t\t\treqID = r.RequestID\n\t\t}\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(resp.Code, resp.Message, nil),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\treqID,\n\t\t)\n\t\treturn\n\t}\n\n\t// Check for unhandled error\n\tservUnavailResp := xmlServiceUnavailableResponse{}\n\tunavailErr := xml.Unmarshal(bodyBytes, &servUnavailResp)\n\tif unavailErr == nil {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(\"ServiceUnavailableException\", \"service is unavailable\", nil),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\n\t// Failed to retrieve any error message from the response body\n\tr.Error = awserr.New(\"SerializationError\",\n\t\t\"failed to decode query XML error response\", decodeErr)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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\"encoding/json\"\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)\n\n// RFC822 returns an RFC822 formatted timestamp for AWS protocols\nconst RFC822 = \"Mon, 2 Jan 2006 15:04:05 GMT\"\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\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\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(\"SerializationError\",\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(\"SerializationError\", \"failed to encode REST request\", err)\n\t}\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(\"SerializationError\", \"failed to encode REST request\", err)\n\n\t\t}\n\n\t\theader.Add(prefix+key.String(), 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(\"SerializationError\", \"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(\"SerializationError\", \"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) (string, error) {\n\tv = reflect.Indirect(v)\n\tif !v.IsValid() {\n\t\treturn \"\", errValueNotSet\n\t}\n\n\tvar str string\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\tstr = value.UTC().Format(RFC822)\n\tcase aws.JSONValue:\n\t\tb, err := json.Marshal(value)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif tag.Get(\"location\") == \"header\" {\n\t\t\tstr = base64.StdEncoding.EncodeToString(b)\n\t\t} else {\n\t\t\tstr = string(b)\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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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\"encoding/json\"\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)\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(\"SerializationError\", \"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(\"SerializationError\", \"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(\"SerializationError\",\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(\"SerializationError\",\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(\"SerializationError\", \"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(\"SerializationError\", \"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\tt, err := time.Parse(RFC822, 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\tb := []byte(header)\n\t\tvar err error\n\t\tif tag.Get(\"location\") == \"header\" {\n\t\t\tb, err = base64.StdEncoding.DecodeString(header)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tm := aws.JSONValue{}\n\t\terr = json.Unmarshal(b, &m)\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/restjson/restjson.go",
    "content": "// Package restjson provides RESTful JSON serialization of AWS\n// requests and responses.\npackage restjson\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/rest-json.json build_test.go\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/rest-json.json unmarshal_test.go\n\nimport (\n\t\"encoding/json\"\n\t\"io/ioutil\"\n\t\"strings\"\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/jsonrpc\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\"\n)\n\n// BuildHandler is a named request handler for building restjson protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.restjson.Build\", Fn: Build}\n\n// UnmarshalHandler is a named request handler for unmarshaling restjson protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.restjson.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling restjson protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.restjson.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// UnmarshalErrorHandler is a named request handler for unmarshaling restjson protocol request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.restjson.UnmarshalError\", Fn: UnmarshalError}\n\n// Build builds a request for the REST JSON protocol.\nfunc Build(r *request.Request) {\n\trest.Build(r)\n\n\tif t := rest.PayloadType(r.Params); t == \"structure\" || t == \"\" {\n\t\tjsonrpc.Build(r)\n\t}\n}\n\n// Unmarshal unmarshals a response body for the REST JSON protocol.\nfunc Unmarshal(r *request.Request) {\n\tif t := rest.PayloadType(r.Data); t == \"structure\" || t == \"\" {\n\t\tjsonrpc.Unmarshal(r)\n\t} else {\n\t\trest.Unmarshal(r)\n\t}\n}\n\n// UnmarshalMeta unmarshals response headers for the REST JSON protocol.\nfunc UnmarshalMeta(r *request.Request) {\n\trest.UnmarshalMeta(r)\n}\n\n// UnmarshalError unmarshals a response error for the REST JSON protocol.\nfunc UnmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\tcode := r.HTTPResponse.Header.Get(\"X-Amzn-Errortype\")\n\tbodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\tif err != nil {\n\t\tr.Error = awserr.New(\"SerializationError\", \"failed reading REST JSON error response\", err)\n\t\treturn\n\t}\n\tif len(bodyBytes) == 0 {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(\"SerializationError\", r.HTTPResponse.Status, nil),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\t\"\",\n\t\t)\n\t\treturn\n\t}\n\tvar jsonErr jsonErrorResponse\n\tif err := json.Unmarshal(bodyBytes, &jsonErr); err != nil {\n\t\tr.Error = awserr.New(\"SerializationError\", \"failed decoding REST JSON error response\", err)\n\t\treturn\n\t}\n\n\tif code == \"\" {\n\t\tcode = jsonErr.Code\n\t}\n\n\tcode = strings.SplitN(code, \":\", 2)[0]\n\tr.Error = awserr.NewRequestFailure(\n\t\tawserr.New(code, jsonErr.Message, nil),\n\t\tr.HTTPResponse.StatusCode,\n\t\tr.RequestID,\n\t)\n}\n\ntype jsonErrorResponse struct {\n\tCode    string `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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.New(\"SerializationError\", \"failed to encode rest XML request\", err)\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.New(\"SerializationError\", \"failed to decode REST XML response\", err)\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": "12fa-docker-golang/chapter11/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": "12fa-docker-golang/chapter11/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.\n// Error will be returned if the serialization of any of the params or nested values fails.\nfunc BuildXML(params interface{}, e *xml.Encoder) 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, false)\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 any 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\tfieldAdded := false\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\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\n\t\tmTag := field.Tag\n\t\tif mTag.Get(\"location\") != \"\" { // skip non-body members\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\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\n\t\tfieldAdded = true\n\t}\n\n\tif fieldAdded { // only append this child if we have one ore more valid members\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\tconst ISO8601UTC = \"2006-01-02T15:04:05Z\"\n\t\tstr = converted.UTC().Format(ISO8601UTC)\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go",
    "content": "package xmlutil\n\nimport (\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\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, _ := XMLToStruct(d, nil)\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\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 := 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\tconst ISO8601UTC = \"2006-01-02T15:04:05Z\"\n\t\tt, err := time.Parse(ISO8601UTC, 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": "12fa-docker-golang/chapter11/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\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 tok == nil || err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn out, err\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/api.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\n// Package kinesis provides a client for Amazon Kinesis.\npackage kinesis\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/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/jsonrpc\"\n)\n\nconst opAddTagsToStream = \"AddTagsToStream\"\n\n// AddTagsToStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the AddTagsToStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See AddTagsToStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the AddTagsToStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the AddTagsToStreamRequest method.\n//    req, resp := client.AddTagsToStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/AddTagsToStream\nfunc (c *Kinesis) AddTagsToStreamRequest(input *AddTagsToStreamInput) (req *request.Request, output *AddTagsToStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opAddTagsToStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &AddTagsToStreamInput{}\n\t}\n\n\toutput = &AddTagsToStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// AddTagsToStream API operation for Amazon Kinesis.\n//\n// Adds or updates tags for the specified Amazon Kinesis stream. Each stream\n// can have up to 10 tags.\n//\n// If tags have already been assigned to the stream, AddTagsToStream overwrites\n// any existing tags that correspond to the specified tag 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 Kinesis's\n// API operation AddTagsToStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/AddTagsToStream\nfunc (c *Kinesis) AddTagsToStream(input *AddTagsToStreamInput) (*AddTagsToStreamOutput, error) {\n\treq, out := c.AddTagsToStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// AddTagsToStreamWithContext is the same as AddTagsToStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See AddTagsToStream 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 *Kinesis) AddTagsToStreamWithContext(ctx aws.Context, input *AddTagsToStreamInput, opts ...request.Option) (*AddTagsToStreamOutput, error) {\n\treq, out := c.AddTagsToStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opCreateStream = \"CreateStream\"\n\n// CreateStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the CreateStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See CreateStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the CreateStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the CreateStreamRequest method.\n//    req, resp := client.CreateStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/CreateStream\nfunc (c *Kinesis) CreateStreamRequest(input *CreateStreamInput) (req *request.Request, output *CreateStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opCreateStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &CreateStreamInput{}\n\t}\n\n\toutput = &CreateStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// CreateStream API operation for Amazon Kinesis.\n//\n// Creates an Amazon Kinesis stream. A stream captures and transports data records\n// that are continuously emitted from different data sources or producers. Scale-out\n// within a stream is explicitly supported by means of shards, which are uniquely\n// identified groups of data records in a stream.\n//\n// You specify and control the number of shards that a stream is composed of.\n// Each shard can support reads up to 5 transactions per second, up to a maximum\n// data read total of 2 MB per second. Each shard can support writes up to 1,000\n// records per second, up to a maximum data write total of 1 MB per second.\n// You can add shards to a stream if the amount of data input increases and\n// you can remove shards if the amount of data input decreases.\n//\n// The stream name identifies the stream. The name is scoped to the AWS account\n// used by the application. It is also scoped by region. That is, two streams\n// in two different accounts can have the same name, and two streams in the\n// same account, but in two different regions, can have the same name.\n//\n// CreateStream is an asynchronous operation. Upon receiving a CreateStream\n// request, Amazon Kinesis immediately returns and sets the stream status to\n// CREATING. After the stream is created, Amazon Kinesis sets the stream status\n// to ACTIVE. You should perform read and write operations only on an ACTIVE\n// stream.\n//\n// You receive a LimitExceededException when making a CreateStream request if\n// you try to do one of the following:\n//\n//    * Have more than five streams in the CREATING state at any point in time.\n//\n//    * Create more shards than are authorized for your account.\n//\n// For the default shard limit for an AWS account, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n// in the Amazon Kinesis Streams Developer Guide. If you need to increase this\n// limit, contact AWS Support (http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).\n//\n// You can use DescribeStream to check the stream status, which is returned\n// in StreamStatus.\n//\n// CreateStream has a limit of 5 transactions per second per account.\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 Kinesis's\n// API operation CreateStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/CreateStream\nfunc (c *Kinesis) CreateStream(input *CreateStreamInput) (*CreateStreamOutput, error) {\n\treq, out := c.CreateStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// CreateStreamWithContext is the same as CreateStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See CreateStream 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 *Kinesis) CreateStreamWithContext(ctx aws.Context, input *CreateStreamInput, opts ...request.Option) (*CreateStreamOutput, error) {\n\treq, out := c.CreateStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDecreaseStreamRetentionPeriod = \"DecreaseStreamRetentionPeriod\"\n\n// DecreaseStreamRetentionPeriodRequest generates a \"aws/request.Request\" representing the\n// client's request for the DecreaseStreamRetentionPeriod operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DecreaseStreamRetentionPeriod for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DecreaseStreamRetentionPeriod method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the DecreaseStreamRetentionPeriodRequest method.\n//    req, resp := client.DecreaseStreamRetentionPeriodRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DecreaseStreamRetentionPeriod\nfunc (c *Kinesis) DecreaseStreamRetentionPeriodRequest(input *DecreaseStreamRetentionPeriodInput) (req *request.Request, output *DecreaseStreamRetentionPeriodOutput) {\n\top := &request.Operation{\n\t\tName:       opDecreaseStreamRetentionPeriod,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DecreaseStreamRetentionPeriodInput{}\n\t}\n\n\toutput = &DecreaseStreamRetentionPeriodOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DecreaseStreamRetentionPeriod API operation for Amazon Kinesis.\n//\n// Decreases the Amazon Kinesis stream's retention period, which is the length\n// of time data records are accessible after they are added to the stream. The\n// minimum value of a stream's retention period is 24 hours.\n//\n// This operation may result in lost data. For example, if the stream's retention\n// period is 48 hours and is decreased to 24 hours, any data already in the\n// stream that is older than 24 hours is inaccessible.\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 Kinesis's\n// API operation DecreaseStreamRetentionPeriod for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DecreaseStreamRetentionPeriod\nfunc (c *Kinesis) DecreaseStreamRetentionPeriod(input *DecreaseStreamRetentionPeriodInput) (*DecreaseStreamRetentionPeriodOutput, error) {\n\treq, out := c.DecreaseStreamRetentionPeriodRequest(input)\n\treturn out, req.Send()\n}\n\n// DecreaseStreamRetentionPeriodWithContext is the same as DecreaseStreamRetentionPeriod with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DecreaseStreamRetentionPeriod 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 *Kinesis) DecreaseStreamRetentionPeriodWithContext(ctx aws.Context, input *DecreaseStreamRetentionPeriodInput, opts ...request.Option) (*DecreaseStreamRetentionPeriodOutput, error) {\n\treq, out := c.DecreaseStreamRetentionPeriodRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteStream = \"DeleteStream\"\n\n// DeleteStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DeleteStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DeleteStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the DeleteStreamRequest method.\n//    req, resp := client.DeleteStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DeleteStream\nfunc (c *Kinesis) DeleteStreamRequest(input *DeleteStreamInput) (req *request.Request, output *DeleteStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteStreamInput{}\n\t}\n\n\toutput = &DeleteStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteStream API operation for Amazon Kinesis.\n//\n// Deletes an Amazon Kinesis stream and all its shards and data. You must shut\n// down any applications that are operating on the stream before you delete\n// the stream. If an application attempts to operate on a deleted stream, it\n// will receive the exception ResourceNotFoundException.\n//\n// If the stream is in the ACTIVE state, you can delete it. After a DeleteStream\n// request, the specified stream is in the DELETING state until Amazon Kinesis\n// completes the deletion.\n//\n// Note: Amazon Kinesis might continue to accept data read and write operations,\n// such as PutRecord, PutRecords, and GetRecords, on a stream in the DELETING\n// state until the stream deletion is complete.\n//\n// When you delete a stream, any shards in that stream are also deleted, and\n// any tags are dissociated from the stream.\n//\n// You can use the DescribeStream operation to check the state of the stream,\n// which is returned in StreamStatus.\n//\n// DeleteStream has a limit of 5 transactions per second per account.\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 Kinesis's\n// API operation DeleteStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DeleteStream\nfunc (c *Kinesis) DeleteStream(input *DeleteStreamInput) (*DeleteStreamOutput, error) {\n\treq, out := c.DeleteStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteStreamWithContext is the same as DeleteStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteStream 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 *Kinesis) DeleteStreamWithContext(ctx aws.Context, input *DeleteStreamInput, opts ...request.Option) (*DeleteStreamOutput, error) {\n\treq, out := c.DeleteStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDescribeLimits = \"DescribeLimits\"\n\n// DescribeLimitsRequest generates a \"aws/request.Request\" representing the\n// client's request for the DescribeLimits operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DescribeLimits for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DescribeLimits method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the DescribeLimitsRequest method.\n//    req, resp := client.DescribeLimitsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeLimits\nfunc (c *Kinesis) DescribeLimitsRequest(input *DescribeLimitsInput) (req *request.Request, output *DescribeLimitsOutput) {\n\top := &request.Operation{\n\t\tName:       opDescribeLimits,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DescribeLimitsInput{}\n\t}\n\n\toutput = &DescribeLimitsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DescribeLimits API operation for Amazon Kinesis.\n//\n// Describes the shard limits and usage for the account.\n//\n// If you update your account limits, the old limits might be returned for a\n// few minutes.\n//\n// This operation has a limit of 1 transaction per second per account.\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 Kinesis's\n// API operation DescribeLimits for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeLimits\nfunc (c *Kinesis) DescribeLimits(input *DescribeLimitsInput) (*DescribeLimitsOutput, error) {\n\treq, out := c.DescribeLimitsRequest(input)\n\treturn out, req.Send()\n}\n\n// DescribeLimitsWithContext is the same as DescribeLimits with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DescribeLimits 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 *Kinesis) DescribeLimitsWithContext(ctx aws.Context, input *DescribeLimitsInput, opts ...request.Option) (*DescribeLimitsOutput, error) {\n\treq, out := c.DescribeLimitsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDescribeStream = \"DescribeStream\"\n\n// DescribeStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the DescribeStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DescribeStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DescribeStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the DescribeStreamRequest method.\n//    req, resp := client.DescribeStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeStream\nfunc (c *Kinesis) DescribeStreamRequest(input *DescribeStreamInput) (req *request.Request, output *DescribeStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opDescribeStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"ExclusiveStartShardId\"},\n\t\t\tOutputTokens:    []string{\"StreamDescription.Shards[-1].ShardId\"},\n\t\t\tLimitToken:      \"Limit\",\n\t\t\tTruncationToken: \"StreamDescription.HasMoreShards\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &DescribeStreamInput{}\n\t}\n\n\toutput = &DescribeStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DescribeStream API operation for Amazon Kinesis.\n//\n// Describes the specified Amazon Kinesis stream.\n//\n// The information returned includes the stream name, Amazon Resource Name (ARN),\n// creation time, enhanced metric configuration, and shard map. The shard map\n// is an array of shard objects. For each shard object, there is the hash key\n// and sequence number ranges that the shard spans, and the IDs of any earlier\n// shards that played in a role in creating the shard. Every record ingested\n// in the stream is identified by a sequence number, which is assigned when\n// the record is put into the stream.\n//\n// You can limit the number of shards returned by each call. For more information,\n// see Retrieving Shards from a Stream (http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-retrieve-shards.html)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// There are no guarantees about the chronological order shards returned. To\n// process shards in chronological order, use the ID of the parent shard to\n// track the lineage to the oldest shard.\n//\n// This operation has a limit of 10 transactions per second per account.\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 Kinesis's\n// API operation DescribeStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeStream\nfunc (c *Kinesis) DescribeStream(input *DescribeStreamInput) (*DescribeStreamOutput, error) {\n\treq, out := c.DescribeStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// DescribeStreamWithContext is the same as DescribeStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DescribeStream 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 *Kinesis) DescribeStreamWithContext(ctx aws.Context, input *DescribeStreamInput, opts ...request.Option) (*DescribeStreamOutput, error) {\n\treq, out := c.DescribeStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// DescribeStreamPages iterates over the pages of a DescribeStream 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 DescribeStream 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 DescribeStream operation.\n//    pageNum := 0\n//    err := client.DescribeStreamPages(params,\n//        func(page *DescribeStreamOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *Kinesis) DescribeStreamPages(input *DescribeStreamInput, fn func(*DescribeStreamOutput, bool) bool) error {\n\treturn c.DescribeStreamPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// DescribeStreamPagesWithContext same as DescribeStreamPages 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 *Kinesis) DescribeStreamPagesWithContext(ctx aws.Context, input *DescribeStreamInput, fn func(*DescribeStreamOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *DescribeStreamInput\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.DescribeStreamRequest(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().(*DescribeStreamOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opDisableEnhancedMonitoring = \"DisableEnhancedMonitoring\"\n\n// DisableEnhancedMonitoringRequest generates a \"aws/request.Request\" representing the\n// client's request for the DisableEnhancedMonitoring operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DisableEnhancedMonitoring for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DisableEnhancedMonitoring method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the DisableEnhancedMonitoringRequest method.\n//    req, resp := client.DisableEnhancedMonitoringRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DisableEnhancedMonitoring\nfunc (c *Kinesis) DisableEnhancedMonitoringRequest(input *DisableEnhancedMonitoringInput) (req *request.Request, output *EnhancedMonitoringOutput) {\n\top := &request.Operation{\n\t\tName:       opDisableEnhancedMonitoring,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DisableEnhancedMonitoringInput{}\n\t}\n\n\toutput = &EnhancedMonitoringOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DisableEnhancedMonitoring API operation for Amazon Kinesis.\n//\n// Disables enhanced monitoring.\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 Kinesis's\n// API operation DisableEnhancedMonitoring for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DisableEnhancedMonitoring\nfunc (c *Kinesis) DisableEnhancedMonitoring(input *DisableEnhancedMonitoringInput) (*EnhancedMonitoringOutput, error) {\n\treq, out := c.DisableEnhancedMonitoringRequest(input)\n\treturn out, req.Send()\n}\n\n// DisableEnhancedMonitoringWithContext is the same as DisableEnhancedMonitoring with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DisableEnhancedMonitoring 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 *Kinesis) DisableEnhancedMonitoringWithContext(ctx aws.Context, input *DisableEnhancedMonitoringInput, opts ...request.Option) (*EnhancedMonitoringOutput, error) {\n\treq, out := c.DisableEnhancedMonitoringRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opEnableEnhancedMonitoring = \"EnableEnhancedMonitoring\"\n\n// EnableEnhancedMonitoringRequest generates a \"aws/request.Request\" representing the\n// client's request for the EnableEnhancedMonitoring operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See EnableEnhancedMonitoring for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the EnableEnhancedMonitoring method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the EnableEnhancedMonitoringRequest method.\n//    req, resp := client.EnableEnhancedMonitoringRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/EnableEnhancedMonitoring\nfunc (c *Kinesis) EnableEnhancedMonitoringRequest(input *EnableEnhancedMonitoringInput) (req *request.Request, output *EnhancedMonitoringOutput) {\n\top := &request.Operation{\n\t\tName:       opEnableEnhancedMonitoring,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &EnableEnhancedMonitoringInput{}\n\t}\n\n\toutput = &EnhancedMonitoringOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// EnableEnhancedMonitoring API operation for Amazon Kinesis.\n//\n// Enables enhanced Amazon Kinesis stream monitoring for shard-level metrics.\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 Kinesis's\n// API operation EnableEnhancedMonitoring for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/EnableEnhancedMonitoring\nfunc (c *Kinesis) EnableEnhancedMonitoring(input *EnableEnhancedMonitoringInput) (*EnhancedMonitoringOutput, error) {\n\treq, out := c.EnableEnhancedMonitoringRequest(input)\n\treturn out, req.Send()\n}\n\n// EnableEnhancedMonitoringWithContext is the same as EnableEnhancedMonitoring with the addition of\n// the ability to pass a context and additional request options.\n//\n// See EnableEnhancedMonitoring 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 *Kinesis) EnableEnhancedMonitoringWithContext(ctx aws.Context, input *EnableEnhancedMonitoringInput, opts ...request.Option) (*EnhancedMonitoringOutput, error) {\n\treq, out := c.EnableEnhancedMonitoringRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetRecords = \"GetRecords\"\n\n// GetRecordsRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetRecords operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See GetRecords for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the GetRecords method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the GetRecordsRequest method.\n//    req, resp := client.GetRecordsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetRecords\nfunc (c *Kinesis) GetRecordsRequest(input *GetRecordsInput) (req *request.Request, output *GetRecordsOutput) {\n\top := &request.Operation{\n\t\tName:       opGetRecords,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetRecordsInput{}\n\t}\n\n\toutput = &GetRecordsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetRecords API operation for Amazon Kinesis.\n//\n// Gets data records from an Amazon Kinesis stream's shard.\n//\n// Specify a shard iterator using the ShardIterator parameter. The shard iterator\n// specifies the position in the shard from which you want to start reading\n// data records sequentially. If there are no records available in the portion\n// of the shard that the iterator points to, GetRecords returns an empty list.\n// Note that it might take multiple calls to get to a portion of the shard that\n// contains records.\n//\n// You can scale by provisioning multiple shards per stream while considering\n// service limits (for more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n// in the Amazon Kinesis Streams Developer Guide). Your application should have\n// one thread per shard, each reading continuously from its stream. To read\n// from a stream continually, call GetRecords in a loop. Use GetShardIterator\n// to get the shard iterator to specify in the first GetRecords call. GetRecords\n// returns a new shard iterator in NextShardIterator. Specify the shard iterator\n// returned in NextShardIterator in subsequent calls to GetRecords. Note that\n// if the shard has been closed, the shard iterator can't return more data and\n// GetRecords returns null in NextShardIterator. You can terminate the loop\n// when the shard is closed, or when the shard iterator reaches the record with\n// the sequence number or other attribute that marks it as the last record to\n// process.\n//\n// Each data record can be up to 1 MB in size, and each shard can read up to\n// 2 MB per second. You can ensure that your calls don't exceed the maximum\n// supported size or throughput by using the Limit parameter to specify the\n// maximum number of records that GetRecords can return. Consider your average\n// record size when determining this limit.\n//\n// The size of the data returned by GetRecords varies depending on the utilization\n// of the shard. The maximum size of data that GetRecords can return is 10 MB.\n// If a call returns this amount of data, subsequent calls made within the next\n// 5 seconds throw ProvisionedThroughputExceededException. If there is insufficient\n// provisioned throughput on the shard, subsequent calls made within the next\n// 1 second throw ProvisionedThroughputExceededException. Note that GetRecords\n// won't return any data when it throws an exception. For this reason, we recommend\n// that you wait one second between calls to GetRecords; however, it's possible\n// that the application will get exceptions for longer than 1 second.\n//\n// To detect whether the application is falling behind in processing, you can\n// use the MillisBehindLatest response attribute. You can also monitor the stream\n// using CloudWatch metrics and other mechanisms (see Monitoring (http://docs.aws.amazon.com/kinesis/latest/dev/monitoring.html)\n// in the Amazon Kinesis Streams Developer Guide).\n//\n// Each Amazon Kinesis record includes a value, ApproximateArrivalTimestamp,\n// that is set when a stream successfully receives and stores a record. This\n// is commonly referred to as a server-side timestamp, whereas a client-side\n// timestamp is set when a data producer creates or sends the record to a stream\n// (a data producer is any data source putting data records into a stream, for\n// example with PutRecords). The timestamp has millisecond precision. There\n// are no guarantees about the timestamp accuracy, or that the timestamp is\n// always increasing. For example, records in a shard or across a stream might\n// have timestamps that are out of order.\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 Kinesis's\n// API operation GetRecords for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeProvisionedThroughputExceededException \"ProvisionedThroughputExceededException\"\n//   The request rate for the stream is too high, or the requested data is too\n//   large for the available throughput. Reduce the frequency or size of your\n//   requests. For more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n//   in the Amazon Kinesis Streams Developer Guide, and Error Retries and Exponential\n//   Backoff in AWS (http://docs.aws.amazon.com/general/latest/gr/api-retries.html)\n//   in the AWS General Reference.\n//\n//   * ErrCodeExpiredIteratorException \"ExpiredIteratorException\"\n//   The provided iterator exceeds the maximum age allowed.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetRecords\nfunc (c *Kinesis) GetRecords(input *GetRecordsInput) (*GetRecordsOutput, error) {\n\treq, out := c.GetRecordsRequest(input)\n\treturn out, req.Send()\n}\n\n// GetRecordsWithContext is the same as GetRecords with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetRecords 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 *Kinesis) GetRecordsWithContext(ctx aws.Context, input *GetRecordsInput, opts ...request.Option) (*GetRecordsOutput, error) {\n\treq, out := c.GetRecordsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetShardIterator = \"GetShardIterator\"\n\n// GetShardIteratorRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetShardIterator operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See GetShardIterator for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the GetShardIterator method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the GetShardIteratorRequest method.\n//    req, resp := client.GetShardIteratorRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetShardIterator\nfunc (c *Kinesis) GetShardIteratorRequest(input *GetShardIteratorInput) (req *request.Request, output *GetShardIteratorOutput) {\n\top := &request.Operation{\n\t\tName:       opGetShardIterator,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetShardIteratorInput{}\n\t}\n\n\toutput = &GetShardIteratorOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetShardIterator API operation for Amazon Kinesis.\n//\n// Gets an Amazon Kinesis shard iterator. A shard iterator expires five minutes\n// after it is returned to the requester.\n//\n// A shard iterator specifies the shard position from which to start reading\n// data records sequentially. The position is specified using the sequence number\n// of a data record in a shard. A sequence number is the identifier associated\n// with every record ingested in the stream, and is assigned when a record is\n// put into the stream. Each stream has one or more shards.\n//\n// You must specify the shard iterator type. For example, you can set the ShardIteratorType\n// parameter to read exactly from the position denoted by a specific sequence\n// number by using the AT_SEQUENCE_NUMBER shard iterator type, or right after\n// the sequence number by using the AFTER_SEQUENCE_NUMBER shard iterator type,\n// using sequence numbers returned by earlier calls to PutRecord, PutRecords,\n// GetRecords, or DescribeStream. In the request, you can specify the shard\n// iterator type AT_TIMESTAMP to read records from an arbitrary point in time,\n// TRIM_HORIZON to cause ShardIterator to point to the last untrimmed record\n// in the shard in the system (the oldest data record in the shard), or LATEST\n// so that you always read the most recent data in the shard.\n//\n// When you read repeatedly from a stream, use a GetShardIterator request to\n// get the first shard iterator for use in your first GetRecords request and\n// for subsequent reads use the shard iterator returned by the GetRecords request\n// in NextShardIterator. A new shard iterator is returned by every GetRecords\n// request in NextShardIterator, which you use in the ShardIterator parameter\n// of the next GetRecords request.\n//\n// If a GetShardIterator request is made too often, you receive a ProvisionedThroughputExceededException.\n// For more information about throughput limits, see GetRecords, and Streams\n// Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// If the shard is closed, GetShardIterator returns a valid iterator for the\n// last sequence number of the shard. Note that a shard can be closed as a result\n// of using SplitShard or MergeShards.\n//\n// GetShardIterator has a limit of 5 transactions per second per account per\n// open shard.\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 Kinesis's\n// API operation GetShardIterator for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeProvisionedThroughputExceededException \"ProvisionedThroughputExceededException\"\n//   The request rate for the stream is too high, or the requested data is too\n//   large for the available throughput. Reduce the frequency or size of your\n//   requests. For more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n//   in the Amazon Kinesis Streams Developer Guide, and Error Retries and Exponential\n//   Backoff in AWS (http://docs.aws.amazon.com/general/latest/gr/api-retries.html)\n//   in the AWS General Reference.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetShardIterator\nfunc (c *Kinesis) GetShardIterator(input *GetShardIteratorInput) (*GetShardIteratorOutput, error) {\n\treq, out := c.GetShardIteratorRequest(input)\n\treturn out, req.Send()\n}\n\n// GetShardIteratorWithContext is the same as GetShardIterator with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetShardIterator 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 *Kinesis) GetShardIteratorWithContext(ctx aws.Context, input *GetShardIteratorInput, opts ...request.Option) (*GetShardIteratorOutput, error) {\n\treq, out := c.GetShardIteratorRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opIncreaseStreamRetentionPeriod = \"IncreaseStreamRetentionPeriod\"\n\n// IncreaseStreamRetentionPeriodRequest generates a \"aws/request.Request\" representing the\n// client's request for the IncreaseStreamRetentionPeriod operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See IncreaseStreamRetentionPeriod for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the IncreaseStreamRetentionPeriod method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the IncreaseStreamRetentionPeriodRequest method.\n//    req, resp := client.IncreaseStreamRetentionPeriodRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/IncreaseStreamRetentionPeriod\nfunc (c *Kinesis) IncreaseStreamRetentionPeriodRequest(input *IncreaseStreamRetentionPeriodInput) (req *request.Request, output *IncreaseStreamRetentionPeriodOutput) {\n\top := &request.Operation{\n\t\tName:       opIncreaseStreamRetentionPeriod,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &IncreaseStreamRetentionPeriodInput{}\n\t}\n\n\toutput = &IncreaseStreamRetentionPeriodOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// IncreaseStreamRetentionPeriod API operation for Amazon Kinesis.\n//\n// Increases the Amazon Kinesis stream's retention period, which is the length\n// of time data records are accessible after they are added to the stream. The\n// maximum value of a stream's retention period is 168 hours (7 days).\n//\n// Upon choosing a longer stream retention period, this operation will increase\n// the time period records are accessible that have not yet expired. However,\n// it will not make previous data that has expired (older than the stream's\n// previous retention period) accessible after the operation has been called.\n// For example, if a stream's retention period is set to 24 hours and is increased\n// to 168 hours, any data that is older than 24 hours will remain inaccessible\n// to consumer applications.\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 Kinesis's\n// API operation IncreaseStreamRetentionPeriod for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/IncreaseStreamRetentionPeriod\nfunc (c *Kinesis) IncreaseStreamRetentionPeriod(input *IncreaseStreamRetentionPeriodInput) (*IncreaseStreamRetentionPeriodOutput, error) {\n\treq, out := c.IncreaseStreamRetentionPeriodRequest(input)\n\treturn out, req.Send()\n}\n\n// IncreaseStreamRetentionPeriodWithContext is the same as IncreaseStreamRetentionPeriod with the addition of\n// the ability to pass a context and additional request options.\n//\n// See IncreaseStreamRetentionPeriod 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 *Kinesis) IncreaseStreamRetentionPeriodWithContext(ctx aws.Context, input *IncreaseStreamRetentionPeriodInput, opts ...request.Option) (*IncreaseStreamRetentionPeriodOutput, error) {\n\treq, out := c.IncreaseStreamRetentionPeriodRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListStreams = \"ListStreams\"\n\n// ListStreamsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListStreams operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See ListStreams for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the ListStreams method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the ListStreamsRequest method.\n//    req, resp := client.ListStreamsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListStreams\nfunc (c *Kinesis) ListStreamsRequest(input *ListStreamsInput) (req *request.Request, output *ListStreamsOutput) {\n\top := &request.Operation{\n\t\tName:       opListStreams,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"ExclusiveStartStreamName\"},\n\t\t\tOutputTokens:    []string{\"StreamNames[-1]\"},\n\t\t\tLimitToken:      \"Limit\",\n\t\t\tTruncationToken: \"HasMoreStreams\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListStreamsInput{}\n\t}\n\n\toutput = &ListStreamsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListStreams API operation for Amazon Kinesis.\n//\n// Lists your Amazon Kinesis streams.\n//\n// The number of streams may be too large to return from a single call to ListStreams.\n// You can limit the number of returned streams using the Limit parameter. If\n// you do not specify a value for the Limit parameter, Amazon Kinesis uses the\n// default limit, which is currently 10.\n//\n// You can detect if there are more streams available to list by using the HasMoreStreams\n// flag from the returned output. If there are more streams available, you can\n// request more streams by using the name of the last stream returned by the\n// ListStreams request in the ExclusiveStartStreamName parameter in a subsequent\n// request to ListStreams. The group of stream names returned by the subsequent\n// request is then added to the list. You can continue this process until all\n// the stream names have been collected in the list.\n//\n// ListStreams has a limit of 5 transactions per second per account.\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 Kinesis's\n// API operation ListStreams for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListStreams\nfunc (c *Kinesis) ListStreams(input *ListStreamsInput) (*ListStreamsOutput, error) {\n\treq, out := c.ListStreamsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListStreamsWithContext is the same as ListStreams with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListStreams 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 *Kinesis) ListStreamsWithContext(ctx aws.Context, input *ListStreamsInput, opts ...request.Option) (*ListStreamsOutput, error) {\n\treq, out := c.ListStreamsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListStreamsPages iterates over the pages of a ListStreams 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 ListStreams 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 ListStreams operation.\n//    pageNum := 0\n//    err := client.ListStreamsPages(params,\n//        func(page *ListStreamsOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *Kinesis) ListStreamsPages(input *ListStreamsInput, fn func(*ListStreamsOutput, bool) bool) error {\n\treturn c.ListStreamsPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListStreamsPagesWithContext same as ListStreamsPages 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 *Kinesis) ListStreamsPagesWithContext(ctx aws.Context, input *ListStreamsInput, fn func(*ListStreamsOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListStreamsInput\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.ListStreamsRequest(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().(*ListStreamsOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opListTagsForStream = \"ListTagsForStream\"\n\n// ListTagsForStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListTagsForStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See ListTagsForStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the ListTagsForStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the ListTagsForStreamRequest method.\n//    req, resp := client.ListTagsForStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListTagsForStream\nfunc (c *Kinesis) ListTagsForStreamRequest(input *ListTagsForStreamInput) (req *request.Request, output *ListTagsForStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opListTagsForStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &ListTagsForStreamInput{}\n\t}\n\n\toutput = &ListTagsForStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListTagsForStream API operation for Amazon Kinesis.\n//\n// Lists the tags for the specified Amazon Kinesis stream.\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 Kinesis's\n// API operation ListTagsForStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListTagsForStream\nfunc (c *Kinesis) ListTagsForStream(input *ListTagsForStreamInput) (*ListTagsForStreamOutput, error) {\n\treq, out := c.ListTagsForStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// ListTagsForStreamWithContext is the same as ListTagsForStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListTagsForStream 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 *Kinesis) ListTagsForStreamWithContext(ctx aws.Context, input *ListTagsForStreamInput, opts ...request.Option) (*ListTagsForStreamOutput, error) {\n\treq, out := c.ListTagsForStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opMergeShards = \"MergeShards\"\n\n// MergeShardsRequest generates a \"aws/request.Request\" representing the\n// client's request for the MergeShards operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See MergeShards for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the MergeShards method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the MergeShardsRequest method.\n//    req, resp := client.MergeShardsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/MergeShards\nfunc (c *Kinesis) MergeShardsRequest(input *MergeShardsInput) (req *request.Request, output *MergeShardsOutput) {\n\top := &request.Operation{\n\t\tName:       opMergeShards,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &MergeShardsInput{}\n\t}\n\n\toutput = &MergeShardsOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// MergeShards API operation for Amazon Kinesis.\n//\n// Merges two adjacent shards in an Amazon Kinesis stream and combines them\n// into a single shard to reduce the stream's capacity to ingest and transport\n// data. Two shards are considered adjacent if the union of the hash key ranges\n// for the two shards form a contiguous set with no gaps. For example, if you\n// have two shards, one with a hash key range of 276...381 and the other with\n// a hash key range of 382...454, then you could merge these two shards into\n// a single shard that would have a hash key range of 276...454. After the merge,\n// the single child shard receives data for all hash key values covered by the\n// two parent shards.\n//\n// MergeShards is called when there is a need to reduce the overall capacity\n// of a stream because of excess capacity that is not being used. You must specify\n// the shard to be merged and the adjacent shard for a stream. For more information\n// about merging shards, see Merge Two Shards (http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-merge.html)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// If the stream is in the ACTIVE state, you can call MergeShards. If a stream\n// is in the CREATING, UPDATING, or DELETING state, MergeShards returns a ResourceInUseException.\n// If the specified stream does not exist, MergeShards returns a ResourceNotFoundException.\n//\n// You can use DescribeStream to check the state of the stream, which is returned\n// in StreamStatus.\n//\n// MergeShards is an asynchronous operation. Upon receiving a MergeShards request,\n// Amazon Kinesis immediately returns a response and sets the StreamStatus to\n// UPDATING. After the operation is completed, Amazon Kinesis sets the StreamStatus\n// to ACTIVE. Read and write operations continue to work while the stream is\n// in the UPDATING state.\n//\n// You use DescribeStream to determine the shard IDs that are specified in the\n// MergeShards request.\n//\n// If you try to operate on too many streams in parallel using CreateStream,\n// DeleteStream, MergeShards or SplitShard, you will receive a LimitExceededException.\n//\n// MergeShards has limit of 5 transactions per second per account.\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 Kinesis's\n// API operation MergeShards for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/MergeShards\nfunc (c *Kinesis) MergeShards(input *MergeShardsInput) (*MergeShardsOutput, error) {\n\treq, out := c.MergeShardsRequest(input)\n\treturn out, req.Send()\n}\n\n// MergeShardsWithContext is the same as MergeShards with the addition of\n// the ability to pass a context and additional request options.\n//\n// See MergeShards 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 *Kinesis) MergeShardsWithContext(ctx aws.Context, input *MergeShardsInput, opts ...request.Option) (*MergeShardsOutput, error) {\n\treq, out := c.MergeShardsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutRecord = \"PutRecord\"\n\n// PutRecordRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutRecord operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See PutRecord for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the PutRecord method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the PutRecordRequest method.\n//    req, resp := client.PutRecordRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecord\nfunc (c *Kinesis) PutRecordRequest(input *PutRecordInput) (req *request.Request, output *PutRecordOutput) {\n\top := &request.Operation{\n\t\tName:       opPutRecord,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutRecordInput{}\n\t}\n\n\toutput = &PutRecordOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutRecord API operation for Amazon Kinesis.\n//\n// Writes a single data record into an Amazon Kinesis stream. Call PutRecord\n// to send data into the stream for real-time ingestion and subsequent processing,\n// one record at a time. Each shard can support writes up to 1,000 records per\n// second, up to a maximum data write total of 1 MB per second.\n//\n// You must specify the name of the stream that captures, stores, and transports\n// the data; a partition key; and the data blob itself.\n//\n// The data blob can be any type of data; for example, a segment from a log\n// file, geographic/location data, website clickstream data, and so on.\n//\n// The partition key is used by Amazon Kinesis to distribute data across shards.\n// Amazon Kinesis segregates the data records that belong to a stream into multiple\n// shards, using the partition key associated with each data record to determine\n// which shard a given data record belongs to.\n//\n// Partition keys are Unicode strings, with a maximum length limit of 256 characters\n// for each key. An MD5 hash function is used to map partition keys to 128-bit\n// integer values and to map associated data records to shards using the hash\n// key ranges of the shards. You can override hashing the partition key to determine\n// the shard by explicitly specifying a hash value using the ExplicitHashKey\n// parameter. For more information, see Adding Data to a Stream (http://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// PutRecord returns the shard ID of where the data record was placed and the\n// sequence number that was assigned to the data record.\n//\n// Sequence numbers increase over time and are specific to a shard within a\n// stream, not across all shards within a stream. To guarantee strictly increasing\n// ordering, write serially to a shard and use the SequenceNumberForOrdering\n// parameter. For more information, see Adding Data to a Stream (http://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// If a PutRecord request cannot be processed because of insufficient provisioned\n// throughput on the shard involved in the request, PutRecord throws ProvisionedThroughputExceededException.\n//\n// Data records are accessible for only 24 hours from the time that they are\n// added to a stream.\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 Kinesis's\n// API operation PutRecord for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeProvisionedThroughputExceededException \"ProvisionedThroughputExceededException\"\n//   The request rate for the stream is too high, or the requested data is too\n//   large for the available throughput. Reduce the frequency or size of your\n//   requests. For more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n//   in the Amazon Kinesis Streams Developer Guide, and Error Retries and Exponential\n//   Backoff in AWS (http://docs.aws.amazon.com/general/latest/gr/api-retries.html)\n//   in the AWS General Reference.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecord\nfunc (c *Kinesis) PutRecord(input *PutRecordInput) (*PutRecordOutput, error) {\n\treq, out := c.PutRecordRequest(input)\n\treturn out, req.Send()\n}\n\n// PutRecordWithContext is the same as PutRecord with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutRecord 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 *Kinesis) PutRecordWithContext(ctx aws.Context, input *PutRecordInput, opts ...request.Option) (*PutRecordOutput, error) {\n\treq, out := c.PutRecordRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutRecords = \"PutRecords\"\n\n// PutRecordsRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutRecords operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See PutRecords for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the PutRecords method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the PutRecordsRequest method.\n//    req, resp := client.PutRecordsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecords\nfunc (c *Kinesis) PutRecordsRequest(input *PutRecordsInput) (req *request.Request, output *PutRecordsOutput) {\n\top := &request.Operation{\n\t\tName:       opPutRecords,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutRecordsInput{}\n\t}\n\n\toutput = &PutRecordsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutRecords API operation for Amazon Kinesis.\n//\n// Writes multiple data records into an Amazon Kinesis stream in a single call\n// (also referred to as a PutRecords request). Use this operation to send data\n// into the stream for data ingestion and processing.\n//\n// Each PutRecords request can support up to 500 records. Each record in the\n// request can be as large as 1 MB, up to a limit of 5 MB for the entire request,\n// including partition keys. Each shard can support writes up to 1,000 records\n// per second, up to a maximum data write total of 1 MB per second.\n//\n// You must specify the name of the stream that captures, stores, and transports\n// the data; and an array of request Records, with each record in the array\n// requiring a partition key and data blob. The record size limit applies to\n// the total size of the partition key and data blob.\n//\n// The data blob can be any type of data; for example, a segment from a log\n// file, geographic/location data, website clickstream data, and so on.\n//\n// The partition key is used by Amazon Kinesis as input to a hash function that\n// maps the partition key and associated data to a specific shard. An MD5 hash\n// function is used to map partition keys to 128-bit integer values and to map\n// associated data records to shards. As a result of this hashing mechanism,\n// all data records with the same partition key map to the same shard within\n// the stream. For more information, see Adding Data to a Stream (http://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// Each record in the Records array may include an optional parameter, ExplicitHashKey,\n// which overrides the partition key to shard mapping. This parameter allows\n// a data producer to determine explicitly the shard where the record is stored.\n// For more information, see Adding Multiple Records with PutRecords (http://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-putrecords)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// The PutRecords response includes an array of response Records. Each record\n// in the response array directly correlates with a record in the request array\n// using natural ordering, from the top to the bottom of the request and response.\n// The response Records array always includes the same number of records as\n// the request array.\n//\n// The response Records array includes both successfully and unsuccessfully\n// processed records. Amazon Kinesis attempts to process all records in each\n// PutRecords request. A single record failure does not stop the processing\n// of subsequent records.\n//\n// A successfully-processed record includes ShardId and SequenceNumber values.\n// The ShardId parameter identifies the shard in the stream where the record\n// is stored. The SequenceNumber parameter is an identifier assigned to the\n// put record, unique to all records in the stream.\n//\n// An unsuccessfully-processed record includes ErrorCode and ErrorMessage values.\n// ErrorCode reflects the type of error and can be one of the following values:\n// ProvisionedThroughputExceededException or InternalFailure. ErrorMessage provides\n// more detailed information about the ProvisionedThroughputExceededException\n// exception including the account ID, stream name, and shard ID of the record\n// that was throttled. For more information about partially successful responses,\n// see Adding Multiple Records with PutRecords (http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// By default, data records are accessible for only 24 hours from the time that\n// they are added to an Amazon Kinesis stream. This retention period can be\n// modified using the DecreaseStreamRetentionPeriod and IncreaseStreamRetentionPeriod\n// operations.\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 Kinesis's\n// API operation PutRecords for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeProvisionedThroughputExceededException \"ProvisionedThroughputExceededException\"\n//   The request rate for the stream is too high, or the requested data is too\n//   large for the available throughput. Reduce the frequency or size of your\n//   requests. For more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n//   in the Amazon Kinesis Streams Developer Guide, and Error Retries and Exponential\n//   Backoff in AWS (http://docs.aws.amazon.com/general/latest/gr/api-retries.html)\n//   in the AWS General Reference.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecords\nfunc (c *Kinesis) PutRecords(input *PutRecordsInput) (*PutRecordsOutput, error) {\n\treq, out := c.PutRecordsRequest(input)\n\treturn out, req.Send()\n}\n\n// PutRecordsWithContext is the same as PutRecords with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutRecords 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 *Kinesis) PutRecordsWithContext(ctx aws.Context, input *PutRecordsInput, opts ...request.Option) (*PutRecordsOutput, error) {\n\treq, out := c.PutRecordsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opRemoveTagsFromStream = \"RemoveTagsFromStream\"\n\n// RemoveTagsFromStreamRequest generates a \"aws/request.Request\" representing the\n// client's request for the RemoveTagsFromStream operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See RemoveTagsFromStream for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the RemoveTagsFromStream method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the RemoveTagsFromStreamRequest method.\n//    req, resp := client.RemoveTagsFromStreamRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/RemoveTagsFromStream\nfunc (c *Kinesis) RemoveTagsFromStreamRequest(input *RemoveTagsFromStreamInput) (req *request.Request, output *RemoveTagsFromStreamOutput) {\n\top := &request.Operation{\n\t\tName:       opRemoveTagsFromStream,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &RemoveTagsFromStreamInput{}\n\t}\n\n\toutput = &RemoveTagsFromStreamOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// RemoveTagsFromStream API operation for Amazon Kinesis.\n//\n// Removes tags from the specified Amazon Kinesis stream. Removed tags are deleted\n// and cannot be recovered after this operation successfully completes.\n//\n// If you specify a tag that does not exist, it is ignored.\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 Kinesis's\n// API operation RemoveTagsFromStream for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/RemoveTagsFromStream\nfunc (c *Kinesis) RemoveTagsFromStream(input *RemoveTagsFromStreamInput) (*RemoveTagsFromStreamOutput, error) {\n\treq, out := c.RemoveTagsFromStreamRequest(input)\n\treturn out, req.Send()\n}\n\n// RemoveTagsFromStreamWithContext is the same as RemoveTagsFromStream with the addition of\n// the ability to pass a context and additional request options.\n//\n// See RemoveTagsFromStream 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 *Kinesis) RemoveTagsFromStreamWithContext(ctx aws.Context, input *RemoveTagsFromStreamInput, opts ...request.Option) (*RemoveTagsFromStreamOutput, error) {\n\treq, out := c.RemoveTagsFromStreamRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opSplitShard = \"SplitShard\"\n\n// SplitShardRequest generates a \"aws/request.Request\" representing the\n// client's request for the SplitShard operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See SplitShard for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the SplitShard method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the SplitShardRequest method.\n//    req, resp := client.SplitShardRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/SplitShard\nfunc (c *Kinesis) SplitShardRequest(input *SplitShardInput) (req *request.Request, output *SplitShardOutput) {\n\top := &request.Operation{\n\t\tName:       opSplitShard,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &SplitShardInput{}\n\t}\n\n\toutput = &SplitShardOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// SplitShard API operation for Amazon Kinesis.\n//\n// Splits a shard into two new shards in the Amazon Kinesis stream to increase\n// the stream's capacity to ingest and transport data. SplitShard is called\n// when there is a need to increase the overall capacity of a stream because\n// of an expected increase in the volume of data records being ingested.\n//\n// You can also use SplitShard when a shard appears to be approaching its maximum\n// utilization; for example, the producers sending data into the specific shard\n// are suddenly sending more than previously anticipated. You can also call\n// SplitShard to increase stream capacity, so that more Amazon Kinesis applications\n// can simultaneously read data from the stream for real-time processing.\n//\n// You must specify the shard to be split and the new hash key, which is the\n// position in the shard where the shard gets split in two. In many cases, the\n// new hash key might simply be the average of the beginning and ending hash\n// key, but it can be any hash key value in the range being mapped into the\n// shard. For more information about splitting shards, see Split a Shard (http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-resharding-split.html)\n// in the Amazon Kinesis Streams Developer Guide.\n//\n// You can use DescribeStream to determine the shard ID and hash key values\n// for the ShardToSplit and NewStartingHashKey parameters that are specified\n// in the SplitShard request.\n//\n// SplitShard is an asynchronous operation. Upon receiving a SplitShard request,\n// Amazon Kinesis immediately returns a response and sets the stream status\n// to UPDATING. After the operation is completed, Amazon Kinesis sets the stream\n// status to ACTIVE. Read and write operations continue to work while the stream\n// is in the UPDATING state.\n//\n// You can use DescribeStream to check the status of the stream, which is returned\n// in StreamStatus. If the stream is in the ACTIVE state, you can call SplitShard.\n// If a stream is in CREATING or UPDATING or DELETING states, DescribeStream\n// returns a ResourceInUseException.\n//\n// If the specified stream does not exist, DescribeStream returns a ResourceNotFoundException.\n// If you try to create more shards than are authorized for your account, you\n// receive a LimitExceededException.\n//\n// For the default shard limit for an AWS account, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n// in the Amazon Kinesis Streams Developer Guide. If you need to increase this\n// limit, contact AWS Support (http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html).\n//\n// If you try to operate on too many streams simultaneously using CreateStream,\n// DeleteStream, MergeShards, and/or SplitShard, you receive a LimitExceededException.\n//\n// SplitShard has limit of 5 transactions per second per account.\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 Kinesis's\n// API operation SplitShard for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/SplitShard\nfunc (c *Kinesis) SplitShard(input *SplitShardInput) (*SplitShardOutput, error) {\n\treq, out := c.SplitShardRequest(input)\n\treturn out, req.Send()\n}\n\n// SplitShardWithContext is the same as SplitShard with the addition of\n// the ability to pass a context and additional request options.\n//\n// See SplitShard 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 *Kinesis) SplitShardWithContext(ctx aws.Context, input *SplitShardInput, opts ...request.Option) (*SplitShardOutput, error) {\n\treq, out := c.SplitShardRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opUpdateShardCount = \"UpdateShardCount\"\n\n// UpdateShardCountRequest generates a \"aws/request.Request\" representing the\n// client's request for the UpdateShardCount operation. The \"output\" return\n// value can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See UpdateShardCount for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the UpdateShardCount method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\n//\n//    // Example sending a request using the UpdateShardCountRequest method.\n//    req, resp := client.UpdateShardCountRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/UpdateShardCount\nfunc (c *Kinesis) UpdateShardCountRequest(input *UpdateShardCountInput) (req *request.Request, output *UpdateShardCountOutput) {\n\top := &request.Operation{\n\t\tName:       opUpdateShardCount,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &UpdateShardCountInput{}\n\t}\n\n\toutput = &UpdateShardCountOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// UpdateShardCount API operation for Amazon Kinesis.\n//\n// Updates the shard count of the specified stream to the specified number of\n// shards.\n//\n// Updating the shard count is an asynchronous operation. Upon receiving the\n// request, Amazon Kinesis returns immediately and sets the status of the stream\n// to UPDATING. After the update is complete, Amazon Kinesis sets the status\n// of the stream back to ACTIVE. Depending on the size of the stream, the scaling\n// action could take a few minutes to complete. You can continue to read and\n// write data to your stream while its status is UPDATING.\n//\n// To update the shard count, Amazon Kinesis performs splits and merges and\n// individual shards. This can cause short-lived shards to be created, in addition\n// to the final shards. We recommend that you double or halve the shard count,\n// as this results in the fewest number of splits or merges.\n//\n// This operation has a rate limit of twice per rolling 24 hour period. You\n// cannot scale above double your current shard count, scale below half your\n// current shard count, or exceed the shard limits for your account.\n//\n// For the default limits for an AWS account, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n// in the Amazon Kinesis Streams Developer Guide. If you need to increase a\n// limit, contact AWS Support (http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.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 Kinesis's\n// API operation UpdateShardCount for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeInvalidArgumentException \"InvalidArgumentException\"\n//   A specified parameter exceeds its restrictions, is not supported, or can't\n//   be used. For more information, see the returned message.\n//\n//   * ErrCodeLimitExceededException \"LimitExceededException\"\n//   The requested resource exceeds the maximum number allowed, or the number\n//   of concurrent stream requests exceeds the maximum number allowed (5).\n//\n//   * ErrCodeResourceInUseException \"ResourceInUseException\"\n//   The resource is not available for this operation. For successful operation,\n//   the resource needs to be in the ACTIVE state.\n//\n//   * ErrCodeResourceNotFoundException \"ResourceNotFoundException\"\n//   The requested resource could not be found. The stream might not be specified\n//   correctly.\n//\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/UpdateShardCount\nfunc (c *Kinesis) UpdateShardCount(input *UpdateShardCountInput) (*UpdateShardCountOutput, error) {\n\treq, out := c.UpdateShardCountRequest(input)\n\treturn out, req.Send()\n}\n\n// UpdateShardCountWithContext is the same as UpdateShardCount with the addition of\n// the ability to pass a context and additional request options.\n//\n// See UpdateShardCount 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 *Kinesis) UpdateShardCountWithContext(ctx aws.Context, input *UpdateShardCountInput, opts ...request.Option) (*UpdateShardCountOutput, error) {\n\treq, out := c.UpdateShardCountRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// Represents the input for AddTagsToStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/AddTagsToStreamInput\ntype AddTagsToStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the stream.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The set of key-value pairs to use to create the tags.\n\t//\n\t// Tags is a required field\n\tTags map[string]*string `min:\"1\" type:\"map\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AddTagsToStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AddTagsToStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AddTagsToStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AddTagsToStreamInput\"}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\tif s.Tags == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Tags\"))\n\t}\n\tif s.Tags != nil && len(s.Tags) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Tags\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *AddTagsToStreamInput) SetStreamName(v string) *AddTagsToStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *AddTagsToStreamInput) SetTags(v map[string]*string) *AddTagsToStreamInput {\n\ts.Tags = v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/AddTagsToStreamOutput\ntype AddTagsToStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s AddTagsToStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AddTagsToStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the input for CreateStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/CreateStreamInput\ntype CreateStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The number of shards that the stream will use. The throughput of the stream\n\t// is a function of the number of shards; more shards are required for greater\n\t// provisioned throughput.\n\t//\n\t// DefaultShardLimit;\n\t//\n\t// ShardCount is a required field\n\tShardCount *int64 `min:\"1\" type:\"integer\" required:\"true\"`\n\n\t// A name to identify the stream. The stream name is scoped to the AWS account\n\t// used by the application that creates the stream. It is also scoped by region.\n\t// That is, two streams in two different AWS accounts can have the same name,\n\t// and two streams in the same AWS account but in two different regions can\n\t// have the same name.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s CreateStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CreateStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CreateStreamInput\"}\n\tif s.ShardCount == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardCount\"))\n\t}\n\tif s.ShardCount != nil && *s.ShardCount < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"ShardCount\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetShardCount sets the ShardCount field's value.\nfunc (s *CreateStreamInput) SetShardCount(v int64) *CreateStreamInput {\n\ts.ShardCount = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *CreateStreamInput) SetStreamName(v string) *CreateStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/CreateStreamOutput\ntype CreateStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s CreateStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the input for DecreaseStreamRetentionPeriod.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DecreaseStreamRetentionPeriodInput\ntype DecreaseStreamRetentionPeriodInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The new retention period of the stream, in hours. Must be less than the current\n\t// retention period.\n\t//\n\t// RetentionPeriodHours is a required field\n\tRetentionPeriodHours *int64 `min:\"1\" type:\"integer\" required:\"true\"`\n\n\t// The name of the stream to modify.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DecreaseStreamRetentionPeriodInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DecreaseStreamRetentionPeriodInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DecreaseStreamRetentionPeriodInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DecreaseStreamRetentionPeriodInput\"}\n\tif s.RetentionPeriodHours == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RetentionPeriodHours\"))\n\t}\n\tif s.RetentionPeriodHours != nil && *s.RetentionPeriodHours < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"RetentionPeriodHours\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRetentionPeriodHours sets the RetentionPeriodHours field's value.\nfunc (s *DecreaseStreamRetentionPeriodInput) SetRetentionPeriodHours(v int64) *DecreaseStreamRetentionPeriodInput {\n\ts.RetentionPeriodHours = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *DecreaseStreamRetentionPeriodInput) SetStreamName(v string) *DecreaseStreamRetentionPeriodInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DecreaseStreamRetentionPeriodOutput\ntype DecreaseStreamRetentionPeriodOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DecreaseStreamRetentionPeriodOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DecreaseStreamRetentionPeriodOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the input for DeleteStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DeleteStreamInput\ntype DeleteStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the stream to delete.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteStreamInput\"}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *DeleteStreamInput) SetStreamName(v string) *DeleteStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DeleteStreamOutput\ntype DeleteStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeLimitsInput\ntype DescribeLimitsInput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DescribeLimitsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DescribeLimitsInput) GoString() string {\n\treturn s.String()\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeLimitsOutput\ntype DescribeLimitsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The number of open shards.\n\t//\n\t// OpenShardCount is a required field\n\tOpenShardCount *int64 `type:\"integer\" required:\"true\"`\n\n\t// The maximum number of shards.\n\t//\n\t// ShardLimit is a required field\n\tShardLimit *int64 `type:\"integer\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DescribeLimitsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DescribeLimitsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetOpenShardCount sets the OpenShardCount field's value.\nfunc (s *DescribeLimitsOutput) SetOpenShardCount(v int64) *DescribeLimitsOutput {\n\ts.OpenShardCount = &v\n\treturn s\n}\n\n// SetShardLimit sets the ShardLimit field's value.\nfunc (s *DescribeLimitsOutput) SetShardLimit(v int64) *DescribeLimitsOutput {\n\ts.ShardLimit = &v\n\treturn s\n}\n\n// Represents the input for DescribeStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeStreamInput\ntype DescribeStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The shard ID of the shard to start with.\n\tExclusiveStartShardId *string `min:\"1\" type:\"string\"`\n\n\t// The maximum number of shards to return in a single call. The default value\n\t// is 100. If you specify a value greater than 100, at most 100 shards are returned.\n\tLimit *int64 `min:\"1\" type:\"integer\"`\n\n\t// The name of the stream to describe.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DescribeStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DescribeStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DescribeStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DescribeStreamInput\"}\n\tif s.ExclusiveStartShardId != nil && len(*s.ExclusiveStartShardId) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ExclusiveStartShardId\", 1))\n\t}\n\tif s.Limit != nil && *s.Limit < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"Limit\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetExclusiveStartShardId sets the ExclusiveStartShardId field's value.\nfunc (s *DescribeStreamInput) SetExclusiveStartShardId(v string) *DescribeStreamInput {\n\ts.ExclusiveStartShardId = &v\n\treturn s\n}\n\n// SetLimit sets the Limit field's value.\nfunc (s *DescribeStreamInput) SetLimit(v int64) *DescribeStreamInput {\n\ts.Limit = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *DescribeStreamInput) SetStreamName(v string) *DescribeStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents the output for DescribeStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DescribeStreamOutput\ntype DescribeStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The current status of the stream, the stream ARN, an array of shard objects\n\t// that comprise the stream, and whether there are more shards available.\n\t//\n\t// StreamDescription is a required field\n\tStreamDescription *StreamDescription `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DescribeStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DescribeStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetStreamDescription sets the StreamDescription field's value.\nfunc (s *DescribeStreamOutput) SetStreamDescription(v *StreamDescription) *DescribeStreamOutput {\n\ts.StreamDescription = v\n\treturn s\n}\n\n// Represents the input for DisableEnhancedMonitoring.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/DisableEnhancedMonitoringInput\ntype DisableEnhancedMonitoringInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// List of shard-level metrics to disable.\n\t//\n\t// The following are the valid shard-level metrics. The value \"ALL\" disables\n\t// every metric.\n\t//\n\t//    * IncomingBytes\n\t//\n\t//    * IncomingRecords\n\t//\n\t//    * OutgoingBytes\n\t//\n\t//    * OutgoingRecords\n\t//\n\t//    * WriteProvisionedThroughputExceeded\n\t//\n\t//    * ReadProvisionedThroughputExceeded\n\t//\n\t//    * IteratorAgeMilliseconds\n\t//\n\t//    * ALL\n\t//\n\t// For more information, see Monitoring the Amazon Kinesis Streams Service with\n\t// Amazon CloudWatch (http://docs.aws.amazon.com/kinesis/latest/dev/monitoring-with-cloudwatch.html)\n\t// in the Amazon Kinesis Streams Developer Guide.\n\t//\n\t// ShardLevelMetrics is a required field\n\tShardLevelMetrics []*string `min:\"1\" type:\"list\" required:\"true\"`\n\n\t// The name of the Amazon Kinesis stream for which to disable enhanced monitoring.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DisableEnhancedMonitoringInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DisableEnhancedMonitoringInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DisableEnhancedMonitoringInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DisableEnhancedMonitoringInput\"}\n\tif s.ShardLevelMetrics == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardLevelMetrics\"))\n\t}\n\tif s.ShardLevelMetrics != nil && len(s.ShardLevelMetrics) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardLevelMetrics\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetShardLevelMetrics sets the ShardLevelMetrics field's value.\nfunc (s *DisableEnhancedMonitoringInput) SetShardLevelMetrics(v []*string) *DisableEnhancedMonitoringInput {\n\ts.ShardLevelMetrics = v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *DisableEnhancedMonitoringInput) SetStreamName(v string) *DisableEnhancedMonitoringInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents the input for EnableEnhancedMonitoring.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/EnableEnhancedMonitoringInput\ntype EnableEnhancedMonitoringInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// List of shard-level metrics to enable.\n\t//\n\t// The following are the valid shard-level metrics. The value \"ALL\" enables\n\t// every metric.\n\t//\n\t//    * IncomingBytes\n\t//\n\t//    * IncomingRecords\n\t//\n\t//    * OutgoingBytes\n\t//\n\t//    * OutgoingRecords\n\t//\n\t//    * WriteProvisionedThroughputExceeded\n\t//\n\t//    * ReadProvisionedThroughputExceeded\n\t//\n\t//    * IteratorAgeMilliseconds\n\t//\n\t//    * ALL\n\t//\n\t// For more information, see Monitoring the Amazon Kinesis Streams Service with\n\t// Amazon CloudWatch (http://docs.aws.amazon.com/kinesis/latest/dev/monitoring-with-cloudwatch.html)\n\t// in the Amazon Kinesis Streams Developer Guide.\n\t//\n\t// ShardLevelMetrics is a required field\n\tShardLevelMetrics []*string `min:\"1\" type:\"list\" required:\"true\"`\n\n\t// The name of the stream for which to enable enhanced monitoring.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s EnableEnhancedMonitoringInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s EnableEnhancedMonitoringInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *EnableEnhancedMonitoringInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"EnableEnhancedMonitoringInput\"}\n\tif s.ShardLevelMetrics == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardLevelMetrics\"))\n\t}\n\tif s.ShardLevelMetrics != nil && len(s.ShardLevelMetrics) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardLevelMetrics\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetShardLevelMetrics sets the ShardLevelMetrics field's value.\nfunc (s *EnableEnhancedMonitoringInput) SetShardLevelMetrics(v []*string) *EnableEnhancedMonitoringInput {\n\ts.ShardLevelMetrics = v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *EnableEnhancedMonitoringInput) SetStreamName(v string) *EnableEnhancedMonitoringInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents enhanced metrics types.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/EnhancedMetrics\ntype EnhancedMetrics struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// List of shard-level metrics.\n\t//\n\t// The following are the valid shard-level metrics. The value \"ALL\" enhances\n\t// every metric.\n\t//\n\t//    * IncomingBytes\n\t//\n\t//    * IncomingRecords\n\t//\n\t//    * OutgoingBytes\n\t//\n\t//    * OutgoingRecords\n\t//\n\t//    * WriteProvisionedThroughputExceeded\n\t//\n\t//    * ReadProvisionedThroughputExceeded\n\t//\n\t//    * IteratorAgeMilliseconds\n\t//\n\t//    * ALL\n\t//\n\t// For more information, see Monitoring the Amazon Kinesis Streams Service with\n\t// Amazon CloudWatch (http://docs.aws.amazon.com/kinesis/latest/dev/monitoring-with-cloudwatch.html)\n\t// in the Amazon Kinesis Streams Developer Guide.\n\tShardLevelMetrics []*string `min:\"1\" type:\"list\"`\n}\n\n// String returns the string representation\nfunc (s EnhancedMetrics) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s EnhancedMetrics) GoString() string {\n\treturn s.String()\n}\n\n// SetShardLevelMetrics sets the ShardLevelMetrics field's value.\nfunc (s *EnhancedMetrics) SetShardLevelMetrics(v []*string) *EnhancedMetrics {\n\ts.ShardLevelMetrics = v\n\treturn s\n}\n\n// Represents the output for EnableEnhancedMonitoring and DisableEnhancedMonitoring.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/EnhancedMonitoringOutput\ntype EnhancedMonitoringOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Represents the current state of the metrics that are in the enhanced state\n\t// before the operation.\n\tCurrentShardLevelMetrics []*string `min:\"1\" type:\"list\"`\n\n\t// Represents the list of all the metrics that would be in the enhanced state\n\t// after the operation.\n\tDesiredShardLevelMetrics []*string `min:\"1\" type:\"list\"`\n\n\t// The name of the Amazon Kinesis stream.\n\tStreamName *string `min:\"1\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s EnhancedMonitoringOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s EnhancedMonitoringOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCurrentShardLevelMetrics sets the CurrentShardLevelMetrics field's value.\nfunc (s *EnhancedMonitoringOutput) SetCurrentShardLevelMetrics(v []*string) *EnhancedMonitoringOutput {\n\ts.CurrentShardLevelMetrics = v\n\treturn s\n}\n\n// SetDesiredShardLevelMetrics sets the DesiredShardLevelMetrics field's value.\nfunc (s *EnhancedMonitoringOutput) SetDesiredShardLevelMetrics(v []*string) *EnhancedMonitoringOutput {\n\ts.DesiredShardLevelMetrics = v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *EnhancedMonitoringOutput) SetStreamName(v string) *EnhancedMonitoringOutput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents the input for GetRecords.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetRecordsInput\ntype GetRecordsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The maximum number of records to return. Specify a value of up to 10,000.\n\t// If you specify a value that is greater than 10,000, GetRecords throws InvalidArgumentException.\n\tLimit *int64 `min:\"1\" type:\"integer\"`\n\n\t// The position in the shard from which you want to start sequentially reading\n\t// data records. A shard iterator specifies this position using the sequence\n\t// number of a data record in the shard.\n\t//\n\t// ShardIterator is a required field\n\tShardIterator *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetRecordsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetRecordsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetRecordsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetRecordsInput\"}\n\tif s.Limit != nil && *s.Limit < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"Limit\", 1))\n\t}\n\tif s.ShardIterator == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardIterator\"))\n\t}\n\tif s.ShardIterator != nil && len(*s.ShardIterator) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardIterator\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetLimit sets the Limit field's value.\nfunc (s *GetRecordsInput) SetLimit(v int64) *GetRecordsInput {\n\ts.Limit = &v\n\treturn s\n}\n\n// SetShardIterator sets the ShardIterator field's value.\nfunc (s *GetRecordsInput) SetShardIterator(v string) *GetRecordsInput {\n\ts.ShardIterator = &v\n\treturn s\n}\n\n// Represents the output for GetRecords.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetRecordsOutput\ntype GetRecordsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The number of milliseconds the GetRecords response is from the tip of the\n\t// stream, indicating how far behind current time the consumer is. A value of\n\t// zero indicates record processing is caught up, and there are no new records\n\t// to process at this moment.\n\tMillisBehindLatest *int64 `type:\"long\"`\n\n\t// The next position in the shard from which to start sequentially reading data\n\t// records. If set to null, the shard has been closed and the requested iterator\n\t// will not return any more data.\n\tNextShardIterator *string `min:\"1\" type:\"string\"`\n\n\t// The data records retrieved from the shard.\n\t//\n\t// Records is a required field\n\tRecords []*Record `type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetRecordsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetRecordsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetMillisBehindLatest sets the MillisBehindLatest field's value.\nfunc (s *GetRecordsOutput) SetMillisBehindLatest(v int64) *GetRecordsOutput {\n\ts.MillisBehindLatest = &v\n\treturn s\n}\n\n// SetNextShardIterator sets the NextShardIterator field's value.\nfunc (s *GetRecordsOutput) SetNextShardIterator(v string) *GetRecordsOutput {\n\ts.NextShardIterator = &v\n\treturn s\n}\n\n// SetRecords sets the Records field's value.\nfunc (s *GetRecordsOutput) SetRecords(v []*Record) *GetRecordsOutput {\n\ts.Records = v\n\treturn s\n}\n\n// Represents the input for GetShardIterator.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetShardIteratorInput\ntype GetShardIteratorInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The shard ID of the Amazon Kinesis shard to get the iterator for.\n\t//\n\t// ShardId is a required field\n\tShardId *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Determines how the shard iterator is used to start reading data records from\n\t// the shard.\n\t//\n\t// The following are the valid Amazon Kinesis shard iterator types:\n\t//\n\t//    * AT_SEQUENCE_NUMBER - Start reading from the position denoted by a specific\n\t//    sequence number, provided in the value StartingSequenceNumber.\n\t//\n\t//    * AFTER_SEQUENCE_NUMBER - Start reading right after the position denoted\n\t//    by a specific sequence number, provided in the value StartingSequenceNumber.\n\t//\n\t//    * AT_TIMESTAMP - Start reading from the position denoted by a specific\n\t//    timestamp, provided in the value Timestamp.\n\t//\n\t//    * TRIM_HORIZON - Start reading at the last untrimmed record in the shard\n\t//    in the system, which is the oldest data record in the shard.\n\t//\n\t//    * LATEST - Start reading just after the most recent record in the shard,\n\t//    so that you always read the most recent data in the shard.\n\t//\n\t// ShardIteratorType is a required field\n\tShardIteratorType *string `type:\"string\" required:\"true\" enum:\"ShardIteratorType\"`\n\n\t// The sequence number of the data record in the shard from which to start reading.\n\t// Used with shard iterator type AT_SEQUENCE_NUMBER and AFTER_SEQUENCE_NUMBER.\n\tStartingSequenceNumber *string `type:\"string\"`\n\n\t// The name of the Amazon Kinesis stream.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The timestamp of the data record from which to start reading. Used with shard\n\t// iterator type AT_TIMESTAMP. A timestamp is the Unix epoch date with precision\n\t// in milliseconds. For example, 2016-04-04T19:58:46.480-00:00 or 1459799926.480.\n\t// If a record with this exact timestamp does not exist, the iterator returned\n\t// is for the next (later) record. If the timestamp is older than the current\n\t// trim horizon, the iterator returned is for the oldest untrimmed data record\n\t// (TRIM_HORIZON).\n\tTimestamp *time.Time `type:\"timestamp\" timestampFormat:\"unix\"`\n}\n\n// String returns the string representation\nfunc (s GetShardIteratorInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetShardIteratorInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetShardIteratorInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetShardIteratorInput\"}\n\tif s.ShardId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardId\"))\n\t}\n\tif s.ShardId != nil && len(*s.ShardId) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardId\", 1))\n\t}\n\tif s.ShardIteratorType == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardIteratorType\"))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetShardId sets the ShardId field's value.\nfunc (s *GetShardIteratorInput) SetShardId(v string) *GetShardIteratorInput {\n\ts.ShardId = &v\n\treturn s\n}\n\n// SetShardIteratorType sets the ShardIteratorType field's value.\nfunc (s *GetShardIteratorInput) SetShardIteratorType(v string) *GetShardIteratorInput {\n\ts.ShardIteratorType = &v\n\treturn s\n}\n\n// SetStartingSequenceNumber sets the StartingSequenceNumber field's value.\nfunc (s *GetShardIteratorInput) SetStartingSequenceNumber(v string) *GetShardIteratorInput {\n\ts.StartingSequenceNumber = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *GetShardIteratorInput) SetStreamName(v string) *GetShardIteratorInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetTimestamp sets the Timestamp field's value.\nfunc (s *GetShardIteratorInput) SetTimestamp(v time.Time) *GetShardIteratorInput {\n\ts.Timestamp = &v\n\treturn s\n}\n\n// Represents the output for GetShardIterator.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/GetShardIteratorOutput\ntype GetShardIteratorOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The position in the shard from which to start reading data records sequentially.\n\t// A shard iterator specifies this position using the sequence number of a data\n\t// record in a shard.\n\tShardIterator *string `min:\"1\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetShardIteratorOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetShardIteratorOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetShardIterator sets the ShardIterator field's value.\nfunc (s *GetShardIteratorOutput) SetShardIterator(v string) *GetShardIteratorOutput {\n\ts.ShardIterator = &v\n\treturn s\n}\n\n// The range of possible hash key values for the shard, which is a set of ordered\n// contiguous positive integers.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/HashKeyRange\ntype HashKeyRange struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The ending hash key of the hash key range.\n\t//\n\t// EndingHashKey is a required field\n\tEndingHashKey *string `type:\"string\" required:\"true\"`\n\n\t// The starting hash key of the hash key range.\n\t//\n\t// StartingHashKey is a required field\n\tStartingHashKey *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s HashKeyRange) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s HashKeyRange) GoString() string {\n\treturn s.String()\n}\n\n// SetEndingHashKey sets the EndingHashKey field's value.\nfunc (s *HashKeyRange) SetEndingHashKey(v string) *HashKeyRange {\n\ts.EndingHashKey = &v\n\treturn s\n}\n\n// SetStartingHashKey sets the StartingHashKey field's value.\nfunc (s *HashKeyRange) SetStartingHashKey(v string) *HashKeyRange {\n\ts.StartingHashKey = &v\n\treturn s\n}\n\n// Represents the input for IncreaseStreamRetentionPeriod.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/IncreaseStreamRetentionPeriodInput\ntype IncreaseStreamRetentionPeriodInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The new retention period of the stream, in hours. Must be more than the current\n\t// retention period.\n\t//\n\t// RetentionPeriodHours is a required field\n\tRetentionPeriodHours *int64 `min:\"1\" type:\"integer\" required:\"true\"`\n\n\t// The name of the stream to modify.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s IncreaseStreamRetentionPeriodInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s IncreaseStreamRetentionPeriodInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *IncreaseStreamRetentionPeriodInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"IncreaseStreamRetentionPeriodInput\"}\n\tif s.RetentionPeriodHours == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RetentionPeriodHours\"))\n\t}\n\tif s.RetentionPeriodHours != nil && *s.RetentionPeriodHours < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"RetentionPeriodHours\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRetentionPeriodHours sets the RetentionPeriodHours field's value.\nfunc (s *IncreaseStreamRetentionPeriodInput) SetRetentionPeriodHours(v int64) *IncreaseStreamRetentionPeriodInput {\n\ts.RetentionPeriodHours = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *IncreaseStreamRetentionPeriodInput) SetStreamName(v string) *IncreaseStreamRetentionPeriodInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/IncreaseStreamRetentionPeriodOutput\ntype IncreaseStreamRetentionPeriodOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s IncreaseStreamRetentionPeriodOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s IncreaseStreamRetentionPeriodOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the input for ListStreams.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListStreamsInput\ntype ListStreamsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the stream to start the list with.\n\tExclusiveStartStreamName *string `min:\"1\" type:\"string\"`\n\n\t// The maximum number of streams to list.\n\tLimit *int64 `min:\"1\" type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s ListStreamsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListStreamsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListStreamsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListStreamsInput\"}\n\tif s.ExclusiveStartStreamName != nil && len(*s.ExclusiveStartStreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ExclusiveStartStreamName\", 1))\n\t}\n\tif s.Limit != nil && *s.Limit < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"Limit\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetExclusiveStartStreamName sets the ExclusiveStartStreamName field's value.\nfunc (s *ListStreamsInput) SetExclusiveStartStreamName(v string) *ListStreamsInput {\n\ts.ExclusiveStartStreamName = &v\n\treturn s\n}\n\n// SetLimit sets the Limit field's value.\nfunc (s *ListStreamsInput) SetLimit(v int64) *ListStreamsInput {\n\ts.Limit = &v\n\treturn s\n}\n\n// Represents the output for ListStreams.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListStreamsOutput\ntype ListStreamsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If set to true, there are more streams available to list.\n\t//\n\t// HasMoreStreams is a required field\n\tHasMoreStreams *bool `type:\"boolean\" required:\"true\"`\n\n\t// The names of the streams that are associated with the AWS account making\n\t// the ListStreams request.\n\t//\n\t// StreamNames is a required field\n\tStreamNames []*string `type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListStreamsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListStreamsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetHasMoreStreams sets the HasMoreStreams field's value.\nfunc (s *ListStreamsOutput) SetHasMoreStreams(v bool) *ListStreamsOutput {\n\ts.HasMoreStreams = &v\n\treturn s\n}\n\n// SetStreamNames sets the StreamNames field's value.\nfunc (s *ListStreamsOutput) SetStreamNames(v []*string) *ListStreamsOutput {\n\ts.StreamNames = v\n\treturn s\n}\n\n// Represents the input for ListTagsForStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListTagsForStreamInput\ntype ListTagsForStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The key to use as the starting point for the list of tags. If this parameter\n\t// is set, ListTagsForStream gets all tags that occur after ExclusiveStartTagKey.\n\tExclusiveStartTagKey *string `min:\"1\" type:\"string\"`\n\n\t// The number of tags to return. If this number is less than the total number\n\t// of tags associated with the stream, HasMoreTags is set to true. To list additional\n\t// tags, set ExclusiveStartTagKey to the last key in the response.\n\tLimit *int64 `min:\"1\" type:\"integer\"`\n\n\t// The name of the stream.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListTagsForStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListTagsForStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListTagsForStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListTagsForStreamInput\"}\n\tif s.ExclusiveStartTagKey != nil && len(*s.ExclusiveStartTagKey) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ExclusiveStartTagKey\", 1))\n\t}\n\tif s.Limit != nil && *s.Limit < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"Limit\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetExclusiveStartTagKey sets the ExclusiveStartTagKey field's value.\nfunc (s *ListTagsForStreamInput) SetExclusiveStartTagKey(v string) *ListTagsForStreamInput {\n\ts.ExclusiveStartTagKey = &v\n\treturn s\n}\n\n// SetLimit sets the Limit field's value.\nfunc (s *ListTagsForStreamInput) SetLimit(v int64) *ListTagsForStreamInput {\n\ts.Limit = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *ListTagsForStreamInput) SetStreamName(v string) *ListTagsForStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents the output for ListTagsForStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/ListTagsForStreamOutput\ntype ListTagsForStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If set to true, more tags are available. To request additional tags, set\n\t// ExclusiveStartTagKey to the key of the last tag returned.\n\t//\n\t// HasMoreTags is a required field\n\tHasMoreTags *bool `type:\"boolean\" required:\"true\"`\n\n\t// A list of tags associated with StreamName, starting with the first tag after\n\t// ExclusiveStartTagKey and up to the specified Limit.\n\t//\n\t// Tags is a required field\n\tTags []*Tag `type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListTagsForStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListTagsForStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetHasMoreTags sets the HasMoreTags field's value.\nfunc (s *ListTagsForStreamOutput) SetHasMoreTags(v bool) *ListTagsForStreamOutput {\n\ts.HasMoreTags = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *ListTagsForStreamOutput) SetTags(v []*Tag) *ListTagsForStreamOutput {\n\ts.Tags = v\n\treturn s\n}\n\n// Represents the input for MergeShards.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/MergeShardsInput\ntype MergeShardsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The shard ID of the adjacent shard for the merge.\n\t//\n\t// AdjacentShardToMerge is a required field\n\tAdjacentShardToMerge *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The shard ID of the shard to combine with the adjacent shard for the merge.\n\t//\n\t// ShardToMerge is a required field\n\tShardToMerge *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The name of the stream for the merge.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s MergeShardsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MergeShardsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *MergeShardsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"MergeShardsInput\"}\n\tif s.AdjacentShardToMerge == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"AdjacentShardToMerge\"))\n\t}\n\tif s.AdjacentShardToMerge != nil && len(*s.AdjacentShardToMerge) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"AdjacentShardToMerge\", 1))\n\t}\n\tif s.ShardToMerge == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardToMerge\"))\n\t}\n\tif s.ShardToMerge != nil && len(*s.ShardToMerge) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardToMerge\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAdjacentShardToMerge sets the AdjacentShardToMerge field's value.\nfunc (s *MergeShardsInput) SetAdjacentShardToMerge(v string) *MergeShardsInput {\n\ts.AdjacentShardToMerge = &v\n\treturn s\n}\n\n// SetShardToMerge sets the ShardToMerge field's value.\nfunc (s *MergeShardsInput) SetShardToMerge(v string) *MergeShardsInput {\n\ts.ShardToMerge = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *MergeShardsInput) SetStreamName(v string) *MergeShardsInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/MergeShardsOutput\ntype MergeShardsOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s MergeShardsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MergeShardsOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the input for PutRecord.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordInput\ntype PutRecordInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The data blob to put into the record, which is base64-encoded when the blob\n\t// is serialized. When the data blob (the payload before base64-encoding) is\n\t// added to the partition key size, the total size must not exceed the maximum\n\t// record size (1 MB).\n\t//\n\t// Data is automatically base64 encoded/decoded by the SDK.\n\t//\n\t// Data is a required field\n\tData []byte `type:\"blob\" required:\"true\"`\n\n\t// The hash value used to explicitly determine the shard the data record is\n\t// assigned to by overriding the partition key hash.\n\tExplicitHashKey *string `type:\"string\"`\n\n\t// Determines which shard in the stream the data record is assigned to. Partition\n\t// keys are Unicode strings with a maximum length limit of 256 characters for\n\t// each key. Amazon Kinesis uses the partition key as input to a hash function\n\t// that maps the partition key and associated data to a specific shard. Specifically,\n\t// an MD5 hash function is used to map partition keys to 128-bit integer values\n\t// and to map associated data records to shards. As a result of this hashing\n\t// mechanism, all data records with the same partition key map to the same shard\n\t// within the stream.\n\t//\n\t// PartitionKey is a required field\n\tPartitionKey *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Guarantees strictly increasing sequence numbers, for puts from the same client\n\t// and to the same partition key. Usage: set the SequenceNumberForOrdering of\n\t// record n to the sequence number of record n-1 (as returned in the result\n\t// when putting record n-1). If this parameter is not set, records will be coarsely\n\t// ordered based on arrival time.\n\tSequenceNumberForOrdering *string `type:\"string\"`\n\n\t// The name of the stream to put the data record into.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutRecordInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutRecordInput\"}\n\tif s.Data == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Data\"))\n\t}\n\tif s.PartitionKey == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PartitionKey\"))\n\t}\n\tif s.PartitionKey != nil && len(*s.PartitionKey) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"PartitionKey\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetData sets the Data field's value.\nfunc (s *PutRecordInput) SetData(v []byte) *PutRecordInput {\n\ts.Data = v\n\treturn s\n}\n\n// SetExplicitHashKey sets the ExplicitHashKey field's value.\nfunc (s *PutRecordInput) SetExplicitHashKey(v string) *PutRecordInput {\n\ts.ExplicitHashKey = &v\n\treturn s\n}\n\n// SetPartitionKey sets the PartitionKey field's value.\nfunc (s *PutRecordInput) SetPartitionKey(v string) *PutRecordInput {\n\ts.PartitionKey = &v\n\treturn s\n}\n\n// SetSequenceNumberForOrdering sets the SequenceNumberForOrdering field's value.\nfunc (s *PutRecordInput) SetSequenceNumberForOrdering(v string) *PutRecordInput {\n\ts.SequenceNumberForOrdering = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *PutRecordInput) SetStreamName(v string) *PutRecordInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Represents the output for PutRecord.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordOutput\ntype PutRecordOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The sequence number identifier that was assigned to the put data record.\n\t// The sequence number for the record is unique across all records in the stream.\n\t// A sequence number is the identifier associated with every record put into\n\t// the stream.\n\t//\n\t// SequenceNumber is a required field\n\tSequenceNumber *string `type:\"string\" required:\"true\"`\n\n\t// The shard ID of the shard where the data record was placed.\n\t//\n\t// ShardId is a required field\n\tShardId *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetSequenceNumber sets the SequenceNumber field's value.\nfunc (s *PutRecordOutput) SetSequenceNumber(v string) *PutRecordOutput {\n\ts.SequenceNumber = &v\n\treturn s\n}\n\n// SetShardId sets the ShardId field's value.\nfunc (s *PutRecordOutput) SetShardId(v string) *PutRecordOutput {\n\ts.ShardId = &v\n\treturn s\n}\n\n// A PutRecords request.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordsInput\ntype PutRecordsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The records associated with the request.\n\t//\n\t// Records is a required field\n\tRecords []*PutRecordsRequestEntry `min:\"1\" type:\"list\" required:\"true\"`\n\n\t// The stream name associated with the request.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutRecordsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutRecordsInput\"}\n\tif s.Records == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Records\"))\n\t}\n\tif s.Records != nil && len(s.Records) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Records\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\tif s.Records != nil {\n\t\tfor i, v := range s.Records {\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]\", \"Records\", 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// SetRecords sets the Records field's value.\nfunc (s *PutRecordsInput) SetRecords(v []*PutRecordsRequestEntry) *PutRecordsInput {\n\ts.Records = v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *PutRecordsInput) SetStreamName(v string) *PutRecordsInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// PutRecords results.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordsOutput\ntype PutRecordsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The number of unsuccessfully processed records in a PutRecords request.\n\tFailedRecordCount *int64 `min:\"1\" type:\"integer\"`\n\n\t// An array of successfully and unsuccessfully processed record results, correlated\n\t// with the request by natural ordering. A record that is successfully added\n\t// to a stream includes SequenceNumber and ShardId in the result. A record that\n\t// fails to be added to a stream includes ErrorCode and ErrorMessage in the\n\t// result.\n\t//\n\t// Records is a required field\n\tRecords []*PutRecordsResultEntry `min:\"1\" type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetFailedRecordCount sets the FailedRecordCount field's value.\nfunc (s *PutRecordsOutput) SetFailedRecordCount(v int64) *PutRecordsOutput {\n\ts.FailedRecordCount = &v\n\treturn s\n}\n\n// SetRecords sets the Records field's value.\nfunc (s *PutRecordsOutput) SetRecords(v []*PutRecordsResultEntry) *PutRecordsOutput {\n\ts.Records = v\n\treturn s\n}\n\n// Represents the output for PutRecords.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordsRequestEntry\ntype PutRecordsRequestEntry struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The data blob to put into the record, which is base64-encoded when the blob\n\t// is serialized. When the data blob (the payload before base64-encoding) is\n\t// added to the partition key size, the total size must not exceed the maximum\n\t// record size (1 MB).\n\t//\n\t// Data is automatically base64 encoded/decoded by the SDK.\n\t//\n\t// Data is a required field\n\tData []byte `type:\"blob\" required:\"true\"`\n\n\t// The hash value used to determine explicitly the shard that the data record\n\t// is assigned to by overriding the partition key hash.\n\tExplicitHashKey *string `type:\"string\"`\n\n\t// Determines which shard in the stream the data record is assigned to. Partition\n\t// keys are Unicode strings with a maximum length limit of 256 characters for\n\t// each key. Amazon Kinesis uses the partition key as input to a hash function\n\t// that maps the partition key and associated data to a specific shard. Specifically,\n\t// an MD5 hash function is used to map partition keys to 128-bit integer values\n\t// and to map associated data records to shards. As a result of this hashing\n\t// mechanism, all data records with the same partition key map to the same shard\n\t// within the stream.\n\t//\n\t// PartitionKey is a required field\n\tPartitionKey *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordsRequestEntry) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordsRequestEntry) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutRecordsRequestEntry) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutRecordsRequestEntry\"}\n\tif s.Data == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Data\"))\n\t}\n\tif s.PartitionKey == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PartitionKey\"))\n\t}\n\tif s.PartitionKey != nil && len(*s.PartitionKey) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"PartitionKey\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetData sets the Data field's value.\nfunc (s *PutRecordsRequestEntry) SetData(v []byte) *PutRecordsRequestEntry {\n\ts.Data = v\n\treturn s\n}\n\n// SetExplicitHashKey sets the ExplicitHashKey field's value.\nfunc (s *PutRecordsRequestEntry) SetExplicitHashKey(v string) *PutRecordsRequestEntry {\n\ts.ExplicitHashKey = &v\n\treturn s\n}\n\n// SetPartitionKey sets the PartitionKey field's value.\nfunc (s *PutRecordsRequestEntry) SetPartitionKey(v string) *PutRecordsRequestEntry {\n\ts.PartitionKey = &v\n\treturn s\n}\n\n// Represents the result of an individual record from a PutRecords request.\n// A record that is successfully added to a stream includes SequenceNumber and\n// ShardId in the result. A record that fails to be added to the stream includes\n// ErrorCode and ErrorMessage in the result.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/PutRecordsResultEntry\ntype PutRecordsResultEntry struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The error code for an individual record result. ErrorCodes can be either\n\t// ProvisionedThroughputExceededException or InternalFailure.\n\tErrorCode *string `type:\"string\"`\n\n\t// The error message for an individual record result. An ErrorCode value of\n\t// ProvisionedThroughputExceededException has an error message that includes\n\t// the account ID, stream name, and shard ID. An ErrorCode value of InternalFailure\n\t// has the error message \"Internal Service Failure\".\n\tErrorMessage *string `type:\"string\"`\n\n\t// The sequence number for an individual record result.\n\tSequenceNumber *string `type:\"string\"`\n\n\t// The shard ID for an individual record result.\n\tShardId *string `min:\"1\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutRecordsResultEntry) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutRecordsResultEntry) GoString() string {\n\treturn s.String()\n}\n\n// SetErrorCode sets the ErrorCode field's value.\nfunc (s *PutRecordsResultEntry) SetErrorCode(v string) *PutRecordsResultEntry {\n\ts.ErrorCode = &v\n\treturn s\n}\n\n// SetErrorMessage sets the ErrorMessage field's value.\nfunc (s *PutRecordsResultEntry) SetErrorMessage(v string) *PutRecordsResultEntry {\n\ts.ErrorMessage = &v\n\treturn s\n}\n\n// SetSequenceNumber sets the SequenceNumber field's value.\nfunc (s *PutRecordsResultEntry) SetSequenceNumber(v string) *PutRecordsResultEntry {\n\ts.SequenceNumber = &v\n\treturn s\n}\n\n// SetShardId sets the ShardId field's value.\nfunc (s *PutRecordsResultEntry) SetShardId(v string) *PutRecordsResultEntry {\n\ts.ShardId = &v\n\treturn s\n}\n\n// The unit of data of the Amazon Kinesis stream, which is composed of a sequence\n// number, a partition key, and a data blob.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/Record\ntype Record struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The approximate time that the record was inserted into the stream.\n\tApproximateArrivalTimestamp *time.Time `type:\"timestamp\" timestampFormat:\"unix\"`\n\n\t// The data blob. The data in the blob is both opaque and immutable to the Amazon\n\t// Kinesis service, which does not inspect, interpret, or change the data in\n\t// the blob in any way. When the data blob (the payload before base64-encoding)\n\t// is added to the partition key size, the total size must not exceed the maximum\n\t// record size (1 MB).\n\t//\n\t// Data is automatically base64 encoded/decoded by the SDK.\n\t//\n\t// Data is a required field\n\tData []byte `type:\"blob\" required:\"true\"`\n\n\t// Identifies which shard in the stream the data record is assigned to.\n\t//\n\t// PartitionKey is a required field\n\tPartitionKey *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The unique identifier of the record in the stream.\n\t//\n\t// SequenceNumber is a required field\n\tSequenceNumber *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Record) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Record) GoString() string {\n\treturn s.String()\n}\n\n// SetApproximateArrivalTimestamp sets the ApproximateArrivalTimestamp field's value.\nfunc (s *Record) SetApproximateArrivalTimestamp(v time.Time) *Record {\n\ts.ApproximateArrivalTimestamp = &v\n\treturn s\n}\n\n// SetData sets the Data field's value.\nfunc (s *Record) SetData(v []byte) *Record {\n\ts.Data = v\n\treturn s\n}\n\n// SetPartitionKey sets the PartitionKey field's value.\nfunc (s *Record) SetPartitionKey(v string) *Record {\n\ts.PartitionKey = &v\n\treturn s\n}\n\n// SetSequenceNumber sets the SequenceNumber field's value.\nfunc (s *Record) SetSequenceNumber(v string) *Record {\n\ts.SequenceNumber = &v\n\treturn s\n}\n\n// Represents the input for RemoveTagsFromStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/RemoveTagsFromStreamInput\ntype RemoveTagsFromStreamInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the stream.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// A list of tag keys. Each corresponding tag is removed from the stream.\n\t//\n\t// TagKeys is a required field\n\tTagKeys []*string `min:\"1\" type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s RemoveTagsFromStreamInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RemoveTagsFromStreamInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RemoveTagsFromStreamInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RemoveTagsFromStreamInput\"}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\tif s.TagKeys == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TagKeys\"))\n\t}\n\tif s.TagKeys != nil && len(s.TagKeys) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"TagKeys\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *RemoveTagsFromStreamInput) SetStreamName(v string) *RemoveTagsFromStreamInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetTagKeys sets the TagKeys field's value.\nfunc (s *RemoveTagsFromStreamInput) SetTagKeys(v []*string) *RemoveTagsFromStreamInput {\n\ts.TagKeys = v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/RemoveTagsFromStreamOutput\ntype RemoveTagsFromStreamOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s RemoveTagsFromStreamOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RemoveTagsFromStreamOutput) GoString() string {\n\treturn s.String()\n}\n\n// The range of possible sequence numbers for the shard.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/SequenceNumberRange\ntype SequenceNumberRange struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The ending sequence number for the range. Shards that are in the OPEN state\n\t// have an ending sequence number of null.\n\tEndingSequenceNumber *string `type:\"string\"`\n\n\t// The starting sequence number for the range.\n\t//\n\t// StartingSequenceNumber is a required field\n\tStartingSequenceNumber *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s SequenceNumberRange) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SequenceNumberRange) GoString() string {\n\treturn s.String()\n}\n\n// SetEndingSequenceNumber sets the EndingSequenceNumber field's value.\nfunc (s *SequenceNumberRange) SetEndingSequenceNumber(v string) *SequenceNumberRange {\n\ts.EndingSequenceNumber = &v\n\treturn s\n}\n\n// SetStartingSequenceNumber sets the StartingSequenceNumber field's value.\nfunc (s *SequenceNumberRange) SetStartingSequenceNumber(v string) *SequenceNumberRange {\n\ts.StartingSequenceNumber = &v\n\treturn s\n}\n\n// A uniquely identified group of data records in an Amazon Kinesis stream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/Shard\ntype Shard struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The shard ID of the shard adjacent to the shard's parent.\n\tAdjacentParentShardId *string `min:\"1\" type:\"string\"`\n\n\t// The range of possible hash key values for the shard, which is a set of ordered\n\t// contiguous positive integers.\n\t//\n\t// HashKeyRange is a required field\n\tHashKeyRange *HashKeyRange `type:\"structure\" required:\"true\"`\n\n\t// The shard ID of the shard's parent.\n\tParentShardId *string `min:\"1\" type:\"string\"`\n\n\t// The range of possible sequence numbers for the shard.\n\t//\n\t// SequenceNumberRange is a required field\n\tSequenceNumberRange *SequenceNumberRange `type:\"structure\" required:\"true\"`\n\n\t// The unique identifier of the shard within the stream.\n\t//\n\t// ShardId is a required field\n\tShardId *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Shard) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Shard) GoString() string {\n\treturn s.String()\n}\n\n// SetAdjacentParentShardId sets the AdjacentParentShardId field's value.\nfunc (s *Shard) SetAdjacentParentShardId(v string) *Shard {\n\ts.AdjacentParentShardId = &v\n\treturn s\n}\n\n// SetHashKeyRange sets the HashKeyRange field's value.\nfunc (s *Shard) SetHashKeyRange(v *HashKeyRange) *Shard {\n\ts.HashKeyRange = v\n\treturn s\n}\n\n// SetParentShardId sets the ParentShardId field's value.\nfunc (s *Shard) SetParentShardId(v string) *Shard {\n\ts.ParentShardId = &v\n\treturn s\n}\n\n// SetSequenceNumberRange sets the SequenceNumberRange field's value.\nfunc (s *Shard) SetSequenceNumberRange(v *SequenceNumberRange) *Shard {\n\ts.SequenceNumberRange = v\n\treturn s\n}\n\n// SetShardId sets the ShardId field's value.\nfunc (s *Shard) SetShardId(v string) *Shard {\n\ts.ShardId = &v\n\treturn s\n}\n\n// Represents the input for SplitShard.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/SplitShardInput\ntype SplitShardInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A hash key value for the starting hash key of one of the child shards created\n\t// by the split. The hash key range for a given shard constitutes a set of ordered\n\t// contiguous positive integers. The value for NewStartingHashKey must be in\n\t// the range of hash keys being mapped into the shard. The NewStartingHashKey\n\t// hash key value and all higher hash key values in hash key range are distributed\n\t// to one of the child shards. All the lower hash key values in the range are\n\t// distributed to the other child shard.\n\t//\n\t// NewStartingHashKey is a required field\n\tNewStartingHashKey *string `type:\"string\" required:\"true\"`\n\n\t// The shard ID of the shard to split.\n\t//\n\t// ShardToSplit is a required field\n\tShardToSplit *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The name of the stream for the shard split.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s SplitShardInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SplitShardInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SplitShardInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SplitShardInput\"}\n\tif s.NewStartingHashKey == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"NewStartingHashKey\"))\n\t}\n\tif s.ShardToSplit == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ShardToSplit\"))\n\t}\n\tif s.ShardToSplit != nil && len(*s.ShardToSplit) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ShardToSplit\", 1))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetNewStartingHashKey sets the NewStartingHashKey field's value.\nfunc (s *SplitShardInput) SetNewStartingHashKey(v string) *SplitShardInput {\n\ts.NewStartingHashKey = &v\n\treturn s\n}\n\n// SetShardToSplit sets the ShardToSplit field's value.\nfunc (s *SplitShardInput) SetShardToSplit(v string) *SplitShardInput {\n\ts.ShardToSplit = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *SplitShardInput) SetStreamName(v string) *SplitShardInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/SplitShardOutput\ntype SplitShardOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s SplitShardOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SplitShardOutput) GoString() string {\n\treturn s.String()\n}\n\n// Represents the output for DescribeStream.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/StreamDescription\ntype StreamDescription struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Represents the current enhanced monitoring settings of the stream.\n\t//\n\t// EnhancedMonitoring is a required field\n\tEnhancedMonitoring []*EnhancedMetrics `type:\"list\" required:\"true\"`\n\n\t// If set to true, more shards in the stream are available to describe.\n\t//\n\t// HasMoreShards is a required field\n\tHasMoreShards *bool `type:\"boolean\" required:\"true\"`\n\n\t// The current retention period, in hours.\n\t//\n\t// RetentionPeriodHours is a required field\n\tRetentionPeriodHours *int64 `min:\"1\" type:\"integer\" required:\"true\"`\n\n\t// The shards that comprise the stream.\n\t//\n\t// Shards is a required field\n\tShards []*Shard `type:\"list\" required:\"true\"`\n\n\t// The Amazon Resource Name (ARN) for the stream being described.\n\t//\n\t// StreamARN is a required field\n\tStreamARN *string `type:\"string\" required:\"true\"`\n\n\t// The approximate time that the stream was created.\n\t//\n\t// StreamCreationTimestamp is a required field\n\tStreamCreationTimestamp *time.Time `type:\"timestamp\" timestampFormat:\"unix\" required:\"true\"`\n\n\t// The name of the stream being described.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The current status of the stream being described. The stream status is one\n\t// of the following states:\n\t//\n\t//    * CREATING - The stream is being created. Amazon Kinesis immediately returns\n\t//    and sets StreamStatus to CREATING.\n\t//\n\t//    * DELETING - The stream is being deleted. The specified stream is in the\n\t//    DELETING state until Amazon Kinesis completes the deletion.\n\t//\n\t//    * ACTIVE - The stream exists and is ready for read and write operations\n\t//    or deletion. You should perform read and write operations only on an ACTIVE\n\t//    stream.\n\t//\n\t//    * UPDATING - Shards in the stream are being merged or split. Read and\n\t//    write operations continue to work while the stream is in the UPDATING\n\t//    state.\n\t//\n\t// StreamStatus is a required field\n\tStreamStatus *string `type:\"string\" required:\"true\" enum:\"StreamStatus\"`\n}\n\n// String returns the string representation\nfunc (s StreamDescription) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s StreamDescription) GoString() string {\n\treturn s.String()\n}\n\n// SetEnhancedMonitoring sets the EnhancedMonitoring field's value.\nfunc (s *StreamDescription) SetEnhancedMonitoring(v []*EnhancedMetrics) *StreamDescription {\n\ts.EnhancedMonitoring = v\n\treturn s\n}\n\n// SetHasMoreShards sets the HasMoreShards field's value.\nfunc (s *StreamDescription) SetHasMoreShards(v bool) *StreamDescription {\n\ts.HasMoreShards = &v\n\treturn s\n}\n\n// SetRetentionPeriodHours sets the RetentionPeriodHours field's value.\nfunc (s *StreamDescription) SetRetentionPeriodHours(v int64) *StreamDescription {\n\ts.RetentionPeriodHours = &v\n\treturn s\n}\n\n// SetShards sets the Shards field's value.\nfunc (s *StreamDescription) SetShards(v []*Shard) *StreamDescription {\n\ts.Shards = v\n\treturn s\n}\n\n// SetStreamARN sets the StreamARN field's value.\nfunc (s *StreamDescription) SetStreamARN(v string) *StreamDescription {\n\ts.StreamARN = &v\n\treturn s\n}\n\n// SetStreamCreationTimestamp sets the StreamCreationTimestamp field's value.\nfunc (s *StreamDescription) SetStreamCreationTimestamp(v time.Time) *StreamDescription {\n\ts.StreamCreationTimestamp = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *StreamDescription) SetStreamName(v string) *StreamDescription {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetStreamStatus sets the StreamStatus field's value.\nfunc (s *StreamDescription) SetStreamStatus(v string) *StreamDescription {\n\ts.StreamStatus = &v\n\treturn s\n}\n\n// Metadata assigned to the stream, consisting of a key-value pair.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/Tag\ntype Tag struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A unique identifier for the tag. Maximum length: 128 characters. Valid characters:\n\t// Unicode letters, digits, white space, _ . / = + - % @\n\t//\n\t// Key is a required field\n\tKey *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// An optional string, typically used to describe or define the tag. Maximum\n\t// length: 256 characters. Valid characters: Unicode letters, digits, white\n\t// space, _ . / = + - % @\n\tValue *string `type:\"string\"`\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// 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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/UpdateShardCountInput\ntype UpdateShardCountInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The scaling type. Uniform scaling creates shards of equal size.\n\t//\n\t// ScalingType is a required field\n\tScalingType *string `type:\"string\" required:\"true\" enum:\"ScalingType\"`\n\n\t// The name of the stream.\n\t//\n\t// StreamName is a required field\n\tStreamName *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The new number of shards.\n\t//\n\t// TargetShardCount is a required field\n\tTargetShardCount *int64 `min:\"1\" type:\"integer\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s UpdateShardCountInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UpdateShardCountInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *UpdateShardCountInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"UpdateShardCountInput\"}\n\tif s.ScalingType == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ScalingType\"))\n\t}\n\tif s.StreamName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StreamName\"))\n\t}\n\tif s.StreamName != nil && len(*s.StreamName) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"StreamName\", 1))\n\t}\n\tif s.TargetShardCount == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TargetShardCount\"))\n\t}\n\tif s.TargetShardCount != nil && *s.TargetShardCount < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"TargetShardCount\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetScalingType sets the ScalingType field's value.\nfunc (s *UpdateShardCountInput) SetScalingType(v string) *UpdateShardCountInput {\n\ts.ScalingType = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *UpdateShardCountInput) SetStreamName(v string) *UpdateShardCountInput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetTargetShardCount sets the TargetShardCount field's value.\nfunc (s *UpdateShardCountInput) SetTargetShardCount(v int64) *UpdateShardCountInput {\n\ts.TargetShardCount = &v\n\treturn s\n}\n\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02/UpdateShardCountOutput\ntype UpdateShardCountOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The current number of shards.\n\tCurrentShardCount *int64 `min:\"1\" type:\"integer\"`\n\n\t// The name of the stream.\n\tStreamName *string `min:\"1\" type:\"string\"`\n\n\t// The updated number of shards.\n\tTargetShardCount *int64 `min:\"1\" type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s UpdateShardCountOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UpdateShardCountOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCurrentShardCount sets the CurrentShardCount field's value.\nfunc (s *UpdateShardCountOutput) SetCurrentShardCount(v int64) *UpdateShardCountOutput {\n\ts.CurrentShardCount = &v\n\treturn s\n}\n\n// SetStreamName sets the StreamName field's value.\nfunc (s *UpdateShardCountOutput) SetStreamName(v string) *UpdateShardCountOutput {\n\ts.StreamName = &v\n\treturn s\n}\n\n// SetTargetShardCount sets the TargetShardCount field's value.\nfunc (s *UpdateShardCountOutput) SetTargetShardCount(v int64) *UpdateShardCountOutput {\n\ts.TargetShardCount = &v\n\treturn s\n}\n\nconst (\n\t// MetricsNameIncomingBytes is a MetricsName enum value\n\tMetricsNameIncomingBytes = \"IncomingBytes\"\n\n\t// MetricsNameIncomingRecords is a MetricsName enum value\n\tMetricsNameIncomingRecords = \"IncomingRecords\"\n\n\t// MetricsNameOutgoingBytes is a MetricsName enum value\n\tMetricsNameOutgoingBytes = \"OutgoingBytes\"\n\n\t// MetricsNameOutgoingRecords is a MetricsName enum value\n\tMetricsNameOutgoingRecords = \"OutgoingRecords\"\n\n\t// MetricsNameWriteProvisionedThroughputExceeded is a MetricsName enum value\n\tMetricsNameWriteProvisionedThroughputExceeded = \"WriteProvisionedThroughputExceeded\"\n\n\t// MetricsNameReadProvisionedThroughputExceeded is a MetricsName enum value\n\tMetricsNameReadProvisionedThroughputExceeded = \"ReadProvisionedThroughputExceeded\"\n\n\t// MetricsNameIteratorAgeMilliseconds is a MetricsName enum value\n\tMetricsNameIteratorAgeMilliseconds = \"IteratorAgeMilliseconds\"\n\n\t// MetricsNameAll is a MetricsName enum value\n\tMetricsNameAll = \"ALL\"\n)\n\nconst (\n\t// ScalingTypeUniformScaling is a ScalingType enum value\n\tScalingTypeUniformScaling = \"UNIFORM_SCALING\"\n)\n\nconst (\n\t// ShardIteratorTypeAtSequenceNumber is a ShardIteratorType enum value\n\tShardIteratorTypeAtSequenceNumber = \"AT_SEQUENCE_NUMBER\"\n\n\t// ShardIteratorTypeAfterSequenceNumber is a ShardIteratorType enum value\n\tShardIteratorTypeAfterSequenceNumber = \"AFTER_SEQUENCE_NUMBER\"\n\n\t// ShardIteratorTypeTrimHorizon is a ShardIteratorType enum value\n\tShardIteratorTypeTrimHorizon = \"TRIM_HORIZON\"\n\n\t// ShardIteratorTypeLatest is a ShardIteratorType enum value\n\tShardIteratorTypeLatest = \"LATEST\"\n\n\t// ShardIteratorTypeAtTimestamp is a ShardIteratorType enum value\n\tShardIteratorTypeAtTimestamp = \"AT_TIMESTAMP\"\n)\n\nconst (\n\t// StreamStatusCreating is a StreamStatus enum value\n\tStreamStatusCreating = \"CREATING\"\n\n\t// StreamStatusDeleting is a StreamStatus enum value\n\tStreamStatusDeleting = \"DELETING\"\n\n\t// StreamStatusActive is a StreamStatus enum value\n\tStreamStatusActive = \"ACTIVE\"\n\n\t// StreamStatusUpdating is a StreamStatus enum value\n\tStreamStatusUpdating = \"UPDATING\"\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/customizations.go",
    "content": "package kinesis\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nvar readDuration = 5 * time.Second\n\nfunc init() {\n\tops := []string{\n\t\topGetRecords,\n\t}\n\tinitRequest = func(r *request.Request) {\n\t\tfor _, operation := range ops {\n\t\t\tif r.Operation.Name == operation {\n\t\t\t\tr.ApplyOptions(request.WithResponseReadTimeout(readDuration))\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/errors.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage kinesis\n\nconst (\n\n\t// ErrCodeExpiredIteratorException for service response error code\n\t// \"ExpiredIteratorException\".\n\t//\n\t// The provided iterator exceeds the maximum age allowed.\n\tErrCodeExpiredIteratorException = \"ExpiredIteratorException\"\n\n\t// ErrCodeInvalidArgumentException for service response error code\n\t// \"InvalidArgumentException\".\n\t//\n\t// A specified parameter exceeds its restrictions, is not supported, or can't\n\t// be used. For more information, see the returned message.\n\tErrCodeInvalidArgumentException = \"InvalidArgumentException\"\n\n\t// ErrCodeLimitExceededException for service response error code\n\t// \"LimitExceededException\".\n\t//\n\t// The requested resource exceeds the maximum number allowed, or the number\n\t// of concurrent stream requests exceeds the maximum number allowed (5).\n\tErrCodeLimitExceededException = \"LimitExceededException\"\n\n\t// ErrCodeProvisionedThroughputExceededException for service response error code\n\t// \"ProvisionedThroughputExceededException\".\n\t//\n\t// The request rate for the stream is too high, or the requested data is too\n\t// large for the available throughput. Reduce the frequency or size of your\n\t// requests. For more information, see Streams Limits (http://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html)\n\t// in the Amazon Kinesis Streams Developer Guide, and Error Retries and Exponential\n\t// Backoff in AWS (http://docs.aws.amazon.com/general/latest/gr/api-retries.html)\n\t// in the AWS General Reference.\n\tErrCodeProvisionedThroughputExceededException = \"ProvisionedThroughputExceededException\"\n\n\t// ErrCodeResourceInUseException for service response error code\n\t// \"ResourceInUseException\".\n\t//\n\t// The resource is not available for this operation. For successful operation,\n\t// the resource needs to be in the ACTIVE state.\n\tErrCodeResourceInUseException = \"ResourceInUseException\"\n\n\t// ErrCodeResourceNotFoundException for service response error code\n\t// \"ResourceNotFoundException\".\n\t//\n\t// The requested resource could not be found. The stream might not be specified\n\t// correctly.\n\tErrCodeResourceNotFoundException = \"ResourceNotFoundException\"\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/kinesisiface/interface.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\n// Package kinesisiface provides an interface to enable mocking the Amazon Kinesis service client\n// for testing your code.\n//\n// It is important to note that this interface will have breaking changes\n// when the service model is updated and adds new API operations, paginators,\n// and waiters.\npackage kinesisiface\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/service/kinesis\"\n)\n\n// KinesisAPI provides an interface to enable mocking the\n// kinesis.Kinesis service client's API operation,\n// paginators, and waiters. This make unit testing your code that calls out\n// to the SDK's service client's calls easier.\n//\n// The best way to use this interface is so the SDK's service client's calls\n// can be stubbed out for unit testing your code with the SDK without needing\n// to inject custom request handlers into the the SDK's request pipeline.\n//\n//    // myFunc uses an SDK service client to make a request to\n//    // Amazon Kinesis.\n//    func myFunc(svc kinesisiface.KinesisAPI) bool {\n//        // Make svc.AddTagsToStream request\n//    }\n//\n//    func main() {\n//        sess := session.New()\n//        svc := kinesis.New(sess)\n//\n//        myFunc(svc)\n//    }\n//\n// In your _test.go file:\n//\n//    // Define a mock struct to be used in your unit tests of myFunc.\n//    type mockKinesisClient struct {\n//        kinesisiface.KinesisAPI\n//    }\n//    func (m *mockKinesisClient) AddTagsToStream(input *kinesis.AddTagsToStreamInput) (*kinesis.AddTagsToStreamOutput, error) {\n//        // mock response/functionality\n//    }\n//\n//    func TestMyFunc(t *testing.T) {\n//        // Setup Test\n//        mockSvc := &mockKinesisClient{}\n//\n//        myfunc(mockSvc)\n//\n//        // Verify myFunc's functionality\n//    }\n//\n// It is important to note that this interface will have breaking changes\n// when the service model is updated and adds new API operations, paginators,\n// and waiters. Its suggested to use the pattern above for testing, or using\n// tooling to generate mocks to satisfy the interfaces.\ntype KinesisAPI interface {\n\tAddTagsToStream(*kinesis.AddTagsToStreamInput) (*kinesis.AddTagsToStreamOutput, error)\n\tAddTagsToStreamWithContext(aws.Context, *kinesis.AddTagsToStreamInput, ...request.Option) (*kinesis.AddTagsToStreamOutput, error)\n\tAddTagsToStreamRequest(*kinesis.AddTagsToStreamInput) (*request.Request, *kinesis.AddTagsToStreamOutput)\n\n\tCreateStream(*kinesis.CreateStreamInput) (*kinesis.CreateStreamOutput, error)\n\tCreateStreamWithContext(aws.Context, *kinesis.CreateStreamInput, ...request.Option) (*kinesis.CreateStreamOutput, error)\n\tCreateStreamRequest(*kinesis.CreateStreamInput) (*request.Request, *kinesis.CreateStreamOutput)\n\n\tDecreaseStreamRetentionPeriod(*kinesis.DecreaseStreamRetentionPeriodInput) (*kinesis.DecreaseStreamRetentionPeriodOutput, error)\n\tDecreaseStreamRetentionPeriodWithContext(aws.Context, *kinesis.DecreaseStreamRetentionPeriodInput, ...request.Option) (*kinesis.DecreaseStreamRetentionPeriodOutput, error)\n\tDecreaseStreamRetentionPeriodRequest(*kinesis.DecreaseStreamRetentionPeriodInput) (*request.Request, *kinesis.DecreaseStreamRetentionPeriodOutput)\n\n\tDeleteStream(*kinesis.DeleteStreamInput) (*kinesis.DeleteStreamOutput, error)\n\tDeleteStreamWithContext(aws.Context, *kinesis.DeleteStreamInput, ...request.Option) (*kinesis.DeleteStreamOutput, error)\n\tDeleteStreamRequest(*kinesis.DeleteStreamInput) (*request.Request, *kinesis.DeleteStreamOutput)\n\n\tDescribeLimits(*kinesis.DescribeLimitsInput) (*kinesis.DescribeLimitsOutput, error)\n\tDescribeLimitsWithContext(aws.Context, *kinesis.DescribeLimitsInput, ...request.Option) (*kinesis.DescribeLimitsOutput, error)\n\tDescribeLimitsRequest(*kinesis.DescribeLimitsInput) (*request.Request, *kinesis.DescribeLimitsOutput)\n\n\tDescribeStream(*kinesis.DescribeStreamInput) (*kinesis.DescribeStreamOutput, error)\n\tDescribeStreamWithContext(aws.Context, *kinesis.DescribeStreamInput, ...request.Option) (*kinesis.DescribeStreamOutput, error)\n\tDescribeStreamRequest(*kinesis.DescribeStreamInput) (*request.Request, *kinesis.DescribeStreamOutput)\n\n\tDescribeStreamPages(*kinesis.DescribeStreamInput, func(*kinesis.DescribeStreamOutput, bool) bool) error\n\tDescribeStreamPagesWithContext(aws.Context, *kinesis.DescribeStreamInput, func(*kinesis.DescribeStreamOutput, bool) bool, ...request.Option) error\n\n\tDisableEnhancedMonitoring(*kinesis.DisableEnhancedMonitoringInput) (*kinesis.EnhancedMonitoringOutput, error)\n\tDisableEnhancedMonitoringWithContext(aws.Context, *kinesis.DisableEnhancedMonitoringInput, ...request.Option) (*kinesis.EnhancedMonitoringOutput, error)\n\tDisableEnhancedMonitoringRequest(*kinesis.DisableEnhancedMonitoringInput) (*request.Request, *kinesis.EnhancedMonitoringOutput)\n\n\tEnableEnhancedMonitoring(*kinesis.EnableEnhancedMonitoringInput) (*kinesis.EnhancedMonitoringOutput, error)\n\tEnableEnhancedMonitoringWithContext(aws.Context, *kinesis.EnableEnhancedMonitoringInput, ...request.Option) (*kinesis.EnhancedMonitoringOutput, error)\n\tEnableEnhancedMonitoringRequest(*kinesis.EnableEnhancedMonitoringInput) (*request.Request, *kinesis.EnhancedMonitoringOutput)\n\n\tGetRecords(*kinesis.GetRecordsInput) (*kinesis.GetRecordsOutput, error)\n\tGetRecordsWithContext(aws.Context, *kinesis.GetRecordsInput, ...request.Option) (*kinesis.GetRecordsOutput, error)\n\tGetRecordsRequest(*kinesis.GetRecordsInput) (*request.Request, *kinesis.GetRecordsOutput)\n\n\tGetShardIterator(*kinesis.GetShardIteratorInput) (*kinesis.GetShardIteratorOutput, error)\n\tGetShardIteratorWithContext(aws.Context, *kinesis.GetShardIteratorInput, ...request.Option) (*kinesis.GetShardIteratorOutput, error)\n\tGetShardIteratorRequest(*kinesis.GetShardIteratorInput) (*request.Request, *kinesis.GetShardIteratorOutput)\n\n\tIncreaseStreamRetentionPeriod(*kinesis.IncreaseStreamRetentionPeriodInput) (*kinesis.IncreaseStreamRetentionPeriodOutput, error)\n\tIncreaseStreamRetentionPeriodWithContext(aws.Context, *kinesis.IncreaseStreamRetentionPeriodInput, ...request.Option) (*kinesis.IncreaseStreamRetentionPeriodOutput, error)\n\tIncreaseStreamRetentionPeriodRequest(*kinesis.IncreaseStreamRetentionPeriodInput) (*request.Request, *kinesis.IncreaseStreamRetentionPeriodOutput)\n\n\tListStreams(*kinesis.ListStreamsInput) (*kinesis.ListStreamsOutput, error)\n\tListStreamsWithContext(aws.Context, *kinesis.ListStreamsInput, ...request.Option) (*kinesis.ListStreamsOutput, error)\n\tListStreamsRequest(*kinesis.ListStreamsInput) (*request.Request, *kinesis.ListStreamsOutput)\n\n\tListStreamsPages(*kinesis.ListStreamsInput, func(*kinesis.ListStreamsOutput, bool) bool) error\n\tListStreamsPagesWithContext(aws.Context, *kinesis.ListStreamsInput, func(*kinesis.ListStreamsOutput, bool) bool, ...request.Option) error\n\n\tListTagsForStream(*kinesis.ListTagsForStreamInput) (*kinesis.ListTagsForStreamOutput, error)\n\tListTagsForStreamWithContext(aws.Context, *kinesis.ListTagsForStreamInput, ...request.Option) (*kinesis.ListTagsForStreamOutput, error)\n\tListTagsForStreamRequest(*kinesis.ListTagsForStreamInput) (*request.Request, *kinesis.ListTagsForStreamOutput)\n\n\tMergeShards(*kinesis.MergeShardsInput) (*kinesis.MergeShardsOutput, error)\n\tMergeShardsWithContext(aws.Context, *kinesis.MergeShardsInput, ...request.Option) (*kinesis.MergeShardsOutput, error)\n\tMergeShardsRequest(*kinesis.MergeShardsInput) (*request.Request, *kinesis.MergeShardsOutput)\n\n\tPutRecord(*kinesis.PutRecordInput) (*kinesis.PutRecordOutput, error)\n\tPutRecordWithContext(aws.Context, *kinesis.PutRecordInput, ...request.Option) (*kinesis.PutRecordOutput, error)\n\tPutRecordRequest(*kinesis.PutRecordInput) (*request.Request, *kinesis.PutRecordOutput)\n\n\tPutRecords(*kinesis.PutRecordsInput) (*kinesis.PutRecordsOutput, error)\n\tPutRecordsWithContext(aws.Context, *kinesis.PutRecordsInput, ...request.Option) (*kinesis.PutRecordsOutput, error)\n\tPutRecordsRequest(*kinesis.PutRecordsInput) (*request.Request, *kinesis.PutRecordsOutput)\n\n\tRemoveTagsFromStream(*kinesis.RemoveTagsFromStreamInput) (*kinesis.RemoveTagsFromStreamOutput, error)\n\tRemoveTagsFromStreamWithContext(aws.Context, *kinesis.RemoveTagsFromStreamInput, ...request.Option) (*kinesis.RemoveTagsFromStreamOutput, error)\n\tRemoveTagsFromStreamRequest(*kinesis.RemoveTagsFromStreamInput) (*request.Request, *kinesis.RemoveTagsFromStreamOutput)\n\n\tSplitShard(*kinesis.SplitShardInput) (*kinesis.SplitShardOutput, error)\n\tSplitShardWithContext(aws.Context, *kinesis.SplitShardInput, ...request.Option) (*kinesis.SplitShardOutput, error)\n\tSplitShardRequest(*kinesis.SplitShardInput) (*request.Request, *kinesis.SplitShardOutput)\n\n\tUpdateShardCount(*kinesis.UpdateShardCountInput) (*kinesis.UpdateShardCountOutput, error)\n\tUpdateShardCountWithContext(aws.Context, *kinesis.UpdateShardCountInput, ...request.Option) (*kinesis.UpdateShardCountOutput, error)\n\tUpdateShardCountRequest(*kinesis.UpdateShardCountInput) (*request.Request, *kinesis.UpdateShardCountOutput)\n\n\tWaitUntilStreamExists(*kinesis.DescribeStreamInput) error\n\tWaitUntilStreamExistsWithContext(aws.Context, *kinesis.DescribeStreamInput, ...request.WaiterOption) error\n}\n\nvar _ KinesisAPI = (*kinesis.Kinesis)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/service.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage kinesis\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/jsonrpc\"\n)\n\n// Amazon Kinesis Streams is a managed service that scales elastically for real\n// time processing of streaming big data.\n// The service client's operations are safe to be used concurrently.\n// It is not safe to mutate any of the client's properties though.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/kinesis-2013-12-02\ntype Kinesis 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 = \"kinesis\"   // Service endpoint prefix API calls made to.\n\tEndpointsID = ServiceName // Service ID for Regions and Endpoints metadata.\n)\n\n// New creates a new instance of the Kinesis 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 Kinesis client from just a session.\n//     svc := kinesis.New(mySession)\n//\n//     // Create a Kinesis client with additional configuration\n//     svc := kinesis.New(mySession, aws.NewConfig().WithRegion(\"us-west-2\"))\nfunc New(p client.ConfigProvider, cfgs ...*aws.Config) *Kinesis {\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) *Kinesis {\n\tsvc := &Kinesis{\n\t\tClient: client.New(\n\t\t\tcfg,\n\t\t\tmetadata.ClientInfo{\n\t\t\t\tServiceName:   ServiceName,\n\t\t\t\tSigningName:   signingName,\n\t\t\t\tSigningRegion: signingRegion,\n\t\t\t\tEndpoint:      endpoint,\n\t\t\t\tAPIVersion:    \"2013-12-02\",\n\t\t\t\tJSONVersion:   \"1.1\",\n\t\t\t\tTargetPrefix:  \"Kinesis_20131202\",\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(jsonrpc.BuildHandler)\n\tsvc.Handlers.Unmarshal.PushBackNamed(jsonrpc.UnmarshalHandler)\n\tsvc.Handlers.UnmarshalMeta.PushBackNamed(jsonrpc.UnmarshalMetaHandler)\n\tsvc.Handlers.UnmarshalError.PushBackNamed(jsonrpc.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 Kinesis operation and runs any\n// custom request initialization.\nfunc (c *Kinesis) 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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/kinesis/waiters.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage kinesis\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// WaitUntilStreamExists uses the Kinesis API operation\n// DescribeStream to wait for a condition to be met before returning.\n// If the condition is not meet within the max attempt window an error will\n// be returned.\nfunc (c *Kinesis) WaitUntilStreamExists(input *DescribeStreamInput) error {\n\treturn c.WaitUntilStreamExistsWithContext(aws.BackgroundContext(), input)\n}\n\n// WaitUntilStreamExistsWithContext is an extended version of WaitUntilStreamExists.\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 *Kinesis) WaitUntilStreamExistsWithContext(ctx aws.Context, input *DescribeStreamInput, opts ...request.WaiterOption) error {\n\tw := request.Waiter{\n\t\tName:        \"WaitUntilStreamExists\",\n\t\tMaxAttempts: 18,\n\t\tDelay:       request.ConstantWaiterDelay(10 * time.Second),\n\t\tAcceptors: []request.WaiterAcceptor{\n\t\t\t{\n\t\t\t\tState:   request.SuccessWaiterState,\n\t\t\t\tMatcher: request.PathWaiterMatch, Argument: \"StreamDescription.StreamStatus\",\n\t\t\t\tExpected: \"ACTIVE\",\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 *DescribeStreamInput\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.DescribeStreamRequest(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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/sts/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": "12fa-docker-golang/chapter11/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\n// Package sts provides a client for AWS Security Token Service.\npackage sts\n\nimport (\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/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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See AssumeRole for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the AssumeRole method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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 (consisting of an access\n// key ID, a secret access key, and a security token) that you can use to access\n// AWS resources that you might not normally have access to. Typically, you\n// use AssumeRole for cross-account access or federation. For a comparison of\n// AssumeRole with the other APIs that produce temporary credentials, see Requesting\n// Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// Important: You cannot call AssumeRole by using AWS root account credentials;\n// access is denied. You must use credentials for an IAM user or an IAM role\n// 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 and\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 (Delegation and Federation) (http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html)\n// in the IAM User Guide.\n//\n// For federation, you can, for example, grant single sign-on access to the\n// AWS Management Console. If you already have an identity and authentication\n// system in your corporate network, you don't have to recreate user identities\n// in AWS in order to grant those user identities access to AWS. Instead, after\n// a user has been authenticated, you call AssumeRole (and specify the role\n// with the appropriate permissions) to get temporary security credentials for\n// that user. With those temporary security credentials, you construct a sign-in\n// URL that users can use to access the console. For more information, see Common\n// Scenarios for Temporary Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html#sts-introduction)\n// in the IAM User Guide.\n//\n// The temporary security credentials are valid for the duration that you specified\n// when calling AssumeRole, which can be from 900 seconds (15 minutes) to a\n// maximum of 3600 seconds (1 hour). The default is 1 hour.\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 STS service's GetFederationToken or GetSessionToken APIs.\n//\n// Optionally, you can pass an IAM access policy to this operation. If you choose\n// not to pass a policy, the temporary security credentials that are returned\n// by the operation have the permissions that are defined in the access policy\n// of the role that is being assumed. If you pass a policy to this operation,\n// the temporary security credentials that are returned by the operation have\n// the permissions that are allowed by both the access policy of the role that\n// is being assumed, and the policy that you pass. This gives you a way to further\n// restrict the permissions for the resulting temporary security credentials.\n// You cannot use the passed policy to grant permissions that are in excess\n// of those allowed by the access policy of the role that is being assumed.\n// For more information, see Permissions for AssumeRole, AssumeRoleWithSAML,\n// and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\n// in the IAM User Guide.\n//\n// To assume a role, your AWS account must be trusted by the role. The trust\n// relationship is defined in the role's trust policy when the role is created.\n// That trust policy states which accounts are allowed to delegate access to\n// this account's role.\n//\n// The user who wants to access the role must also have permissions delegated\n// from the role's administrator. If the user is in a different account than\n// the role, then the user's administrator must attach a policy that allows\n// the user to call AssumeRole on the ARN of the role in the other account.\n// If the user is in the same account as the role, then you can either attach\n// a policy to the user (identical to the previous different account user),\n// or you can add the user as a principal directly in the role's trust policy\n//\n// Using MFA with AssumeRole\n//\n// You can optionally include multi-factor authentication (MFA) information\n// when you call AssumeRole. This is useful for cross-account scenarios in which\n// you want to make sure that the user who is assuming the role has been authenticated\n// using an AWS MFA device. In that scenario, the trust policy of the role being\n// assumed includes a condition that tests for MFA authentication; if the caller\n// does not include valid MFA information, the request to assume the role is\n// denied. The condition in a trust policy that tests for MFA authentication\n// might look like the following example.\n//\n// \"Condition\": {\"Bool\": {\"aws:MultiFactorAuthPresent\": true}}\n//\n// For more information, see Configuring MFA-Protected API Access (http://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 devices 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See AssumeRoleWithSAML for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the AssumeRoleWithSAML method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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\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 APIs that produce temporary credentials, see Requesting Temporary\n// Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS APIs (http://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// The temporary security credentials are valid for the duration that you specified\n// when calling AssumeRole, or until the time specified in the SAML authentication\n// response's SessionNotOnOrAfter value, whichever is shorter. The duration\n// can be from 900 seconds (15 minutes) to a maximum of 3600 seconds (1 hour).\n// The default is 1 hour.\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 service's GetFederationToken or GetSessionToken APIs.\n//\n// Optionally, you can pass an IAM access policy to this operation. If you choose\n// not to pass a policy, the temporary security credentials that are returned\n// by the operation have the permissions that are defined in the access policy\n// of the role that is being assumed. If you pass a policy to this operation,\n// the temporary security credentials that are returned by the operation have\n// the permissions that are allowed by the intersection of both the access policy\n// of the role that is being assumed, and the policy that you pass. This means\n// that both policies must grant the permission for the action to be allowed.\n// This gives you a way to further restrict the permissions for the resulting\n// temporary security credentials. You cannot use the passed policy to grant\n// permissions that are in excess of those allowed by the access policy of the\n// role that is being assumed. For more information, see Permissions for AssumeRole,\n// AssumeRoleWithSAML, and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\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, and create\n// 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html)\n//    in the IAM User Guide.\n//\n//    * Creating SAML Identity Providers (http://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 (http://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 (http://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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See AssumeRoleWithWebIdentity for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the AssumeRoleWithWebIdentity method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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\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, such as Amazon\n// Cognito, Login with Amazon, Facebook, Google, or any OpenID Connect-compatible\n// 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 (http://aws.amazon.com/sdkforios/)\n// and the AWS SDK for Android (http://aws.amazon.com/sdkforandroid/) to uniquely\n// identify a user and supply the user with a consistent identity throughout\n// the lifetime of an application.\n//\n// To learn more about Amazon Cognito, see Amazon Cognito Overview (http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840)\n// in the AWS SDK for Android Developer Guide guide and Amazon Cognito Overview\n// (http://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, and without deploying server-based\n// proxy services that use long-term AWS credentials. Instead, the identity\n// of the caller is validated by using a token from the web identity provider.\n// For a comparison of AssumeRoleWithWebIdentity with the other APIs that produce\n// temporary credentials, see Requesting Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS APIs (http://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 APIs.\n//\n// The credentials are valid for the duration that you specified when calling\n// AssumeRoleWithWebIdentity, which can be from 900 seconds (15 minutes) to\n// a maximum of 3600 seconds (1 hour). The default is 1 hour.\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 service's GetFederationToken or GetSessionToken APIs.\n//\n// Optionally, you can pass an IAM access policy to this operation. If you choose\n// not to pass a policy, the temporary security credentials that are returned\n// by the operation have the permissions that are defined in the access policy\n// of the role that is being assumed. If you pass a policy to this operation,\n// the temporary security credentials that are returned by the operation have\n// the permissions that are allowed by both the access policy of the role that\n// is being assumed, and the policy that you pass. This gives you a way to further\n// restrict the permissions for the resulting temporary security credentials.\n// You cannot use the passed policy to grant permissions that are in excess\n// of those allowed by the access policy of the role that is being assumed.\n// For more information, see Permissions for AssumeRole, AssumeRoleWithSAML,\n// and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\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 APIs for Mobile Apps (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html)\n//    and Federation Through a Web-based Identity Provider (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity).\n//\n//\n//    *  Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html).\n//    This interactive website lets you walk through the process of authenticating\n//    via Login with Amazon, Facebook, or Google, getting temporary security\n//    credentials, and then using those credentials to make a request to AWS.\n//\n//\n//    * AWS SDK for iOS (http://aws.amazon.com/sdkforios/) and AWS SDK for Android\n//    (http://aws.amazon.com/sdkforandroid/). These toolkits contain sample\n//    apps that show how to invoke the identity providers, and then how to use\n//    the information from these providers to get and use temporary security\n//    credentials.\n//\n//    * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/4617974389850313).\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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See DecodeAuthorizationMessage for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the DecodeAuthorizationMessage method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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 action that he or\n// she has requested, the request returns a Client.UnauthorizedOperation response\n// (an HTTP 403 response). Some AWS actions additionally return an encoded message\n// that can provide details about this authorization failure.\n//\n// Only certain AWS actions return an encoded authorization message. The documentation\n// for an individual action indicates whether that action returns an encoded\n// 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 action\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 (http://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// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See GetCallerIdentity for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the GetCallerIdentity method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See GetFederationToken for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the GetFederationToken method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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. Because\n// you must call the GetFederationToken action using the long-term security\n// credentials of an IAM user, 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 APIs that produce temporary\n// credentials, see Requesting Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// If you are creating 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, we recommend that you\n// use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity.\n// For more information, see Federation Through a Web-based Identity Provider\n// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity).\n//\n// The GetFederationToken action must be called by using the long-term AWS security\n// credentials of an IAM user. You can also call GetFederationToken using the\n// security credentials of an AWS root account, but we do not recommended it.\n// Instead, we recommend that you create an IAM user for the purpose of the\n// proxy application and then attach a policy to the IAM user that limits federated\n// users to only the actions and resources that they need access to. For more\n// information, see IAM Best Practices (http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)\n// in the IAM User Guide.\n//\n// The temporary security credentials that are obtained by using the long-term\n// credentials of an IAM user are valid for the specified duration, from 900\n// seconds (15 minutes) up to a maximium of 129600 seconds (36 hours). The default\n// is 43200 seconds (12 hours). Temporary credentials that are obtained by using\n// AWS root account credentials have a maximum duration of 3600 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 APIs.\n//\n//    * You cannot call any STS APIs except GetCallerIdentity.\n//\n// Permissions\n//\n// The permissions for the temporary security credentials returned by GetFederationToken\n// are determined by a combination of the following:\n//\n//    * The policy or policies that are attached to the IAM user whose credentials\n//    are used to call GetFederationToken.\n//\n//    * The policy that is passed as a parameter in the call.\n//\n// The passed policy is attached to the temporary security credentials that\n// result from the GetFederationToken API call--that is, to the federated user.\n// When the federated user makes an AWS request, AWS evaluates the policy attached\n// to the federated user in combination with the policy or policies attached\n// to the IAM user whose credentials were used to call GetFederationToken. AWS\n// allows the federated user's request only when both the federated user and\n// the IAM user are explicitly allowed to perform the requested action. The\n// passed policy cannot grant more permissions than those that are defined in\n// the IAM user policy.\n//\n// A typical use case is that the permissions of the IAM user whose credentials\n// are used to call GetFederationToken are designed to allow access to all the\n// actions and resources that any federated user will need. Then, for individual\n// users, you pass a policy to the operation that scopes down the permissions\n// to a level that's appropriate to that individual user, using a policy that\n// allows only a subset of permissions that are granted to the IAM user.\n//\n// If you do not pass a policy, the resulting temporary security credentials\n// have no effective permissions. The only exception is when the temporary security\n// credentials are used to access a resource that has a resource-based policy\n// that specifically allows the federated user to access the resource.\n//\n// For more information about how permissions work, see Permissions for GetFederationToken\n// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getfederationtoken.html).\n// For information about using GetFederationToken to create temporary security\n// credentials, see GetFederationToken—Federation Through a Custom Identity\n// Broker (http://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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// Please also see 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 can be used to capture response data after the request's \"Send\" method\n// is called.\n//\n// See GetSessionToken for usage and error information.\n//\n// Creating a request object using this method should be used when you want to inject\n// custom logic into the request's lifecycle using a custom handler, or if you want to\n// access properties on the request object before or after sending the request. If\n// you just want the service response, call the GetSessionToken method directly\n// instead.\n//\n// Note: You must call the \"Send\" method on the returned request object in order\n// to execute the request.\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// Please also see 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 APIs like Amazon EC2 StopInstances. MFA-enabled\n// IAM users would need to call GetSessionToken and submit an MFA code that\n// is associated with their MFA device. Using the temporary security credentials\n// that are returned from the call, IAM users can then make programmatic calls\n// to APIs that require MFA authentication. If you do not supply a correct MFA\n// code, then the API returns an access denied error. For a comparison of GetSessionToken\n// with the other APIs that produce temporary credentials, see Requesting Temporary\n// Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// The GetSessionToken action must be called by using the long-term AWS security\n// credentials of the AWS account or an IAM user. Credentials that are created\n// by IAM users are valid for the duration that you specify, from 900 seconds\n// (15 minutes) up to a maximum of 129600 seconds (36 hours), with a default\n// of 43200 seconds (12 hours); credentials that are created by using account\n// credentials can range from 900 seconds (15 minutes) up to a maximum of 3600\n// 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 APIs unless MFA authentication information is\n//    included in the request.\n//\n//    * You cannot call any STS API exceptAssumeRole or GetCallerIdentity.\n//\n// We recommend that you do not call GetSessionToken with root account credentials.\n// Instead, follow our best practices (http://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 permissions associated with the temporary security credentials returned\n// by GetSessionToken are based on the permissions associated with account or\n// IAM user whose credentials are used to call the action. If GetSessionToken\n// is called using root account credentials, the temporary credentials have\n// root account permissions. Similarly, if GetSessionToken is called using the\n// credentials of an IAM user, the temporary credentials have the same permissions\n// 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 (http://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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// Please also see 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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleRequest\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) to 3600 seconds (1 hour). By default, the value is set\n\t// to 3600 seconds.\n\t//\n\t// This is separate from the duration of a console session that you might request\n\t// using the returned credentials. The request to the federation endpoint for\n\t// a console sign-in token takes a SessionDuration parameter that specifies\n\t// the maximum length of the console session, separately from the DurationSeconds\n\t// parameter on this API. For more information, see Creating a URL that Enables\n\t// Federated Users to Access the AWS Management Console (http://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 is used by third parties when assuming roles in\n\t// their customers' accounts. For each role that the third party can assume,\n\t// they should instruct their customers to ensure the role's trust policy checks\n\t// for the external ID that the third party generated. Each time the third party\n\t// assumes the role, they should pass the customer's external ID. The external\n\t// ID is useful in order to help third parties bind a role to the customer who\n\t// created it. For more information about the external ID, see How to Use an\n\t// External ID When Granting Access to Your AWS Resources to a Third Party (http://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 validated 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.\n\t//\n\t// This parameter is optional. If you pass a policy, the temporary security\n\t// credentials that are returned by the operation have the permissions that\n\t// are allowed by both (the intersection of) the access policy of the role that\n\t// is being assumed, and the policy that you pass. This gives you a way to further\n\t// restrict the permissions for the resulting temporary security credentials.\n\t// You cannot use the passed policy to grant permissions that are in excess\n\t// of those allowed by the access policy of the role that is being assumed.\n\t// For more information, see Permissions for AssumeRole, AssumeRoleWithSAML,\n\t// and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\n\t// in the IAM User Guide.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a string\n\t// of characters up to 2048 characters in length. The characters can be any\n\t// ASCII character from the space character to the end of the valid character\n\t// list (\\u0020-\\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\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 `min:\"1\" type:\"string\"`\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 using the temporary security credentials will expose the role session\n\t// name to the external account in their 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\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// 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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleResponse\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// Note: The size of the security token that STS APIs return is not fixed. We\n\t// strongly recommend that you make no assumptions about the maximum size. As\n\t// of this writing, the typical size is less than 4096 bytes, but that can vary.\n\t// Also, future updates to AWS might require larger sizes.\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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAMLRequest\ntype AssumeRoleWithSAMLInput 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) to 3600 seconds (1 hour). By default, the value is set\n\t// to 3600 seconds. An expiration can also be specified in the SAML authentication\n\t// response's SessionNotOnOrAfter value. The actual expiration time is whichever\n\t// value is shorter.\n\t//\n\t// This is separate from the duration of a console session that you might request\n\t// using the returned credentials. The request to the federation endpoint for\n\t// a console sign-in token takes a SessionDuration parameter that specifies\n\t// the maximum length of the console session, separately from the DurationSeconds\n\t// parameter on this API. For more information, see Enabling SAML 2.0 Federated\n\t// Users to Access the AWS Management Console (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html)\n\t// in the IAM User Guide.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// An IAM policy in JSON format.\n\t//\n\t// The policy parameter is optional. If you pass a policy, the temporary security\n\t// credentials that are returned by the operation have the permissions that\n\t// are allowed by both the access policy of the role that is being assumed,\n\t// and the policy that you pass. This gives you a way to further restrict the\n\t// permissions for the resulting temporary security credentials. You cannot\n\t// use the passed policy to grant permissions that are in excess of those allowed\n\t// by the access policy of the role that is being assumed. For more information,\n\t// Permissions for AssumeRole, AssumeRoleWithSAML, and AssumeRoleWithWebIdentity\n\t// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\n\t// in the IAM User Guide.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a string\n\t// of characters up to 2048 characters in length. The characters can be any\n\t// ASCII character from the space character to the end of the valid character\n\t// list (\\u0020-\\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\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 `min:\"1\" type:\"string\"`\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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html)\n\t// in the Using IAM 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\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// 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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAMLResponse\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// Note: The size of the security token that STS APIs return is not fixed. We\n\t// strongly recommend that you make no assumptions about the maximum size. As\n\t// of this writing, the typical size is less than 4096 bytes, but that can vary.\n\t// Also, future updates to AWS might require larger sizes.\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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentityRequest\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) to 3600 seconds (1 hour). By default, the value is set\n\t// to 3600 seconds.\n\t//\n\t// This is separate from the duration of a console session that you might request\n\t// using the returned credentials. The request to the federation endpoint for\n\t// a console sign-in token takes a SessionDuration parameter that specifies\n\t// the maximum length of the console session, separately from the DurationSeconds\n\t// parameter on this API. For more information, see Creating a URL that Enables\n\t// Federated Users to Access the AWS Management Console (http://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.\n\t//\n\t// The policy parameter is optional. If you pass a policy, the temporary security\n\t// credentials that are returned by the operation have the permissions that\n\t// are allowed by both the access policy of the role that is being assumed,\n\t// and the policy that you pass. This gives you a way to further restrict the\n\t// permissions for the resulting temporary security credentials. You cannot\n\t// use the passed policy to grant permissions that are in excess of those allowed\n\t// by the access policy of the role that is being assumed. For more information,\n\t// see Permissions for AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)\n\t// in the IAM User Guide.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a string\n\t// of characters up to 2048 characters in length. The characters can be any\n\t// ASCII character from the space character to the end of the valid character\n\t// list (\\u0020-\\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\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 `min:\"1\" type:\"string\"`\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\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// 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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentityResponse\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// Note: The size of the security token that STS APIs return is not fixed. We\n\t// strongly recommend that you make no assumptions about the maximum size. As\n\t// of this writing, the typical size is less than 4096 bytes, but that can vary.\n\t// Also, future updates to AWS might require larger sizes.\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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumedRoleUser\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 (http://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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/Credentials\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\" timestampFormat:\"iso8601\" 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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessageRequest\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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessageResponse\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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/FederatedUser\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 (http://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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentityRequest\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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentityResponse\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 making the call. The values returned are those listed in the\n\t// aws:userid column in the Principal table (http://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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationTokenRequest\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 129600 seconds\n\t// (36 hours), with 43200 seconds (12 hours) as the default. Sessions obtained\n\t// using AWS account (root) credentials are restricted to a maximum of 3600\n\t// seconds (one hour). If the specified duration is longer than one hour, the\n\t// session obtained by using AWS account (root) credentials defaults to one\n\t// 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 is passed with the GetFederationToken call\n\t// and evaluated along with the policy or policies that are attached to the\n\t// IAM user whose credentials are used to call GetFederationToken. The passed\n\t// policy is used to scope down the permissions that are available to the IAM\n\t// user, by allowing only a subset of the permissions that are granted to the\n\t// IAM user. The passed policy cannot grant more permissions than those granted\n\t// to the IAM user. The final permissions for the federated user are the most\n\t// restrictive set based on the intersection of the passed policy and the IAM\n\t// user policy.\n\t//\n\t// If you do not pass a policy, the resulting temporary security credentials\n\t// have no effective permissions. The only exception is when the temporary security\n\t// credentials are used to access a resource that has a resource-based policy\n\t// that specifically allows the federated user to access the resource.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a string\n\t// of characters up to 2048 characters in length. The characters can be any\n\t// ASCII character from the space character to the end of the valid character\n\t// list (\\u0020-\\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\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\t//\n\t// For more information about how permissions work, see Permissions for GetFederationToken\n\t// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getfederationtoken.html).\n\tPolicy *string `min:\"1\" type:\"string\"`\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\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// Contains the response to a successful GetFederationToken request, including\n// temporary AWS credentials that can be used to make AWS requests.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationTokenResponse\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// Note: The size of the security token that STS APIs return is not fixed. We\n\t// strongly recommend that you make no assumptions about the maximum size. As\n\t// of this writing, the typical size is less than 4096 bytes, but that can vary.\n\t// Also, future updates to AWS might require larger sizes.\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\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionTokenRequest\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 129600\n\t// seconds (36 hours), with 43200 seconds (12 hours) as the default. Sessions\n\t// for AWS account owners are restricted to a maximum of 3600 seconds (one hour).\n\t// If the duration is longer than one hour, the session for AWS account owners\n\t// 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, and the user does not provide a code when requesting a set of\n\t// temporary security credentials, the user will receive an \"access denied\"\n\t// 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.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionTokenResponse\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// Note: The size of the security token that STS APIs return is not fixed. We\n\t// strongly recommend that you make no assumptions about the maximum size. As\n\t// of this writing, the typical size is less than 4096 bytes, but that can vary.\n\t// Also, future updates to AWS might require larger sizes.\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"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go",
    "content": "package sts\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\nfunc init() {\n\tinitRequest = func(r *request.Request) {\n\t\tswitch r.Operation.Name {\n\t\tcase opAssumeRoleWithSAML, opAssumeRoleWithWebIdentity:\n\t\t\tr.Handlers.Sign.Clear() // these operations are unsigned\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/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 (http://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": "12fa-docker-golang/chapter11/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// 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html).\n//\n// As an alternative to using the API, you can use one of the AWS SDKs, which\n// consist of libraries and sample code for various programming languages and\n// platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs provide a convenient\n// way to create programmatic access to STS. For example, the SDKs take care\n// of cryptographically signing requests, managing errors, and retrying requests\n// automatically. For information about the AWS SDKs, including how to download\n// and install them, see the Tools for Amazon Web Services page (http://aws.amazon.com/tools/).\n//\n// For information about setting up signatures and authorization through the\n// API, go to Signing AWS API Requests (http://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 (http://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 (http://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// The AWS Security Token Service (STS) has a default endpoint of https://sts.amazonaws.com\n// that maps to the US East (N. Virginia) region. Additional regions are available\n// and are activated by default. For more information, see Activating and Deactivating\n// AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n// in the IAM User Guide.\n//\n// For information about STS endpoints, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html#sts_region)\n// in the AWS General Reference.\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. To learn more about CloudTrail, including how to turn it on and find\n// your log files, see the AWS CloudTrail User Guide (http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html).\n// The service client's operations are safe to be used concurrently.\n// It is not safe to mutate any of the client's properties though.\n// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15\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\"       // Service endpoint prefix API calls made to.\n\tEndpointsID = ServiceName // Service ID for Regions and Endpoints metadata.\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\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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\n// Package stsiface provides an interface to enable mocking the AWS Security Token Service service client\n// for testing your code.\n//\n// It is important to note that this interface will have breaking changes\n// when the service model is updated and adds new API operations, paginators,\n// and waiters.\npackage stsiface\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/service/sts\"\n)\n\n// STSAPI provides an interface to enable mocking the\n// sts.STS service client's API operation,\n// paginators, and waiters. This make unit testing your code that calls out\n// to the SDK's service client's calls easier.\n//\n// The best way to use this interface is so the SDK's service client's calls\n// can be stubbed out for unit testing your code with the SDK without needing\n// to inject custom request handlers into the the SDK's request pipeline.\n//\n//    // myFunc uses an SDK service client to make a request to\n//    // AWS Security Token Service.\n//    func myFunc(svc stsiface.STSAPI) bool {\n//        // Make svc.AssumeRole request\n//    }\n//\n//    func main() {\n//        sess := session.New()\n//        svc := sts.New(sess)\n//\n//        myFunc(svc)\n//    }\n//\n// In your _test.go file:\n//\n//    // Define a mock struct to be used in your unit tests of myFunc.\n//    type mockSTSClient struct {\n//        stsiface.STSAPI\n//    }\n//    func (m *mockSTSClient) AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) {\n//        // mock response/functionality\n//    }\n//\n//    func TestMyFunc(t *testing.T) {\n//        // Setup Test\n//        mockSvc := &mockSTSClient{}\n//\n//        myfunc(mockSvc)\n//\n//        // Verify myFunc's functionality\n//    }\n//\n// It is important to note that this interface will have breaking changes\n// when the service model is updated and adds new API operations, paginators,\n// and waiters. Its suggested to use the pattern above for testing, or using\n// tooling to generate mocks to satisfy the interfaces.\ntype STSAPI interface {\n\tAssumeRole(*sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error)\n\tAssumeRoleWithContext(aws.Context, *sts.AssumeRoleInput, ...request.Option) (*sts.AssumeRoleOutput, error)\n\tAssumeRoleRequest(*sts.AssumeRoleInput) (*request.Request, *sts.AssumeRoleOutput)\n\n\tAssumeRoleWithSAML(*sts.AssumeRoleWithSAMLInput) (*sts.AssumeRoleWithSAMLOutput, error)\n\tAssumeRoleWithSAMLWithContext(aws.Context, *sts.AssumeRoleWithSAMLInput, ...request.Option) (*sts.AssumeRoleWithSAMLOutput, error)\n\tAssumeRoleWithSAMLRequest(*sts.AssumeRoleWithSAMLInput) (*request.Request, *sts.AssumeRoleWithSAMLOutput)\n\n\tAssumeRoleWithWebIdentity(*sts.AssumeRoleWithWebIdentityInput) (*sts.AssumeRoleWithWebIdentityOutput, error)\n\tAssumeRoleWithWebIdentityWithContext(aws.Context, *sts.AssumeRoleWithWebIdentityInput, ...request.Option) (*sts.AssumeRoleWithWebIdentityOutput, error)\n\tAssumeRoleWithWebIdentityRequest(*sts.AssumeRoleWithWebIdentityInput) (*request.Request, *sts.AssumeRoleWithWebIdentityOutput)\n\n\tDecodeAuthorizationMessage(*sts.DecodeAuthorizationMessageInput) (*sts.DecodeAuthorizationMessageOutput, error)\n\tDecodeAuthorizationMessageWithContext(aws.Context, *sts.DecodeAuthorizationMessageInput, ...request.Option) (*sts.DecodeAuthorizationMessageOutput, error)\n\tDecodeAuthorizationMessageRequest(*sts.DecodeAuthorizationMessageInput) (*request.Request, *sts.DecodeAuthorizationMessageOutput)\n\n\tGetCallerIdentity(*sts.GetCallerIdentityInput) (*sts.GetCallerIdentityOutput, error)\n\tGetCallerIdentityWithContext(aws.Context, *sts.GetCallerIdentityInput, ...request.Option) (*sts.GetCallerIdentityOutput, error)\n\tGetCallerIdentityRequest(*sts.GetCallerIdentityInput) (*request.Request, *sts.GetCallerIdentityOutput)\n\n\tGetFederationToken(*sts.GetFederationTokenInput) (*sts.GetFederationTokenOutput, error)\n\tGetFederationTokenWithContext(aws.Context, *sts.GetFederationTokenInput, ...request.Option) (*sts.GetFederationTokenOutput, error)\n\tGetFederationTokenRequest(*sts.GetFederationTokenInput) (*request.Request, *sts.GetFederationTokenOutput)\n\n\tGetSessionToken(*sts.GetSessionTokenInput) (*sts.GetSessionTokenOutput, error)\n\tGetSessionTokenWithContext(aws.Context, *sts.GetSessionTokenInput, ...request.Option) (*sts.GetSessionTokenOutput, error)\n\tGetSessionTokenRequest(*sts.GetSessionTokenInput) (*request.Request, *sts.GetSessionTokenOutput)\n}\n\nvar _ STSAPI = (*sts.STS)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/error.go",
    "content": "// Copyright 2016 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"fmt\"\n)\n\ntype ErrDelimiterNotFound struct {\n\tLine string\n}\n\nfunc IsErrDelimiterNotFound(err error) bool {\n\t_, ok := err.(ErrDelimiterNotFound)\n\treturn ok\n}\n\nfunc (err ErrDelimiterNotFound) Error() string {\n\treturn fmt.Sprintf(\"key-value delimiter not found: %s\", err.Line)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/ini.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package ini provides INI file read and write functionality in Go.\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\t// Name for default section. You can use this constant or the string literal.\n\t// In most of cases, an empty string is all you need to access the section.\n\tDEFAULT_SECTION = \"DEFAULT\"\n\n\t// Maximum allowed depth when recursively substituing variable names.\n\t_DEPTH_VALUES = 99\n\t_VERSION      = \"1.25.4\"\n)\n\n// Version returns current package version literal.\nfunc Version() string {\n\treturn _VERSION\n}\n\nvar (\n\t// Delimiter to determine or compose a new line.\n\t// This variable will be changed to \"\\r\\n\" automatically on Windows\n\t// at package init time.\n\tLineBreak = \"\\n\"\n\n\t// Variable regexp pattern: %(variable)s\n\tvarPattern = regexp.MustCompile(`%\\(([^\\)]+)\\)s`)\n\n\t// Indicate whether to align \"=\" sign with spaces to produce pretty output\n\t// or reduce all possible spaces for compact format.\n\tPrettyFormat = true\n\n\t// Explicitly write DEFAULT section header\n\tDefaultHeader = false\n)\n\nfunc init() {\n\tif runtime.GOOS == \"windows\" {\n\t\tLineBreak = \"\\r\\n\"\n\t}\n}\n\nfunc inSlice(str string, s []string) bool {\n\tfor _, v := range s {\n\t\tif str == v {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// dataSource is an interface that returns object which can be read and closed.\ntype dataSource interface {\n\tReadCloser() (io.ReadCloser, error)\n}\n\n// sourceFile represents an object that contains content on the local file system.\ntype sourceFile struct {\n\tname string\n}\n\nfunc (s sourceFile) ReadCloser() (_ io.ReadCloser, err error) {\n\treturn os.Open(s.name)\n}\n\ntype bytesReadCloser struct {\n\treader io.Reader\n}\n\nfunc (rc *bytesReadCloser) Read(p []byte) (n int, err error) {\n\treturn rc.reader.Read(p)\n}\n\nfunc (rc *bytesReadCloser) Close() error {\n\treturn nil\n}\n\n// sourceData represents an object that contains content in memory.\ntype sourceData struct {\n\tdata []byte\n}\n\nfunc (s *sourceData) ReadCloser() (io.ReadCloser, error) {\n\treturn ioutil.NopCloser(bytes.NewReader(s.data)), nil\n}\n\n// sourceReadCloser represents an input stream with Close method.\ntype sourceReadCloser struct {\n\treader io.ReadCloser\n}\n\nfunc (s *sourceReadCloser) ReadCloser() (io.ReadCloser, error) {\n\treturn s.reader, nil\n}\n\n// File represents a combination of a or more INI file(s) in memory.\ntype File struct {\n\t// Should make things safe, but sometimes doesn't matter.\n\tBlockMode bool\n\t// Make sure data is safe in multiple goroutines.\n\tlock sync.RWMutex\n\n\t// Allow combination of multiple data sources.\n\tdataSources []dataSource\n\t// Actual data is stored here.\n\tsections map[string]*Section\n\n\t// To keep data in order.\n\tsectionList []string\n\n\toptions LoadOptions\n\n\tNameMapper\n\tValueMapper\n}\n\n// newFile initializes File object with given data sources.\nfunc newFile(dataSources []dataSource, opts LoadOptions) *File {\n\treturn &File{\n\t\tBlockMode:   true,\n\t\tdataSources: dataSources,\n\t\tsections:    make(map[string]*Section),\n\t\tsectionList: make([]string, 0, 10),\n\t\toptions:     opts,\n\t}\n}\n\nfunc parseDataSource(source interface{}) (dataSource, error) {\n\tswitch s := source.(type) {\n\tcase string:\n\t\treturn sourceFile{s}, nil\n\tcase []byte:\n\t\treturn &sourceData{s}, nil\n\tcase io.ReadCloser:\n\t\treturn &sourceReadCloser{s}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"error parsing data source: unknown type '%s'\", s)\n\t}\n}\n\ntype LoadOptions struct {\n\t// Loose indicates whether the parser should ignore nonexistent files or return error.\n\tLoose bool\n\t// Insensitive indicates whether the parser forces all section and key names to lowercase.\n\tInsensitive bool\n\t// IgnoreContinuation indicates whether to ignore continuation lines while parsing.\n\tIgnoreContinuation bool\n\t// AllowBooleanKeys indicates whether to allow boolean type keys or treat as value is missing.\n\t// This type of keys are mostly used in my.cnf.\n\tAllowBooleanKeys bool\n\t// AllowShadows indicates whether to keep track of keys with same name under same section.\n\tAllowShadows bool\n\t// Some INI formats allow group blocks that store a block of raw content that doesn't otherwise\n\t// conform to key/value pairs. Specify the names of those blocks here.\n\tUnparseableSections []string\n}\n\nfunc LoadSources(opts LoadOptions, source interface{}, others ...interface{}) (_ *File, err error) {\n\tsources := make([]dataSource, len(others)+1)\n\tsources[0], err = parseDataSource(source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor i := range others {\n\t\tsources[i+1], err = parseDataSource(others[i])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tf := newFile(sources, opts)\n\tif err = f.Reload(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\n// Load loads and parses from INI data sources.\n// Arguments can be mixed of file name with string type, or raw data in []byte.\n// It will return error if list contains nonexistent files.\nfunc Load(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{}, source, others...)\n}\n\n// LooseLoad has exactly same functionality as Load function\n// except it ignores nonexistent files instead of returning error.\nfunc LooseLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{Loose: true}, source, others...)\n}\n\n// InsensitiveLoad has exactly same functionality as Load function\n// except it forces all section and key names to be lowercased.\nfunc InsensitiveLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{Insensitive: true}, source, others...)\n}\n\n// InsensitiveLoad has exactly same functionality as Load function\n// except it allows have shadow keys.\nfunc ShadowLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{AllowShadows: true}, source, others...)\n}\n\n// Empty returns an empty file object.\nfunc Empty() *File {\n\t// Ignore error here, we sure our data is good.\n\tf, _ := Load([]byte(\"\"))\n\treturn f\n}\n\n// NewSection creates a new section.\nfunc (f *File) NewSection(name string) (*Section, error) {\n\tif len(name) == 0 {\n\t\treturn nil, errors.New(\"error creating new section: empty section name\")\n\t} else if f.options.Insensitive && name != DEFAULT_SECTION {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif f.BlockMode {\n\t\tf.lock.Lock()\n\t\tdefer f.lock.Unlock()\n\t}\n\n\tif inSlice(name, f.sectionList) {\n\t\treturn f.sections[name], nil\n\t}\n\n\tf.sectionList = append(f.sectionList, name)\n\tf.sections[name] = newSection(f, name)\n\treturn f.sections[name], nil\n}\n\n// NewRawSection creates a new section with an unparseable body.\nfunc (f *File) NewRawSection(name, body string) (*Section, error) {\n\tsection, err := f.NewSection(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsection.isRawSection = true\n\tsection.rawBody = body\n\treturn section, nil\n}\n\n// NewSections creates a list of sections.\nfunc (f *File) NewSections(names ...string) (err error) {\n\tfor _, name := range names {\n\t\tif _, err = f.NewSection(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetSection returns section by given name.\nfunc (f *File) GetSection(name string) (*Section, error) {\n\tif len(name) == 0 {\n\t\tname = DEFAULT_SECTION\n\t} else if f.options.Insensitive {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif f.BlockMode {\n\t\tf.lock.RLock()\n\t\tdefer f.lock.RUnlock()\n\t}\n\n\tsec := f.sections[name]\n\tif sec == nil {\n\t\treturn nil, fmt.Errorf(\"section '%s' does not exist\", name)\n\t}\n\treturn sec, nil\n}\n\n// Section assumes named section exists and returns a zero-value when not.\nfunc (f *File) Section(name string) *Section {\n\tsec, err := f.GetSection(name)\n\tif err != nil {\n\t\t// Note: It's OK here because the only possible error is empty section name,\n\t\t// but if it's empty, this piece of code won't be executed.\n\t\tsec, _ = f.NewSection(name)\n\t\treturn sec\n\t}\n\treturn sec\n}\n\n// Section returns list of Section.\nfunc (f *File) Sections() []*Section {\n\tsections := make([]*Section, len(f.sectionList))\n\tfor i := range f.sectionList {\n\t\tsections[i] = f.Section(f.sectionList[i])\n\t}\n\treturn sections\n}\n\n// SectionStrings returns list of section names.\nfunc (f *File) SectionStrings() []string {\n\tlist := make([]string, len(f.sectionList))\n\tcopy(list, f.sectionList)\n\treturn list\n}\n\n// DeleteSection deletes a section.\nfunc (f *File) DeleteSection(name string) {\n\tif f.BlockMode {\n\t\tf.lock.Lock()\n\t\tdefer f.lock.Unlock()\n\t}\n\n\tif len(name) == 0 {\n\t\tname = DEFAULT_SECTION\n\t}\n\n\tfor i, s := range f.sectionList {\n\t\tif s == name {\n\t\t\tf.sectionList = append(f.sectionList[:i], f.sectionList[i+1:]...)\n\t\t\tdelete(f.sections, name)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (f *File) reload(s dataSource) error {\n\tr, err := s.ReadCloser()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer r.Close()\n\n\treturn f.parse(r)\n}\n\n// Reload reloads and parses all data sources.\nfunc (f *File) Reload() (err error) {\n\tfor _, s := range f.dataSources {\n\t\tif err = f.reload(s); err != nil {\n\t\t\t// In loose mode, we create an empty default section for nonexistent files.\n\t\t\tif os.IsNotExist(err) && f.options.Loose {\n\t\t\t\tf.parse(bytes.NewBuffer(nil))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Append appends one or more data sources and reloads automatically.\nfunc (f *File) Append(source interface{}, others ...interface{}) error {\n\tds, err := parseDataSource(source)\n\tif err != nil {\n\t\treturn err\n\t}\n\tf.dataSources = append(f.dataSources, ds)\n\tfor _, s := range others {\n\t\tds, err = parseDataSource(s)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tf.dataSources = append(f.dataSources, ds)\n\t}\n\treturn f.Reload()\n}\n\n// WriteToIndent writes content into io.Writer with given indention.\n// If PrettyFormat has been set to be true,\n// it will align \"=\" sign with spaces under each section.\nfunc (f *File) WriteToIndent(w io.Writer, indent string) (n int64, err error) {\n\tequalSign := \"=\"\n\tif PrettyFormat {\n\t\tequalSign = \" = \"\n\t}\n\n\t// Use buffer to make sure target is safe until finish encoding.\n\tbuf := bytes.NewBuffer(nil)\n\tfor i, sname := range f.sectionList {\n\t\tsec := f.Section(sname)\n\t\tif len(sec.Comment) > 0 {\n\t\t\tif sec.Comment[0] != '#' && sec.Comment[0] != ';' {\n\t\t\t\tsec.Comment = \"; \" + sec.Comment\n\t\t\t}\n\t\t\tif _, err = buf.WriteString(sec.Comment + LineBreak); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t}\n\n\t\tif i > 0 || DefaultHeader {\n\t\t\tif _, err = buf.WriteString(\"[\" + sname + \"]\" + LineBreak); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t} else {\n\t\t\t// Write nothing if default section is empty\n\t\t\tif len(sec.keyList) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif sec.isRawSection {\n\t\t\tif _, err = buf.WriteString(sec.rawBody); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Count and generate alignment length and buffer spaces using the\n\t\t// longest key. Keys may be modifed if they contain certain characters so\n\t\t// we need to take that into account in our calculation.\n\t\talignLength := 0\n\t\tif PrettyFormat {\n\t\t\tfor _, kname := range sec.keyList {\n\t\t\t\tkeyLength := len(kname)\n\t\t\t\t// First case will surround key by ` and second by \"\"\"\n\t\t\t\tif strings.ContainsAny(kname, \"\\\"=:\") {\n\t\t\t\t\tkeyLength += 2\n\t\t\t\t} else if strings.Contains(kname, \"`\") {\n\t\t\t\t\tkeyLength += 6\n\t\t\t\t}\n\n\t\t\t\tif keyLength > alignLength {\n\t\t\t\t\talignLength = keyLength\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\talignSpaces := bytes.Repeat([]byte(\" \"), alignLength)\n\n\tKEY_LIST:\n\t\tfor _, kname := range sec.keyList {\n\t\t\tkey := sec.Key(kname)\n\t\t\tif len(key.Comment) > 0 {\n\t\t\t\tif len(indent) > 0 && sname != DEFAULT_SECTION {\n\t\t\t\t\tbuf.WriteString(indent)\n\t\t\t\t}\n\t\t\t\tif key.Comment[0] != '#' && key.Comment[0] != ';' {\n\t\t\t\t\tkey.Comment = \"; \" + key.Comment\n\t\t\t\t}\n\t\t\t\tif _, err = buf.WriteString(key.Comment + LineBreak); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif len(indent) > 0 && sname != DEFAULT_SECTION {\n\t\t\t\tbuf.WriteString(indent)\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase key.isAutoIncrement:\n\t\t\t\tkname = \"-\"\n\t\t\tcase strings.ContainsAny(kname, \"\\\"=:\"):\n\t\t\t\tkname = \"`\" + kname + \"`\"\n\t\t\tcase strings.Contains(kname, \"`\"):\n\t\t\t\tkname = `\"\"\"` + kname + `\"\"\"`\n\t\t\t}\n\n\t\t\tfor _, val := range key.ValueWithShadows() {\n\t\t\t\tif _, err = buf.WriteString(kname); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\n\t\t\t\tif key.isBooleanType {\n\t\t\t\t\tif kname != sec.keyList[len(sec.keyList)-1] {\n\t\t\t\t\t\tbuf.WriteString(LineBreak)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue KEY_LIST\n\t\t\t\t}\n\n\t\t\t\t// Write out alignment spaces before \"=\" sign\n\t\t\t\tif PrettyFormat {\n\t\t\t\t\tbuf.Write(alignSpaces[:alignLength-len(kname)])\n\t\t\t\t}\n\n\t\t\t\t// In case key value contains \"\\n\", \"`\", \"\\\"\", \"#\" or \";\"\n\t\t\t\tif strings.ContainsAny(val, \"\\n`\") {\n\t\t\t\t\tval = `\"\"\"` + val + `\"\"\"`\n\t\t\t\t} else if strings.ContainsAny(val, \"#;\") {\n\t\t\t\t\tval = \"`\" + val + \"`\"\n\t\t\t\t}\n\t\t\t\tif _, err = buf.WriteString(equalSign + val + LineBreak); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Put a line between sections\n\t\tif _, err = buf.WriteString(LineBreak); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\treturn buf.WriteTo(w)\n}\n\n// WriteTo writes file content into io.Writer.\nfunc (f *File) WriteTo(w io.Writer) (int64, error) {\n\treturn f.WriteToIndent(w, \"\")\n}\n\n// SaveToIndent writes content to file system with given value indention.\nfunc (f *File) SaveToIndent(filename, indent string) error {\n\t// Note: Because we are truncating with os.Create,\n\t// \tso it's safer to save to a temporary file location and rename afte done.\n\ttmpPath := filename + \".\" + strconv.Itoa(time.Now().Nanosecond()) + \".tmp\"\n\tdefer os.Remove(tmpPath)\n\n\tfw, err := os.Create(tmpPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif _, err = f.WriteToIndent(fw, indent); err != nil {\n\t\tfw.Close()\n\t\treturn err\n\t}\n\tfw.Close()\n\n\t// Remove old file and rename the new one.\n\tos.Remove(filename)\n\treturn os.Rename(tmpPath, filename)\n}\n\n// SaveTo writes content to file system.\nfunc (f *File) SaveTo(filename string) error {\n\treturn f.SaveToIndent(filename, \"\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/key.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Key represents a key under a section.\ntype Key struct {\n\ts               *Section\n\tname            string\n\tvalue           string\n\tisAutoIncrement bool\n\tisBooleanType   bool\n\n\tisShadow bool\n\tshadows  []*Key\n\n\tComment string\n}\n\n// newKey simply return a key object with given values.\nfunc newKey(s *Section, name, val string) *Key {\n\treturn &Key{\n\t\ts:     s,\n\t\tname:  name,\n\t\tvalue: val,\n\t}\n}\n\nfunc (k *Key) addShadow(val string) error {\n\tif k.isShadow {\n\t\treturn errors.New(\"cannot add shadow to another shadow key\")\n\t} else if k.isAutoIncrement || k.isBooleanType {\n\t\treturn errors.New(\"cannot add shadow to auto-increment or boolean key\")\n\t}\n\n\tshadow := newKey(k.s, k.name, val)\n\tshadow.isShadow = true\n\tk.shadows = append(k.shadows, shadow)\n\treturn nil\n}\n\n// AddShadow adds a new shadow key to itself.\nfunc (k *Key) AddShadow(val string) error {\n\tif !k.s.f.options.AllowShadows {\n\t\treturn errors.New(\"shadow key is not allowed\")\n\t}\n\treturn k.addShadow(val)\n}\n\n// ValueMapper represents a mapping function for values, e.g. os.ExpandEnv\ntype ValueMapper func(string) string\n\n// Name returns name of key.\nfunc (k *Key) Name() string {\n\treturn k.name\n}\n\n// Value returns raw value of key for performance purpose.\nfunc (k *Key) Value() string {\n\treturn k.value\n}\n\n// ValueWithShadows returns raw values of key and its shadows if any.\nfunc (k *Key) ValueWithShadows() []string {\n\tif len(k.shadows) == 0 {\n\t\treturn []string{k.value}\n\t}\n\tvals := make([]string, len(k.shadows)+1)\n\tvals[0] = k.value\n\tfor i := range k.shadows {\n\t\tvals[i+1] = k.shadows[i].value\n\t}\n\treturn vals\n}\n\n// transformValue takes a raw value and transforms to its final string.\nfunc (k *Key) transformValue(val string) string {\n\tif k.s.f.ValueMapper != nil {\n\t\tval = k.s.f.ValueMapper(val)\n\t}\n\n\t// Fail-fast if no indicate char found for recursive value\n\tif !strings.Contains(val, \"%\") {\n\t\treturn val\n\t}\n\tfor i := 0; i < _DEPTH_VALUES; i++ {\n\t\tvr := varPattern.FindString(val)\n\t\tif len(vr) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Take off leading '%(' and trailing ')s'.\n\t\tnoption := strings.TrimLeft(vr, \"%(\")\n\t\tnoption = strings.TrimRight(noption, \")s\")\n\n\t\t// Search in the same section.\n\t\tnk, err := k.s.GetKey(noption)\n\t\tif err != nil {\n\t\t\t// Search again in default section.\n\t\t\tnk, _ = k.s.f.Section(\"\").GetKey(noption)\n\t\t}\n\n\t\t// Substitute by new value and take off leading '%(' and trailing ')s'.\n\t\tval = strings.Replace(val, vr, nk.value, -1)\n\t}\n\treturn val\n}\n\n// String returns string representation of value.\nfunc (k *Key) String() string {\n\treturn k.transformValue(k.value)\n}\n\n// Validate accepts a validate function which can\n// return modifed result as key value.\nfunc (k *Key) Validate(fn func(string) string) string {\n\treturn fn(k.String())\n}\n\n// parseBool returns the boolean value represented by the string.\n//\n// It accepts 1, t, T, TRUE, true, True, YES, yes, Yes, y, ON, on, On,\n// 0, f, F, FALSE, false, False, NO, no, No, n, OFF, off, Off.\n// Any other value returns an error.\nfunc parseBool(str string) (value bool, err error) {\n\tswitch str {\n\tcase \"1\", \"t\", \"T\", \"true\", \"TRUE\", \"True\", \"YES\", \"yes\", \"Yes\", \"y\", \"ON\", \"on\", \"On\":\n\t\treturn true, nil\n\tcase \"0\", \"f\", \"F\", \"false\", \"FALSE\", \"False\", \"NO\", \"no\", \"No\", \"n\", \"OFF\", \"off\", \"Off\":\n\t\treturn false, nil\n\t}\n\treturn false, fmt.Errorf(\"parsing \\\"%s\\\": invalid syntax\", str)\n}\n\n// Bool returns bool type value.\nfunc (k *Key) Bool() (bool, error) {\n\treturn parseBool(k.String())\n}\n\n// Float64 returns float64 type value.\nfunc (k *Key) Float64() (float64, error) {\n\treturn strconv.ParseFloat(k.String(), 64)\n}\n\n// Int returns int type value.\nfunc (k *Key) Int() (int, error) {\n\treturn strconv.Atoi(k.String())\n}\n\n// Int64 returns int64 type value.\nfunc (k *Key) Int64() (int64, error) {\n\treturn strconv.ParseInt(k.String(), 10, 64)\n}\n\n// Uint returns uint type valued.\nfunc (k *Key) Uint() (uint, error) {\n\tu, e := strconv.ParseUint(k.String(), 10, 64)\n\treturn uint(u), e\n}\n\n// Uint64 returns uint64 type value.\nfunc (k *Key) Uint64() (uint64, error) {\n\treturn strconv.ParseUint(k.String(), 10, 64)\n}\n\n// Duration returns time.Duration type value.\nfunc (k *Key) Duration() (time.Duration, error) {\n\treturn time.ParseDuration(k.String())\n}\n\n// TimeFormat parses with given format and returns time.Time type value.\nfunc (k *Key) TimeFormat(format string) (time.Time, error) {\n\treturn time.Parse(format, k.String())\n}\n\n// Time parses with RFC3339 format and returns time.Time type value.\nfunc (k *Key) Time() (time.Time, error) {\n\treturn k.TimeFormat(time.RFC3339)\n}\n\n// MustString returns default value if key value is empty.\nfunc (k *Key) MustString(defaultVal string) string {\n\tval := k.String()\n\tif len(val) == 0 {\n\t\tk.value = defaultVal\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// MustBool always returns value without error,\n// it returns false if error occurs.\nfunc (k *Key) MustBool(defaultVal ...bool) bool {\n\tval, err := k.Bool()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatBool(defaultVal[0])\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustFloat64 always returns value without error,\n// it returns 0.0 if error occurs.\nfunc (k *Key) MustFloat64(defaultVal ...float64) float64 {\n\tval, err := k.Float64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatFloat(defaultVal[0], 'f', -1, 64)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustInt always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustInt(defaultVal ...int) int {\n\tval, err := k.Int()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatInt(int64(defaultVal[0]), 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustInt64 always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustInt64(defaultVal ...int64) int64 {\n\tval, err := k.Int64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatInt(defaultVal[0], 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustUint always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustUint(defaultVal ...uint) uint {\n\tval, err := k.Uint()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatUint(uint64(defaultVal[0]), 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustUint64 always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustUint64(defaultVal ...uint64) uint64 {\n\tval, err := k.Uint64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatUint(defaultVal[0], 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustDuration always returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustDuration(defaultVal ...time.Duration) time.Duration {\n\tval, err := k.Duration()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = defaultVal[0].String()\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustTimeFormat always parses with given format and returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustTimeFormat(format string, defaultVal ...time.Time) time.Time {\n\tval, err := k.TimeFormat(format)\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = defaultVal[0].Format(format)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustTime always parses with RFC3339 format and returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustTime(defaultVal ...time.Time) time.Time {\n\treturn k.MustTimeFormat(time.RFC3339, defaultVal...)\n}\n\n// In always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) In(defaultVal string, candidates []string) string {\n\tval := k.String()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InFloat64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InFloat64(defaultVal float64, candidates []float64) float64 {\n\tval := k.MustFloat64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InInt always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InInt(defaultVal int, candidates []int) int {\n\tval := k.MustInt()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InInt64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InInt64(defaultVal int64, candidates []int64) int64 {\n\tval := k.MustInt64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InUint always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InUint(defaultVal uint, candidates []uint) uint {\n\tval := k.MustUint()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InUint64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InUint64(defaultVal uint64, candidates []uint64) uint64 {\n\tval := k.MustUint64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InTimeFormat always parses with given format and returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InTimeFormat(format string, defaultVal time.Time, candidates []time.Time) time.Time {\n\tval := k.MustTimeFormat(format)\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InTime always parses with RFC3339 format and returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InTime(defaultVal time.Time, candidates []time.Time) time.Time {\n\treturn k.InTimeFormat(time.RFC3339, defaultVal, candidates)\n}\n\n// RangeFloat64 checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeFloat64(defaultVal, min, max float64) float64 {\n\tval := k.MustFloat64()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeInt checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeInt(defaultVal, min, max int) int {\n\tval := k.MustInt()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeInt64 checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeInt64(defaultVal, min, max int64) int64 {\n\tval := k.MustInt64()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeTimeFormat checks if value with given format is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeTimeFormat(format string, defaultVal, min, max time.Time) time.Time {\n\tval := k.MustTimeFormat(format)\n\tif val.Unix() < min.Unix() || val.Unix() > max.Unix() {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeTime checks if value with RFC3339 format is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeTime(defaultVal, min, max time.Time) time.Time {\n\treturn k.RangeTimeFormat(time.RFC3339, defaultVal, min, max)\n}\n\n// Strings returns list of string divided by given delimiter.\nfunc (k *Key) Strings(delim string) []string {\n\tstr := k.String()\n\tif len(str) == 0 {\n\t\treturn []string{}\n\t}\n\n\tvals := strings.Split(str, delim)\n\tfor i := range vals {\n\t\t// vals[i] = k.transformValue(strings.TrimSpace(vals[i]))\n\t\tvals[i] = strings.TrimSpace(vals[i])\n\t}\n\treturn vals\n}\n\n// StringsWithShadows returns list of string divided by given delimiter.\n// Shadows will also be appended if any.\nfunc (k *Key) StringsWithShadows(delim string) []string {\n\tvals := k.ValueWithShadows()\n\tresults := make([]string, 0, len(vals)*2)\n\tfor i := range vals {\n\t\tif len(vals) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tresults = append(results, strings.Split(vals[i], delim)...)\n\t}\n\n\tfor i := range results {\n\t\tresults[i] = k.transformValue(strings.TrimSpace(results[i]))\n\t}\n\treturn results\n}\n\n// Float64s returns list of float64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Float64s(delim string) []float64 {\n\tvals, _ := k.getFloat64s(delim, true, false)\n\treturn vals\n}\n\n// Ints returns list of int divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Ints(delim string) []int {\n\tvals, _ := k.parseInts(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Int64s returns list of int64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Int64s(delim string) []int64 {\n\tvals, _ := k.parseInt64s(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Uints returns list of uint divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Uints(delim string) []uint {\n\tvals, _ := k.getUints(delim, true, false)\n\treturn vals\n}\n\n// Uint64s returns list of uint64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Uint64s(delim string) []uint64 {\n\tvals, _ := k.getUint64s(delim, true, false)\n\treturn vals\n}\n\n// TimesFormat parses with given format and returns list of time.Time divided by given delimiter.\n// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).\nfunc (k *Key) TimesFormat(format, delim string) []time.Time {\n\tvals, _ := k.getTimesFormat(format, delim, true, false)\n\treturn vals\n}\n\n// Times parses with RFC3339 format and returns list of time.Time divided by given delimiter.\n// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).\nfunc (k *Key) Times(delim string) []time.Time {\n\treturn k.TimesFormat(time.RFC3339, delim)\n}\n\n// ValidFloat64s returns list of float64 divided by given delimiter. If some value is not float, then\n// it will not be included to result list.\nfunc (k *Key) ValidFloat64s(delim string) []float64 {\n\tvals, _ := k.getFloat64s(delim, false, false)\n\treturn vals\n}\n\n// ValidInts returns list of int divided by given delimiter. If some value is not integer, then it will\n// not be included to result list.\nfunc (k *Key) ValidInts(delim string) []int {\n\tvals, _ := k.parseInts(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidInt64s returns list of int64 divided by given delimiter. If some value is not 64-bit integer,\n// then it will not be included to result list.\nfunc (k *Key) ValidInt64s(delim string) []int64 {\n\tvals, _ := k.parseInt64s(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidUints returns list of uint divided by given delimiter. If some value is not unsigned integer,\n// then it will not be included to result list.\nfunc (k *Key) ValidUints(delim string) []uint {\n\tvals, _ := k.getUints(delim, false, false)\n\treturn vals\n}\n\n// ValidUint64s returns list of uint64 divided by given delimiter. If some value is not 64-bit unsigned\n// integer, then it will not be included to result list.\nfunc (k *Key) ValidUint64s(delim string) []uint64 {\n\tvals, _ := k.getUint64s(delim, false, false)\n\treturn vals\n}\n\n// ValidTimesFormat parses with given format and returns list of time.Time divided by given delimiter.\nfunc (k *Key) ValidTimesFormat(format, delim string) []time.Time {\n\tvals, _ := k.getTimesFormat(format, delim, false, false)\n\treturn vals\n}\n\n// ValidTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter.\nfunc (k *Key) ValidTimes(delim string) []time.Time {\n\treturn k.ValidTimesFormat(time.RFC3339, delim)\n}\n\n// StrictFloat64s returns list of float64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictFloat64s(delim string) ([]float64, error) {\n\treturn k.getFloat64s(delim, false, true)\n}\n\n// StrictInts returns list of int divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictInts(delim string) ([]int, error) {\n\treturn k.parseInts(k.Strings(delim), false, true)\n}\n\n// StrictInt64s returns list of int64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictInt64s(delim string) ([]int64, error) {\n\treturn k.parseInt64s(k.Strings(delim), false, true)\n}\n\n// StrictUints returns list of uint divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictUints(delim string) ([]uint, error) {\n\treturn k.getUints(delim, false, true)\n}\n\n// StrictUint64s returns list of uint64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictUint64s(delim string) ([]uint64, error) {\n\treturn k.getUint64s(delim, false, true)\n}\n\n// StrictTimesFormat parses with given format and returns list of time.Time divided by given delimiter\n// or error on first invalid input.\nfunc (k *Key) StrictTimesFormat(format, delim string) ([]time.Time, error) {\n\treturn k.getTimesFormat(format, delim, false, true)\n}\n\n// StrictTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter\n// or error on first invalid input.\nfunc (k *Key) StrictTimes(delim string) ([]time.Time, error) {\n\treturn k.StrictTimesFormat(time.RFC3339, delim)\n}\n\n// getFloat64s returns list of float64 divided by given delimiter.\nfunc (k *Key) getFloat64s(delim string, addInvalid, returnOnInvalid bool) ([]float64, error) {\n\tstrs := k.Strings(delim)\n\tvals := make([]float64, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := strconv.ParseFloat(str, 64)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// parseInts transforms strings to ints.\nfunc (k *Key) parseInts(strs []string, addInvalid, returnOnInvalid bool) ([]int, error) {\n\tvals := make([]int, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := strconv.Atoi(str)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// parseInt64s transforms strings to int64s.\nfunc (k *Key) parseInt64s(strs []string, addInvalid, returnOnInvalid bool) ([]int64, error) {\n\tvals := make([]int64, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := strconv.ParseInt(str, 10, 64)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// getUints returns list of uint divided by given delimiter.\nfunc (k *Key) getUints(delim string, addInvalid, returnOnInvalid bool) ([]uint, error) {\n\tstrs := k.Strings(delim)\n\tvals := make([]uint, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := strconv.ParseUint(str, 10, 0)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, uint(val))\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// getUint64s returns list of uint64 divided by given delimiter.\nfunc (k *Key) getUint64s(delim string, addInvalid, returnOnInvalid bool) ([]uint64, error) {\n\tstrs := k.Strings(delim)\n\tvals := make([]uint64, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := strconv.ParseUint(str, 10, 64)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// getTimesFormat parses with given format and returns list of time.Time divided by given delimiter.\nfunc (k *Key) getTimesFormat(format, delim string, addInvalid, returnOnInvalid bool) ([]time.Time, error) {\n\tstrs := k.Strings(delim)\n\tvals := make([]time.Time, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := time.Parse(format, str)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// SetValue changes key value.\nfunc (k *Key) SetValue(v string) {\n\tif k.s.f.BlockMode {\n\t\tk.s.f.lock.Lock()\n\t\tdefer k.s.f.lock.Unlock()\n\t}\n\n\tk.value = v\n\tk.s.keysHash[k.name] = v\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/parser.go",
    "content": "// Copyright 2015 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\ntype tokenType int\n\nconst (\n\t_TOKEN_INVALID tokenType = iota\n\t_TOKEN_COMMENT\n\t_TOKEN_SECTION\n\t_TOKEN_KEY\n)\n\ntype parser struct {\n\tbuf     *bufio.Reader\n\tisEOF   bool\n\tcount   int\n\tcomment *bytes.Buffer\n}\n\nfunc newParser(r io.Reader) *parser {\n\treturn &parser{\n\t\tbuf:     bufio.NewReader(r),\n\t\tcount:   1,\n\t\tcomment: &bytes.Buffer{},\n\t}\n}\n\n// BOM handles header of UTF-8, UTF-16 LE and UTF-16 BE's BOM format.\n// http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding\nfunc (p *parser) BOM() error {\n\tmask, err := p.buf.Peek(2)\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t} else if len(mask) < 2 {\n\t\treturn nil\n\t}\n\n\tswitch {\n\tcase mask[0] == 254 && mask[1] == 255:\n\t\tfallthrough\n\tcase mask[0] == 255 && mask[1] == 254:\n\t\tp.buf.Read(mask)\n\tcase mask[0] == 239 && mask[1] == 187:\n\t\tmask, err := p.buf.Peek(3)\n\t\tif err != nil && err != io.EOF {\n\t\t\treturn err\n\t\t} else if len(mask) < 3 {\n\t\t\treturn nil\n\t\t}\n\t\tif mask[2] == 191 {\n\t\t\tp.buf.Read(mask)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *parser) readUntil(delim byte) ([]byte, error) {\n\tdata, err := p.buf.ReadBytes(delim)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\tp.isEOF = true\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn data, nil\n}\n\nfunc cleanComment(in []byte) ([]byte, bool) {\n\ti := bytes.IndexAny(in, \"#;\")\n\tif i == -1 {\n\t\treturn nil, false\n\t}\n\treturn in[i:], true\n}\n\nfunc readKeyName(in []byte) (string, int, error) {\n\tline := string(in)\n\n\t// Check if key name surrounded by quotes.\n\tvar keyQuote string\n\tif line[0] == '\"' {\n\t\tif len(line) > 6 && string(line[0:3]) == `\"\"\"` {\n\t\t\tkeyQuote = `\"\"\"`\n\t\t} else {\n\t\t\tkeyQuote = `\"`\n\t\t}\n\t} else if line[0] == '`' {\n\t\tkeyQuote = \"`\"\n\t}\n\n\t// Get out key name\n\tendIdx := -1\n\tif len(keyQuote) > 0 {\n\t\tstartIdx := len(keyQuote)\n\t\t// FIXME: fail case -> \"\"\"\"\"\"name\"\"\"=value\n\t\tpos := strings.Index(line[startIdx:], keyQuote)\n\t\tif pos == -1 {\n\t\t\treturn \"\", -1, fmt.Errorf(\"missing closing key quote: %s\", line)\n\t\t}\n\t\tpos += startIdx\n\n\t\t// Find key-value delimiter\n\t\ti := strings.IndexAny(line[pos+startIdx:], \"=:\")\n\t\tif i < 0 {\n\t\t\treturn \"\", -1, ErrDelimiterNotFound{line}\n\t\t}\n\t\tendIdx = pos + i\n\t\treturn strings.TrimSpace(line[startIdx:pos]), endIdx + startIdx + 1, nil\n\t}\n\n\tendIdx = strings.IndexAny(line, \"=:\")\n\tif endIdx < 0 {\n\t\treturn \"\", -1, ErrDelimiterNotFound{line}\n\t}\n\treturn strings.TrimSpace(line[0:endIdx]), endIdx + 1, nil\n}\n\nfunc (p *parser) readMultilines(line, val, valQuote string) (string, error) {\n\tfor {\n\t\tdata, err := p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tnext := string(data)\n\n\t\tpos := strings.LastIndex(next, valQuote)\n\t\tif pos > -1 {\n\t\t\tval += next[:pos]\n\n\t\t\tcomment, has := cleanComment([]byte(next[pos:]))\n\t\t\tif has {\n\t\t\t\tp.comment.Write(bytes.TrimSpace(comment))\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tval += next\n\t\tif p.isEOF {\n\t\t\treturn \"\", fmt.Errorf(\"missing closing key quote from '%s' to '%s'\", line, next)\n\t\t}\n\t}\n\treturn val, nil\n}\n\nfunc (p *parser) readContinuationLines(val string) (string, error) {\n\tfor {\n\t\tdata, err := p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tnext := strings.TrimSpace(string(data))\n\n\t\tif len(next) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tval += next\n\t\tif val[len(val)-1] != '\\\\' {\n\t\t\tbreak\n\t\t}\n\t\tval = val[:len(val)-1]\n\t}\n\treturn val, nil\n}\n\n// hasSurroundedQuote check if and only if the first and last characters\n// are quotes \\\" or \\'.\n// It returns false if any other parts also contain same kind of quotes.\nfunc hasSurroundedQuote(in string, quote byte) bool {\n\treturn len(in) > 2 && in[0] == quote && in[len(in)-1] == quote &&\n\t\tstrings.IndexByte(in[1:], quote) == len(in)-2\n}\n\nfunc (p *parser) readValue(in []byte, ignoreContinuation bool) (string, error) {\n\tline := strings.TrimLeftFunc(string(in), unicode.IsSpace)\n\tif len(line) == 0 {\n\t\treturn \"\", nil\n\t}\n\n\tvar valQuote string\n\tif len(line) > 3 && string(line[0:3]) == `\"\"\"` {\n\t\tvalQuote = `\"\"\"`\n\t} else if line[0] == '`' {\n\t\tvalQuote = \"`\"\n\t}\n\n\tif len(valQuote) > 0 {\n\t\tstartIdx := len(valQuote)\n\t\tpos := strings.LastIndex(line[startIdx:], valQuote)\n\t\t// Check for multi-line value\n\t\tif pos == -1 {\n\t\t\treturn p.readMultilines(line, line[startIdx:], valQuote)\n\t\t}\n\n\t\treturn line[startIdx : pos+startIdx], nil\n\t}\n\n\t// Won't be able to reach here if value only contains whitespace.\n\tline = strings.TrimSpace(line)\n\n\t// Check continuation lines when desired.\n\tif !ignoreContinuation && line[len(line)-1] == '\\\\' {\n\t\treturn p.readContinuationLines(line[:len(line)-1])\n\t}\n\n\ti := strings.IndexAny(line, \"#;\")\n\tif i > -1 {\n\t\tp.comment.WriteString(line[i:])\n\t\tline = strings.TrimSpace(line[:i])\n\t}\n\n\t// Trim single quotes\n\tif hasSurroundedQuote(line, '\\'') ||\n\t\thasSurroundedQuote(line, '\"') {\n\t\tline = line[1 : len(line)-1]\n\t}\n\treturn line, nil\n}\n\n// parse parses data through an io.Reader.\nfunc (f *File) parse(reader io.Reader) (err error) {\n\tp := newParser(reader)\n\tif err = p.BOM(); err != nil {\n\t\treturn fmt.Errorf(\"BOM: %v\", err)\n\t}\n\n\t// Ignore error because default section name is never empty string.\n\tsection, _ := f.NewSection(DEFAULT_SECTION)\n\n\tvar line []byte\n\tvar inUnparseableSection bool\n\tfor !p.isEOF {\n\t\tline, err = p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tline = bytes.TrimLeftFunc(line, unicode.IsSpace)\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Comments\n\t\tif line[0] == '#' || line[0] == ';' {\n\t\t\t// Note: we do not care ending line break,\n\t\t\t// it is needed for adding second line,\n\t\t\t// so just clean it once at the end when set to value.\n\t\t\tp.comment.Write(line)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Section\n\t\tif line[0] == '[' {\n\t\t\t// Read to the next ']' (TODO: support quoted strings)\n\t\t\t// TODO(unknwon): use LastIndexByte when stop supporting Go1.4\n\t\t\tcloseIdx := bytes.LastIndex(line, []byte(\"]\"))\n\t\t\tif closeIdx == -1 {\n\t\t\t\treturn fmt.Errorf(\"unclosed section: %s\", line)\n\t\t\t}\n\n\t\t\tname := string(line[1:closeIdx])\n\t\t\tsection, err = f.NewSection(name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tcomment, has := cleanComment(line[closeIdx+1:])\n\t\t\tif has {\n\t\t\t\tp.comment.Write(comment)\n\t\t\t}\n\n\t\t\tsection.Comment = strings.TrimSpace(p.comment.String())\n\n\t\t\t// Reset aotu-counter and comments\n\t\t\tp.comment.Reset()\n\t\t\tp.count = 1\n\n\t\t\tinUnparseableSection = false\n\t\t\tfor i := range f.options.UnparseableSections {\n\t\t\t\tif f.options.UnparseableSections[i] == name ||\n\t\t\t\t\t(f.options.Insensitive && strings.ToLower(f.options.UnparseableSections[i]) == strings.ToLower(name)) {\n\t\t\t\t\tinUnparseableSection = true\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif inUnparseableSection {\n\t\t\tsection.isRawSection = true\n\t\t\tsection.rawBody += string(line)\n\t\t\tcontinue\n\t\t}\n\n\t\tkname, offset, err := readKeyName(line)\n\t\tif err != nil {\n\t\t\t// Treat as boolean key when desired, and whole line is key name.\n\t\t\tif IsErrDelimiterNotFound(err) && f.options.AllowBooleanKeys {\n\t\t\t\tkname, err := p.readValue(line, f.options.IgnoreContinuation)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tkey, err := section.NewBooleanKey(kname)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tkey.Comment = strings.TrimSpace(p.comment.String())\n\t\t\t\tp.comment.Reset()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\t// Auto increment.\n\t\tisAutoIncr := false\n\t\tif kname == \"-\" {\n\t\t\tisAutoIncr = true\n\t\t\tkname = \"#\" + strconv.Itoa(p.count)\n\t\t\tp.count++\n\t\t}\n\n\t\tvalue, err := p.readValue(line[offset:], f.options.IgnoreContinuation)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tkey, err := section.NewKey(kname, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey.isAutoIncrement = isAutoIncr\n\t\tkey.Comment = strings.TrimSpace(p.comment.String())\n\t\tp.comment.Reset()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/section.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Section represents a config section.\ntype Section struct {\n\tf        *File\n\tComment  string\n\tname     string\n\tkeys     map[string]*Key\n\tkeyList  []string\n\tkeysHash map[string]string\n\n\tisRawSection bool\n\trawBody      string\n}\n\nfunc newSection(f *File, name string) *Section {\n\treturn &Section{\n\t\tf:        f,\n\t\tname:     name,\n\t\tkeys:     make(map[string]*Key),\n\t\tkeyList:  make([]string, 0, 10),\n\t\tkeysHash: make(map[string]string),\n\t}\n}\n\n// Name returns name of Section.\nfunc (s *Section) Name() string {\n\treturn s.name\n}\n\n// Body returns rawBody of Section if the section was marked as unparseable.\n// It still follows the other rules of the INI format surrounding leading/trailing whitespace.\nfunc (s *Section) Body() string {\n\treturn strings.TrimSpace(s.rawBody)\n}\n\n// NewKey creates a new key to given section.\nfunc (s *Section) NewKey(name, val string) (*Key, error) {\n\tif len(name) == 0 {\n\t\treturn nil, errors.New(\"error creating new key: empty key name\")\n\t} else if s.f.options.Insensitive {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif s.f.BlockMode {\n\t\ts.f.lock.Lock()\n\t\tdefer s.f.lock.Unlock()\n\t}\n\n\tif inSlice(name, s.keyList) {\n\t\tif s.f.options.AllowShadows {\n\t\t\tif err := s.keys[name].addShadow(val); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\ts.keys[name].value = val\n\t\t}\n\t\treturn s.keys[name], nil\n\t}\n\n\ts.keyList = append(s.keyList, name)\n\ts.keys[name] = newKey(s, name, val)\n\ts.keysHash[name] = val\n\treturn s.keys[name], nil\n}\n\n// NewBooleanKey creates a new boolean type key to given section.\nfunc (s *Section) NewBooleanKey(name string) (*Key, error) {\n\tkey, err := s.NewKey(name, \"true\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey.isBooleanType = true\n\treturn key, nil\n}\n\n// GetKey returns key in section by given name.\nfunc (s *Section) GetKey(name string) (*Key, error) {\n\t// FIXME: change to section level lock?\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t}\n\tif s.f.options.Insensitive {\n\t\tname = strings.ToLower(name)\n\t}\n\tkey := s.keys[name]\n\tif s.f.BlockMode {\n\t\ts.f.lock.RUnlock()\n\t}\n\n\tif key == nil {\n\t\t// Check if it is a child-section.\n\t\tsname := s.name\n\t\tfor {\n\t\t\tif i := strings.LastIndex(sname, \".\"); i > -1 {\n\t\t\t\tsname = sname[:i]\n\t\t\t\tsec, err := s.f.GetSection(sname)\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn sec.GetKey(name)\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn nil, fmt.Errorf(\"error when getting key of section '%s': key '%s' not exists\", s.name, name)\n\t}\n\treturn key, nil\n}\n\n// HasKey returns true if section contains a key with given name.\nfunc (s *Section) HasKey(name string) bool {\n\tkey, _ := s.GetKey(name)\n\treturn key != nil\n}\n\n// Haskey is a backwards-compatible name for HasKey.\nfunc (s *Section) Haskey(name string) bool {\n\treturn s.HasKey(name)\n}\n\n// HasValue returns true if section contains given raw value.\nfunc (s *Section) HasValue(value string) bool {\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t\tdefer s.f.lock.RUnlock()\n\t}\n\n\tfor _, k := range s.keys {\n\t\tif value == k.value {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Key assumes named Key exists in section and returns a zero-value when not.\nfunc (s *Section) Key(name string) *Key {\n\tkey, err := s.GetKey(name)\n\tif err != nil {\n\t\t// It's OK here because the only possible error is empty key name,\n\t\t// but if it's empty, this piece of code won't be executed.\n\t\tkey, _ = s.NewKey(name, \"\")\n\t\treturn key\n\t}\n\treturn key\n}\n\n// Keys returns list of keys of section.\nfunc (s *Section) Keys() []*Key {\n\tkeys := make([]*Key, len(s.keyList))\n\tfor i := range s.keyList {\n\t\tkeys[i] = s.Key(s.keyList[i])\n\t}\n\treturn keys\n}\n\n// ParentKeys returns list of keys of parent section.\nfunc (s *Section) ParentKeys() []*Key {\n\tvar parentKeys []*Key\n\tsname := s.name\n\tfor {\n\t\tif i := strings.LastIndex(sname, \".\"); i > -1 {\n\t\t\tsname = sname[:i]\n\t\t\tsec, err := s.f.GetSection(sname)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tparentKeys = append(parentKeys, sec.Keys()...)\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\n\t}\n\treturn parentKeys\n}\n\n// KeyStrings returns list of key names of section.\nfunc (s *Section) KeyStrings() []string {\n\tlist := make([]string, len(s.keyList))\n\tcopy(list, s.keyList)\n\treturn list\n}\n\n// KeysHash returns keys hash consisting of names and values.\nfunc (s *Section) KeysHash() map[string]string {\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t\tdefer s.f.lock.RUnlock()\n\t}\n\n\thash := map[string]string{}\n\tfor key, value := range s.keysHash {\n\t\thash[key] = value\n\t}\n\treturn hash\n}\n\n// DeleteKey deletes a key from section.\nfunc (s *Section) DeleteKey(name string) {\n\tif s.f.BlockMode {\n\t\ts.f.lock.Lock()\n\t\tdefer s.f.lock.Unlock()\n\t}\n\n\tfor i, k := range s.keyList {\n\t\tif k == name {\n\t\t\ts.keyList = append(s.keyList[:i], s.keyList[i+1:]...)\n\t\t\tdelete(s.keys, name)\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini/struct.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n)\n\n// NameMapper represents a ini tag name mapper.\ntype NameMapper func(string) string\n\n// Built-in name getters.\nvar (\n\t// AllCapsUnderscore converts to format ALL_CAPS_UNDERSCORE.\n\tAllCapsUnderscore NameMapper = func(raw string) string {\n\t\tnewstr := make([]rune, 0, len(raw))\n\t\tfor i, chr := range raw {\n\t\t\tif isUpper := 'A' <= chr && chr <= 'Z'; isUpper {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tnewstr = append(newstr, '_')\n\t\t\t\t}\n\t\t\t}\n\t\t\tnewstr = append(newstr, unicode.ToUpper(chr))\n\t\t}\n\t\treturn string(newstr)\n\t}\n\t// TitleUnderscore converts to format title_underscore.\n\tTitleUnderscore NameMapper = func(raw string) string {\n\t\tnewstr := make([]rune, 0, len(raw))\n\t\tfor i, chr := range raw {\n\t\t\tif isUpper := 'A' <= chr && chr <= 'Z'; isUpper {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tnewstr = append(newstr, '_')\n\t\t\t\t}\n\t\t\t\tchr -= ('A' - 'a')\n\t\t\t}\n\t\t\tnewstr = append(newstr, chr)\n\t\t}\n\t\treturn string(newstr)\n\t}\n)\n\nfunc (s *Section) parseFieldName(raw, actual string) string {\n\tif len(actual) > 0 {\n\t\treturn actual\n\t}\n\tif s.f.NameMapper != nil {\n\t\treturn s.f.NameMapper(raw)\n\t}\n\treturn raw\n}\n\nfunc parseDelim(actual string) string {\n\tif len(actual) > 0 {\n\t\treturn actual\n\t}\n\treturn \",\"\n}\n\nvar reflectTime = reflect.TypeOf(time.Now()).Kind()\n\n// setSliceWithProperType sets proper values to slice based on its type.\nfunc setSliceWithProperType(key *Key, field reflect.Value, delim string, allowShadow bool) error {\n\tvar strs []string\n\tif allowShadow {\n\t\tstrs = key.StringsWithShadows(delim)\n\t} else {\n\t\tstrs = key.Strings(delim)\n\t}\n\n\tnumVals := len(strs)\n\tif numVals == 0 {\n\t\treturn nil\n\t}\n\n\tvar vals interface{}\n\n\tsliceOf := field.Type().Elem().Kind()\n\tswitch sliceOf {\n\tcase reflect.String:\n\t\tvals = strs\n\tcase reflect.Int:\n\t\tvals, _ = key.parseInts(strs, true, false)\n\tcase reflect.Int64:\n\t\tvals, _ = key.parseInt64s(strs, true, false)\n\tcase reflect.Uint:\n\t\tvals = key.Uints(delim)\n\tcase reflect.Uint64:\n\t\tvals = key.Uint64s(delim)\n\tcase reflect.Float64:\n\t\tvals = key.Float64s(delim)\n\tcase reflectTime:\n\t\tvals = key.Times(delim)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type '[]%s'\", sliceOf)\n\t}\n\n\tslice := reflect.MakeSlice(field.Type(), numVals, numVals)\n\tfor i := 0; i < numVals; i++ {\n\t\tswitch sliceOf {\n\t\tcase reflect.String:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]string)[i]))\n\t\tcase reflect.Int:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]int)[i]))\n\t\tcase reflect.Int64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]int64)[i]))\n\t\tcase reflect.Uint:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]uint)[i]))\n\t\tcase reflect.Uint64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]uint64)[i]))\n\t\tcase reflect.Float64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]float64)[i]))\n\t\tcase reflectTime:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]time.Time)[i]))\n\t\t}\n\t}\n\tfield.Set(slice)\n\treturn nil\n}\n\n// setWithProperType sets proper value to field based on its type,\n// but it does not return error for failing parsing,\n// because we want to use default value that is already assigned to strcut.\nfunc setWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string, allowShadow bool) error {\n\tswitch t.Kind() {\n\tcase reflect.String:\n\t\tif len(key.String()) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\tfield.SetString(key.String())\n\tcase reflect.Bool:\n\t\tboolVal, err := key.Bool()\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tfield.SetBool(boolVal)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tdurationVal, err := key.Duration()\n\t\t// Skip zero value\n\t\tif err == nil && int(durationVal) > 0 {\n\t\t\tfield.Set(reflect.ValueOf(durationVal))\n\t\t\treturn nil\n\t\t}\n\n\t\tintVal, err := key.Int64()\n\t\tif err != nil || intVal == 0 {\n\t\t\treturn nil\n\t\t}\n\t\tfield.SetInt(intVal)\n\t//\tbyte is an alias for uint8, so supporting uint8 breaks support for byte\n\tcase reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tdurationVal, err := key.Duration()\n\t\t// Skip zero value\n\t\tif err == nil && int(durationVal) > 0 {\n\t\t\tfield.Set(reflect.ValueOf(durationVal))\n\t\t\treturn nil\n\t\t}\n\n\t\tuintVal, err := key.Uint64()\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tfield.SetUint(uintVal)\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tfloatVal, err := key.Float64()\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tfield.SetFloat(floatVal)\n\tcase reflectTime:\n\t\ttimeVal, err := key.Time()\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tfield.Set(reflect.ValueOf(timeVal))\n\tcase reflect.Slice:\n\t\treturn setSliceWithProperType(key, field, delim, allowShadow)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type '%s'\", t)\n\t}\n\treturn nil\n}\n\nfunc parseTagOptions(tag string) (rawName string, omitEmpty bool, allowShadow bool) {\n\topts := strings.SplitN(tag, \",\", 3)\n\trawName = opts[0]\n\tif len(opts) > 1 {\n\t\tomitEmpty = opts[1] == \"omitempty\"\n\t}\n\tif len(opts) > 2 {\n\t\tallowShadow = opts[2] == \"allowshadow\"\n\t}\n\treturn rawName, omitEmpty, allowShadow\n}\n\nfunc (s *Section) mapTo(val reflect.Value) error {\n\tif val.Kind() == reflect.Ptr {\n\t\tval = val.Elem()\n\t}\n\ttyp := val.Type()\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tfield := val.Field(i)\n\t\ttpField := typ.Field(i)\n\n\t\ttag := tpField.Tag.Get(\"ini\")\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\trawName, _, allowShadow := parseTagOptions(tag)\n\t\tfieldName := s.parseFieldName(tpField.Name, rawName)\n\t\tif len(fieldName) == 0 || !field.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tisAnonymous := tpField.Type.Kind() == reflect.Ptr && tpField.Anonymous\n\t\tisStruct := tpField.Type.Kind() == reflect.Struct\n\t\tif isAnonymous {\n\t\t\tfield.Set(reflect.New(tpField.Type.Elem()))\n\t\t}\n\n\t\tif isAnonymous || isStruct {\n\t\t\tif sec, err := s.f.GetSection(fieldName); err == nil {\n\t\t\t\tif err = sec.mapTo(field); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"error mapping field(%s): %v\", fieldName, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif key, err := s.GetKey(fieldName); err == nil {\n\t\t\tdelim := parseDelim(tpField.Tag.Get(\"delim\"))\n\t\t\tif err = setWithProperType(tpField.Type, key, field, delim, allowShadow); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error mapping field(%s): %v\", fieldName, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// MapTo maps section to given struct.\nfunc (s *Section) MapTo(v interface{}) error {\n\ttyp := reflect.TypeOf(v)\n\tval := reflect.ValueOf(v)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t\tval = val.Elem()\n\t} else {\n\t\treturn errors.New(\"cannot map to non-pointer struct\")\n\t}\n\n\treturn s.mapTo(val)\n}\n\n// MapTo maps file to given struct.\nfunc (f *File) MapTo(v interface{}) error {\n\treturn f.Section(\"\").MapTo(v)\n}\n\n// MapTo maps data sources to given struct with name mapper.\nfunc MapToWithMapper(v interface{}, mapper NameMapper, source interface{}, others ...interface{}) error {\n\tcfg, err := Load(source, others...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcfg.NameMapper = mapper\n\treturn cfg.MapTo(v)\n}\n\n// MapTo maps data sources to given struct.\nfunc MapTo(v, source interface{}, others ...interface{}) error {\n\treturn MapToWithMapper(v, nil, source, others...)\n}\n\n// reflectSliceWithProperType does the opposite thing as setSliceWithProperType.\nfunc reflectSliceWithProperType(key *Key, field reflect.Value, delim string) error {\n\tslice := field.Slice(0, field.Len())\n\tif field.Len() == 0 {\n\t\treturn nil\n\t}\n\n\tvar buf bytes.Buffer\n\tsliceOf := field.Type().Elem().Kind()\n\tfor i := 0; i < field.Len(); i++ {\n\t\tswitch sliceOf {\n\t\tcase reflect.String:\n\t\t\tbuf.WriteString(slice.Index(i).String())\n\t\tcase reflect.Int, reflect.Int64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Int()))\n\t\tcase reflect.Uint, reflect.Uint64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Uint()))\n\t\tcase reflect.Float64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Float()))\n\t\tcase reflectTime:\n\t\t\tbuf.WriteString(slice.Index(i).Interface().(time.Time).Format(time.RFC3339))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported type '[]%s'\", sliceOf)\n\t\t}\n\t\tbuf.WriteString(delim)\n\t}\n\tkey.SetValue(buf.String()[:buf.Len()-1])\n\treturn nil\n}\n\n// reflectWithProperType does the opposite thing as setWithProperType.\nfunc reflectWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string) error {\n\tswitch t.Kind() {\n\tcase reflect.String:\n\t\tkey.SetValue(field.String())\n\tcase reflect.Bool:\n\t\tkey.SetValue(fmt.Sprint(field.Bool()))\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tkey.SetValue(fmt.Sprint(field.Int()))\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tkey.SetValue(fmt.Sprint(field.Uint()))\n\tcase reflect.Float32, reflect.Float64:\n\t\tkey.SetValue(fmt.Sprint(field.Float()))\n\tcase reflectTime:\n\t\tkey.SetValue(fmt.Sprint(field.Interface().(time.Time).Format(time.RFC3339)))\n\tcase reflect.Slice:\n\t\treturn reflectSliceWithProperType(key, field, delim)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type '%s'\", t)\n\t}\n\treturn nil\n}\n\n// CR: copied from encoding/json/encode.go with modifications of time.Time support.\n// TODO: add more test coverage.\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 reflectTime:\n\t\treturn v.Interface().(time.Time).IsZero()\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n\nfunc (s *Section) reflectFrom(val reflect.Value) error {\n\tif val.Kind() == reflect.Ptr {\n\t\tval = val.Elem()\n\t}\n\ttyp := val.Type()\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tfield := val.Field(i)\n\t\ttpField := typ.Field(i)\n\n\t\ttag := tpField.Tag.Get(\"ini\")\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\topts := strings.SplitN(tag, \",\", 2)\n\t\tif len(opts) == 2 && opts[1] == \"omitempty\" && isEmptyValue(field) {\n\t\t\tcontinue\n\t\t}\n\n\t\tfieldName := s.parseFieldName(tpField.Name, opts[0])\n\t\tif len(fieldName) == 0 || !field.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif (tpField.Type.Kind() == reflect.Ptr && tpField.Anonymous) ||\n\t\t\t(tpField.Type.Kind() == reflect.Struct && tpField.Type.Name() != \"Time\") {\n\t\t\t// Note: The only error here is section doesn't exist.\n\t\t\tsec, err := s.f.GetSection(fieldName)\n\t\t\tif err != nil {\n\t\t\t\t// Note: fieldName can never be empty here, ignore error.\n\t\t\t\tsec, _ = s.f.NewSection(fieldName)\n\t\t\t}\n\t\t\tif err = sec.reflectFrom(field); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error reflecting field (%s): %v\", fieldName, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Note: Same reason as secion.\n\t\tkey, err := s.GetKey(fieldName)\n\t\tif err != nil {\n\t\t\tkey, _ = s.NewKey(fieldName, \"\")\n\t\t}\n\t\tif err = reflectWithProperType(tpField.Type, key, field, parseDelim(tpField.Tag.Get(\"delim\"))); err != nil {\n\t\t\treturn fmt.Errorf(\"error reflecting field (%s): %v\", fieldName, err)\n\t\t}\n\n\t}\n\treturn nil\n}\n\n// ReflectFrom reflects secion from given struct.\nfunc (s *Section) ReflectFrom(v interface{}) error {\n\ttyp := reflect.TypeOf(v)\n\tval := reflect.ValueOf(v)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t\tval = val.Elem()\n\t} else {\n\t\treturn errors.New(\"cannot reflect from non-pointer struct\")\n\t}\n\n\treturn s.reflectFrom(val)\n}\n\n// ReflectFrom reflects file from given struct.\nfunc (f *File) ReflectFrom(v interface{}) error {\n\treturn f.Section(\"\").ReflectFrom(v)\n}\n\n// ReflectFrom reflects data sources from given struct with name mapper.\nfunc ReflectFromWithMapper(cfg *File, v interface{}, mapper NameMapper) error {\n\tcfg.NameMapper = mapper\n\treturn cfg.ReflectFrom(v)\n}\n\n// ReflectFrom reflects data sources from given struct.\nfunc ReflectFrom(cfg *File, v interface{}) error {\n\treturn ReflectFromWithMapper(cfg, v, nil)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/jmespath/go-jmespath/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/vendor/github.com/jmespath/go-jmespath/fuzz/jmespath.go",
    "content": "package jmespath\n\nimport \"github.com/jmespath/go-jmespath\"\n\n// Fuzz will fuzz test the JMESPath parser.\nfunc Fuzz(data []byte) int {\n\tp := jmespath.NewParser()\n\t_, err := p.Parse(string(data))\n\tif err != nil {\n\t\treturn 1\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/aws/aws-sdk-go/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": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 go-logfmt\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": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/decode.go",
    "content": "package logfmt\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"unicode/utf8\"\n)\n\n// A Decoder reads and decodes logfmt records from an input stream.\ntype Decoder struct {\n\tpos     int\n\tkey     []byte\n\tvalue   []byte\n\tlineNum int\n\ts       *bufio.Scanner\n\terr     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 beyond\n// the logfmt records requested.\nfunc NewDecoder(r io.Reader) *Decoder {\n\tdec := &Decoder{\n\t\ts: bufio.NewScanner(r),\n\t}\n\treturn dec\n}\n\n// ScanRecord advances the Decoder to the next record, which can then be\n// parsed with the ScanKeyval method. It returns false when decoding stops,\n// either by reaching the end of the input or an error. After ScanRecord\n// returns false, the Err method will return any error that occurred during\n// decoding, except that if it was io.EOF, Err will return nil.\nfunc (dec *Decoder) ScanRecord() bool {\n\tif dec.err != nil {\n\t\treturn false\n\t}\n\tif !dec.s.Scan() {\n\t\tdec.err = dec.s.Err()\n\t\treturn false\n\t}\n\tdec.lineNum++\n\tdec.pos = 0\n\treturn true\n}\n\n// ScanKeyval advances the Decoder to the next key/value pair of the current\n// record, which can then be retrieved with the Key and Value methods. It\n// returns false when decoding stops, either by reaching the end of the\n// current record or an error.\nfunc (dec *Decoder) ScanKeyval() bool {\n\tdec.key, dec.value = nil, nil\n\tif dec.err != nil {\n\t\treturn false\n\t}\n\n\tline := dec.s.Bytes()\n\n\t// garbage\n\tfor p, c := range line[dec.pos:] {\n\t\tif c > ' ' {\n\t\t\tdec.pos += p\n\t\t\tgoto key\n\t\t}\n\t}\n\tdec.pos = len(line)\n\treturn false\n\nkey:\n\tconst invalidKeyError = \"invalid key\"\n\n\tstart, multibyte := dec.pos, false\n\tfor p, c := range line[dec.pos:] {\n\t\tswitch {\n\t\tcase c == '=':\n\t\t\tdec.pos += p\n\t\t\tif dec.pos > start {\n\t\t\t\tdec.key = line[start:dec.pos]\n\t\t\t\tif multibyte && bytes.IndexRune(dec.key, utf8.RuneError) != -1 {\n\t\t\t\t\tdec.syntaxError(invalidKeyError)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif dec.key == nil {\n\t\t\t\tdec.unexpectedByte(c)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tgoto equal\n\t\tcase c == '\"':\n\t\t\tdec.pos += p\n\t\t\tdec.unexpectedByte(c)\n\t\t\treturn false\n\t\tcase c <= ' ':\n\t\t\tdec.pos += p\n\t\t\tif dec.pos > start {\n\t\t\t\tdec.key = line[start:dec.pos]\n\t\t\t\tif multibyte && bytes.IndexRune(dec.key, utf8.RuneError) != -1 {\n\t\t\t\t\tdec.syntaxError(invalidKeyError)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\tcase c >= utf8.RuneSelf:\n\t\t\tmultibyte = true\n\t\t}\n\t}\n\tdec.pos = len(line)\n\tif dec.pos > start {\n\t\tdec.key = line[start:dec.pos]\n\t\tif multibyte && bytes.IndexRune(dec.key, utf8.RuneError) != -1 {\n\t\t\tdec.syntaxError(invalidKeyError)\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n\nequal:\n\tdec.pos++\n\tif dec.pos >= len(line) {\n\t\treturn true\n\t}\n\tswitch c := line[dec.pos]; {\n\tcase c <= ' ':\n\t\treturn true\n\tcase c == '\"':\n\t\tgoto qvalue\n\t}\n\n\t// value\n\tstart = dec.pos\n\tfor p, c := range line[dec.pos:] {\n\t\tswitch {\n\t\tcase c == '=' || c == '\"':\n\t\t\tdec.pos += p\n\t\t\tdec.unexpectedByte(c)\n\t\t\treturn false\n\t\tcase c <= ' ':\n\t\t\tdec.pos += p\n\t\t\tif dec.pos > start {\n\t\t\t\tdec.value = line[start:dec.pos]\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\tdec.pos = len(line)\n\tif dec.pos > start {\n\t\tdec.value = line[start:dec.pos]\n\t}\n\treturn true\n\nqvalue:\n\tconst (\n\t\tuntermQuote  = \"unterminated quoted value\"\n\t\tinvalidQuote = \"invalid quoted value\"\n\t)\n\n\thasEsc, esc := false, false\n\tstart = dec.pos\n\tfor p, c := range line[dec.pos+1:] {\n\t\tswitch {\n\t\tcase esc:\n\t\t\tesc = false\n\t\tcase c == '\\\\':\n\t\t\thasEsc, esc = true, true\n\t\tcase c == '\"':\n\t\t\tdec.pos += p + 2\n\t\t\tif hasEsc {\n\t\t\t\tv, ok := unquoteBytes(line[start:dec.pos])\n\t\t\t\tif !ok {\n\t\t\t\t\tdec.syntaxError(invalidQuote)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tdec.value = v\n\t\t\t} else {\n\t\t\t\tstart++\n\t\t\t\tend := dec.pos - 1\n\t\t\t\tif end > start {\n\t\t\t\t\tdec.value = line[start:end]\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\tdec.pos = len(line)\n\tdec.syntaxError(untermQuote)\n\treturn false\n}\n\n// Key returns the most recent key found by a call to ScanKeyval. The returned\n// slice may point to internal buffers and is only valid until the next call\n// to ScanRecord.  It does no allocation.\nfunc (dec *Decoder) Key() []byte {\n\treturn dec.key\n}\n\n// Value returns the most recent value found by a call to ScanKeyval. The\n// returned slice may point to internal buffers and is only valid until the\n// next call to ScanRecord.  It does no allocation when the value has no\n// escape sequences.\nfunc (dec *Decoder) Value() []byte {\n\treturn dec.value\n}\n\n// Err returns the first non-EOF error that was encountered by the Scanner.\nfunc (dec *Decoder) Err() error {\n\treturn dec.err\n}\n\nfunc (dec *Decoder) syntaxError(msg string) {\n\tdec.err = &SyntaxError{\n\t\tMsg:  msg,\n\t\tLine: dec.lineNum,\n\t\tPos:  dec.pos + 1,\n\t}\n}\n\nfunc (dec *Decoder) unexpectedByte(c byte) {\n\tdec.err = &SyntaxError{\n\t\tMsg:  fmt.Sprintf(\"unexpected %q\", c),\n\t\tLine: dec.lineNum,\n\t\tPos:  dec.pos + 1,\n\t}\n}\n\n// A SyntaxError represents a syntax error in the logfmt input stream.\ntype SyntaxError struct {\n\tMsg  string\n\tLine int\n\tPos  int\n}\n\nfunc (e *SyntaxError) Error() string {\n\treturn fmt.Sprintf(\"logfmt syntax error at pos %d on line %d: %s\", e.Pos, e.Line, e.Msg)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/doc.go",
    "content": "// Package logfmt implements utilities to marshal and unmarshal data in the\n// logfmt format. The logfmt format records key/value pairs in a way that\n// balances readability for humans and simplicity of computer parsing. It is\n// most commonly used as a more human friendly alternative to JSON for\n// structured logging.\npackage logfmt\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/encode.go",
    "content": "package logfmt\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// MarshalKeyvals returns the logfmt encoding of keyvals, a variadic sequence\n// of alternating keys and values.\nfunc MarshalKeyvals(keyvals ...interface{}) ([]byte, error) {\n\tbuf := &bytes.Buffer{}\n\tif err := NewEncoder(buf).EncodeKeyvals(keyvals...); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf.Bytes(), nil\n}\n\n// An Encoder writes logfmt data to an output stream.\ntype Encoder struct {\n\tw       io.Writer\n\tscratch bytes.Buffer\n\tneedSep bool\n}\n\n// NewEncoder returns a new encoder that writes to w.\nfunc NewEncoder(w io.Writer) *Encoder {\n\treturn &Encoder{\n\t\tw: w,\n\t}\n}\n\nvar (\n\tspace   = []byte(\" \")\n\tequals  = []byte(\"=\")\n\tnewline = []byte(\"\\n\")\n\tnull    = []byte(\"null\")\n)\n\n// EncodeKeyval writes the logfmt encoding of key and value to the stream. A\n// single space is written before the second and subsequent keys in a record.\n// Nothing is written if a non-nil error is returned.\nfunc (enc *Encoder) EncodeKeyval(key, value interface{}) error {\n\tenc.scratch.Reset()\n\tif enc.needSep {\n\t\tif _, err := enc.scratch.Write(space); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := writeKey(&enc.scratch, key); err != nil {\n\t\treturn err\n\t}\n\tif _, err := enc.scratch.Write(equals); err != nil {\n\t\treturn err\n\t}\n\tif err := writeValue(&enc.scratch, value); err != nil {\n\t\treturn err\n\t}\n\t_, err := enc.w.Write(enc.scratch.Bytes())\n\tenc.needSep = true\n\treturn err\n}\n\n// EncodeKeyvals writes the logfmt encoding of keyvals to the stream. Keyvals\n// is a variadic sequence of alternating keys and values. Keys of unsupported\n// type are skipped along with their corresponding value. Values of\n// unsupported type or that cause a MarshalerError are replaced by their error\n// but do not cause EncodeKeyvals to return an error. If a non-nil error is\n// returned some key/value pairs may not have be written.\nfunc (enc *Encoder) EncodeKeyvals(keyvals ...interface{}) error {\n\tif len(keyvals) == 0 {\n\t\treturn nil\n\t}\n\tif len(keyvals)%2 == 1 {\n\t\tkeyvals = append(keyvals, nil)\n\t}\n\tfor i := 0; i < len(keyvals); i += 2 {\n\t\tk, v := keyvals[i], keyvals[i+1]\n\t\terr := enc.EncodeKeyval(k, v)\n\t\tif err == ErrUnsupportedKeyType {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := err.(*MarshalerError); ok || err == ErrUnsupportedValueType {\n\t\t\tv = err\n\t\t\terr = enc.EncodeKeyval(k, v)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// MarshalerError represents an error encountered while marshaling a value.\ntype MarshalerError struct {\n\tType reflect.Type\n\tErr  error\n}\n\nfunc (e *MarshalerError) Error() string {\n\treturn \"error marshaling value of type \" + e.Type.String() + \": \" + e.Err.Error()\n}\n\n// ErrNilKey is returned by Marshal functions and Encoder methods if a key is\n// a nil interface or pointer value.\nvar ErrNilKey = errors.New(\"nil key\")\n\n// ErrInvalidKey is returned by Marshal functions and Encoder methods if a key\n// contains an invalid character.\nvar ErrInvalidKey = errors.New(\"invalid key\")\n\n// ErrUnsupportedKeyType is returned by Encoder methods if a key has an\n// unsupported type.\nvar ErrUnsupportedKeyType = errors.New(\"unsupported key type\")\n\n// ErrUnsupportedValueType is returned by Encoder methods if a value has an\n// unsupported type.\nvar ErrUnsupportedValueType = errors.New(\"unsupported value type\")\n\nfunc writeKey(w io.Writer, key interface{}) error {\n\tif key == nil {\n\t\treturn ErrNilKey\n\t}\n\n\tswitch k := key.(type) {\n\tcase string:\n\t\treturn writeStringKey(w, k)\n\tcase []byte:\n\t\tif k == nil {\n\t\t\treturn ErrNilKey\n\t\t}\n\t\treturn writeBytesKey(w, k)\n\tcase encoding.TextMarshaler:\n\t\tkb, err := safeMarshal(k)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif kb == nil {\n\t\t\treturn ErrNilKey\n\t\t}\n\t\treturn writeBytesKey(w, kb)\n\tcase fmt.Stringer:\n\t\tks, ok := safeString(k)\n\t\tif !ok {\n\t\t\treturn ErrNilKey\n\t\t}\n\t\treturn writeStringKey(w, ks)\n\tdefault:\n\t\trkey := reflect.ValueOf(key)\n\t\tswitch rkey.Kind() {\n\t\tcase reflect.Array, reflect.Chan, reflect.Func, reflect.Map, reflect.Slice, reflect.Struct:\n\t\t\treturn ErrUnsupportedKeyType\n\t\tcase reflect.Ptr:\n\t\t\tif rkey.IsNil() {\n\t\t\t\treturn ErrNilKey\n\t\t\t}\n\t\t\treturn writeKey(w, rkey.Elem().Interface())\n\t\t}\n\t\treturn writeStringKey(w, fmt.Sprint(k))\n\t}\n}\n\nfunc invalidKeyRune(r rune) bool {\n\treturn r <= ' ' || r == '=' || r == '\"' || r == utf8.RuneError\n}\n\nfunc invalidKeyString(key string) bool {\n\treturn len(key) == 0 || strings.IndexFunc(key, invalidKeyRune) != -1\n}\n\nfunc invalidKey(key []byte) bool {\n\treturn len(key) == 0 || bytes.IndexFunc(key, invalidKeyRune) != -1\n}\n\nfunc writeStringKey(w io.Writer, key string) error {\n\tif invalidKeyString(key) {\n\t\treturn ErrInvalidKey\n\t}\n\t_, err := io.WriteString(w, key)\n\treturn err\n}\n\nfunc writeBytesKey(w io.Writer, key []byte) error {\n\tif invalidKey(key) {\n\t\treturn ErrInvalidKey\n\t}\n\t_, err := w.Write(key)\n\treturn err\n}\n\nfunc writeValue(w io.Writer, value interface{}) error {\n\tswitch v := value.(type) {\n\tcase nil:\n\t\treturn writeBytesValue(w, null)\n\tcase string:\n\t\treturn writeStringValue(w, v, true)\n\tcase []byte:\n\t\treturn writeBytesValue(w, v)\n\tcase encoding.TextMarshaler:\n\t\tvb, err := safeMarshal(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif vb == nil {\n\t\t\tvb = null\n\t\t}\n\t\treturn writeBytesValue(w, vb)\n\tcase error:\n\t\tse, ok := safeError(v)\n\t\treturn writeStringValue(w, se, ok)\n\tcase fmt.Stringer:\n\t\tss, ok := safeString(v)\n\t\treturn writeStringValue(w, ss, ok)\n\tdefault:\n\t\trvalue := reflect.ValueOf(value)\n\t\tswitch rvalue.Kind() {\n\t\tcase reflect.Array, reflect.Chan, reflect.Func, reflect.Map, reflect.Slice, reflect.Struct:\n\t\t\treturn ErrUnsupportedValueType\n\t\tcase reflect.Ptr:\n\t\t\tif rvalue.IsNil() {\n\t\t\t\treturn writeBytesValue(w, null)\n\t\t\t}\n\t\t\treturn writeValue(w, rvalue.Elem().Interface())\n\t\t}\n\t\treturn writeStringValue(w, fmt.Sprint(v), true)\n\t}\n}\n\nfunc needsQuotedValueRune(r rune) bool {\n\treturn r <= ' ' || r == '=' || r == '\"' || r == utf8.RuneError\n}\n\nfunc writeStringValue(w io.Writer, value string, ok bool) error {\n\tvar err error\n\tif ok && value == \"null\" {\n\t\t_, err = io.WriteString(w, `\"null\"`)\n\t} else if strings.IndexFunc(value, needsQuotedValueRune) != -1 {\n\t\t_, err = writeQuotedString(w, value)\n\t} else {\n\t\t_, err = io.WriteString(w, value)\n\t}\n\treturn err\n}\n\nfunc writeBytesValue(w io.Writer, value []byte) error {\n\tvar err error\n\tif bytes.IndexFunc(value, needsQuotedValueRune) != -1 {\n\t\t_, err = writeQuotedBytes(w, value)\n\t} else {\n\t\t_, err = w.Write(value)\n\t}\n\treturn err\n}\n\n// EndRecord writes a newline character to the stream and resets the encoder\n// to the beginning of a new record.\nfunc (enc *Encoder) EndRecord() error {\n\t_, err := enc.w.Write(newline)\n\tif err == nil {\n\t\tenc.needSep = false\n\t}\n\treturn err\n}\n\n// Reset resets the encoder to the beginning of a new record.\nfunc (enc *Encoder) Reset() {\n\tenc.needSep = false\n}\n\nfunc safeError(err error) (s string, ok bool) {\n\tdefer func() {\n\t\tif panicVal := recover(); panicVal != nil {\n\t\t\tif v := reflect.ValueOf(err); v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\t\ts, ok = \"null\", false\n\t\t\t} else {\n\t\t\t\tpanic(panicVal)\n\t\t\t}\n\t\t}\n\t}()\n\ts, ok = err.Error(), true\n\treturn\n}\n\nfunc safeString(str fmt.Stringer) (s string, ok bool) {\n\tdefer func() {\n\t\tif panicVal := recover(); panicVal != nil {\n\t\t\tif v := reflect.ValueOf(str); v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\t\ts, ok = \"null\", false\n\t\t\t} else {\n\t\t\t\tpanic(panicVal)\n\t\t\t}\n\t\t}\n\t}()\n\ts, ok = str.String(), true\n\treturn\n}\n\nfunc safeMarshal(tm encoding.TextMarshaler) (b []byte, err error) {\n\tdefer func() {\n\t\tif panicVal := recover(); panicVal != nil {\n\t\t\tif v := reflect.ValueOf(tm); v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\t\tb, err = nil, nil\n\t\t\t} else {\n\t\t\t\tpanic(panicVal)\n\t\t\t}\n\t\t}\n\t}()\n\tb, err = tm.MarshalText()\n\tif err != nil {\n\t\treturn nil, &MarshalerError{\n\t\t\tType: reflect.TypeOf(tm),\n\t\t\tErr:  err,\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/fuzz.go",
    "content": "// +build gofuzz\n\npackage logfmt\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\n\tkr \"github.com/kr/logfmt\"\n)\n\n// Fuzz checks reserialized data matches\nfunc Fuzz(data []byte) int {\n\tparsed, err := parse(data)\n\tif err != nil {\n\t\treturn 0\n\t}\n\tvar w1 bytes.Buffer\n\tif err = write(parsed, &w1); err != nil {\n\t\tpanic(err)\n\t}\n\tparsed, err = parse(w1.Bytes())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tvar w2 bytes.Buffer\n\tif err = write(parsed, &w2); err != nil {\n\t\tpanic(err)\n\t}\n\tif !bytes.Equal(w1.Bytes(), w2.Bytes()) {\n\t\tpanic(fmt.Sprintf(\"reserialized data does not match:\\n%q\\n%q\\n\", w1.Bytes(), w2.Bytes()))\n\t}\n\treturn 1\n}\n\n// FuzzVsKR checks go-logfmt/logfmt against kr/logfmt\nfunc FuzzVsKR(data []byte) int {\n\tparsed, err := parse(data)\n\tparsedKR, errKR := parseKR(data)\n\n\t// github.com/go-logfmt/logfmt is a stricter parser. It returns errors for\n\t// more inputs than github.com/kr/logfmt. Ignore any inputs that have a\n\t// stict error.\n\tif err != nil {\n\t\treturn 0\n\t}\n\n\t// Fail if the more forgiving parser finds an error not found by the\n\t// stricter parser.\n\tif errKR != nil {\n\t\tpanic(fmt.Sprintf(\"unmatched error: %v\", errKR))\n\t}\n\n\tif !reflect.DeepEqual(parsed, parsedKR) {\n\t\tpanic(fmt.Sprintf(\"parsers disagree:\\n%+v\\n%+v\\n\", parsed, parsedKR))\n\t}\n\treturn 1\n}\n\ntype kv struct {\n\tk, v []byte\n}\n\nfunc parse(data []byte) ([][]kv, error) {\n\tvar got [][]kv\n\tdec := NewDecoder(bytes.NewReader(data))\n\tfor dec.ScanRecord() {\n\t\tvar kvs []kv\n\t\tfor dec.ScanKeyval() {\n\t\t\tkvs = append(kvs, kv{dec.Key(), dec.Value()})\n\t\t}\n\t\tgot = append(got, kvs)\n\t}\n\treturn got, dec.Err()\n}\n\nfunc parseKR(data []byte) ([][]kv, error) {\n\tvar (\n\t\ts   = bufio.NewScanner(bytes.NewReader(data))\n\t\terr error\n\t\th   saveHandler\n\t\tgot [][]kv\n\t)\n\tfor err == nil && s.Scan() {\n\t\th.kvs = nil\n\t\terr = kr.Unmarshal(s.Bytes(), &h)\n\t\tgot = append(got, h.kvs)\n\t}\n\tif err == nil {\n\t\terr = s.Err()\n\t}\n\treturn got, err\n}\n\ntype saveHandler struct {\n\tkvs []kv\n}\n\nfunc (h *saveHandler) HandleLogfmt(key, val []byte) error {\n\tif len(key) == 0 {\n\t\tkey = nil\n\t}\n\tif len(val) == 0 {\n\t\tval = nil\n\t}\n\th.kvs = append(h.kvs, kv{key, val})\n\treturn nil\n}\n\nfunc write(recs [][]kv, w io.Writer) error {\n\tenc := NewEncoder(w)\n\tfor _, rec := range recs {\n\t\tfor _, f := range rec {\n\t\t\tif err := enc.EncodeKeyval(f.k, f.v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif err := enc.EndRecord(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/go-logfmt/logfmt/jsonstring.go",
    "content": "package logfmt\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"strconv\"\n\t\"sync\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n)\n\n// Taken from Go's encoding/json and modified for use here.\n\n// 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\nvar hex = \"0123456789abcdef\"\n\nvar bufferPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn &bytes.Buffer{}\n\t},\n}\n\nfunc getBuffer() *bytes.Buffer {\n\treturn bufferPool.Get().(*bytes.Buffer)\n}\n\nfunc poolBuffer(buf *bytes.Buffer) {\n\tbuf.Reset()\n\tbufferPool.Put(buf)\n}\n\n// NOTE: keep in sync with writeQuotedBytes below.\nfunc writeQuotedString(w io.Writer, s string) (int, error) {\n\tbuf := getBuffer()\n\tbuf.WriteByte('\"')\n\tstart := 0\n\tfor i := 0; i < len(s); {\n\t\tif b := s[i]; b < utf8.RuneSelf {\n\t\t\tif 0x20 <= b && b != '\\\\' && b != '\"' {\n\t\t\t\ti++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif start < i {\n\t\t\t\tbuf.WriteString(s[start:i])\n\t\t\t}\n\t\t\tswitch b {\n\t\t\tcase '\\\\', '\"':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte(b)\n\t\t\tcase '\\n':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('n')\n\t\t\tcase '\\r':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('r')\n\t\t\tcase '\\t':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('t')\n\t\t\tdefault:\n\t\t\t\t// This encodes bytes < 0x20 except for \\n, \\r, and \\t.\n\t\t\t\tbuf.WriteString(`\\u00`)\n\t\t\t\tbuf.WriteByte(hex[b>>4])\n\t\t\t\tbuf.WriteByte(hex[b&0xF])\n\t\t\t}\n\t\t\ti++\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\tc, size := utf8.DecodeRuneInString(s[i:])\n\t\tif c == utf8.RuneError {\n\t\t\tif start < i {\n\t\t\t\tbuf.WriteString(s[start:i])\n\t\t\t}\n\t\t\tbuf.WriteString(`\\ufffd`)\n\t\t\ti += size\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\ti += size\n\t}\n\tif start < len(s) {\n\t\tbuf.WriteString(s[start:])\n\t}\n\tbuf.WriteByte('\"')\n\tn, err := w.Write(buf.Bytes())\n\tpoolBuffer(buf)\n\treturn n, err\n}\n\n// NOTE: keep in sync with writeQuoteString above.\nfunc writeQuotedBytes(w io.Writer, s []byte) (int, error) {\n\tbuf := getBuffer()\n\tbuf.WriteByte('\"')\n\tstart := 0\n\tfor i := 0; i < len(s); {\n\t\tif b := s[i]; b < utf8.RuneSelf {\n\t\t\tif 0x20 <= b && b != '\\\\' && b != '\"' {\n\t\t\t\ti++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif start < i {\n\t\t\t\tbuf.Write(s[start:i])\n\t\t\t}\n\t\t\tswitch b {\n\t\t\tcase '\\\\', '\"':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte(b)\n\t\t\tcase '\\n':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('n')\n\t\t\tcase '\\r':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('r')\n\t\t\tcase '\\t':\n\t\t\t\tbuf.WriteByte('\\\\')\n\t\t\t\tbuf.WriteByte('t')\n\t\t\tdefault:\n\t\t\t\t// This encodes bytes < 0x20 except for \\n, \\r, and \\t.\n\t\t\t\tbuf.WriteString(`\\u00`)\n\t\t\t\tbuf.WriteByte(hex[b>>4])\n\t\t\t\tbuf.WriteByte(hex[b&0xF])\n\t\t\t}\n\t\t\ti++\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\tc, size := utf8.DecodeRune(s[i:])\n\t\tif c == utf8.RuneError {\n\t\t\tif start < i {\n\t\t\t\tbuf.Write(s[start:i])\n\t\t\t}\n\t\t\tbuf.WriteString(`\\ufffd`)\n\t\t\ti += size\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\ti += size\n\t}\n\tif start < len(s) {\n\t\tbuf.Write(s[start:])\n\t}\n\tbuf.WriteByte('\"')\n\tn, err := w.Write(buf.Bytes())\n\tpoolBuffer(buf)\n\treturn n, err\n}\n\n// getu4 decodes \\uXXXX from the beginning of s, returning the hex value,\n// or it returns -1.\nfunc getu4(s []byte) rune {\n\tif len(s) < 6 || s[0] != '\\\\' || s[1] != 'u' {\n\t\treturn -1\n\t}\n\tr, err := strconv.ParseUint(string(s[2:6]), 16, 64)\n\tif err != nil {\n\t\treturn -1\n\t}\n\treturn rune(r)\n}\n\nfunc unquoteBytes(s []byte) (t []byte, ok bool) {\n\tif len(s) < 2 || s[0] != '\"' || s[len(s)-1] != '\"' {\n\t\treturn\n\t}\n\ts = s[1 : len(s)-1]\n\n\t// Check for unusual characters. If there are none,\n\t// then no unquoting is needed, so return a slice of the\n\t// original bytes.\n\tr := 0\n\tfor r < len(s) {\n\t\tc := s[r]\n\t\tif c == '\\\\' || c == '\"' || c < ' ' {\n\t\t\tbreak\n\t\t}\n\t\tif c < utf8.RuneSelf {\n\t\t\tr++\n\t\t\tcontinue\n\t\t}\n\t\trr, size := utf8.DecodeRune(s[r:])\n\t\tif rr == utf8.RuneError {\n\t\t\tbreak\n\t\t}\n\t\tr += size\n\t}\n\tif r == len(s) {\n\t\treturn s, true\n\t}\n\n\tb := make([]byte, len(s)+2*utf8.UTFMax)\n\tw := copy(b, s[0:r])\n\tfor r < len(s) {\n\t\t// Out of room?  Can only happen if s is full of\n\t\t// malformed UTF-8 and we're replacing each\n\t\t// byte with RuneError.\n\t\tif w >= len(b)-2*utf8.UTFMax {\n\t\t\tnb := make([]byte, (len(b)+utf8.UTFMax)*2)\n\t\t\tcopy(nb, b[0:w])\n\t\t\tb = nb\n\t\t}\n\t\tswitch c := s[r]; {\n\t\tcase c == '\\\\':\n\t\t\tr++\n\t\t\tif r >= len(s) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tswitch s[r] {\n\t\t\tdefault:\n\t\t\t\treturn\n\t\t\tcase '\"', '\\\\', '/', '\\'':\n\t\t\t\tb[w] = s[r]\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'b':\n\t\t\t\tb[w] = '\\b'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'f':\n\t\t\t\tb[w] = '\\f'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'n':\n\t\t\t\tb[w] = '\\n'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'r':\n\t\t\t\tb[w] = '\\r'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 't':\n\t\t\t\tb[w] = '\\t'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'u':\n\t\t\t\tr--\n\t\t\t\trr := getu4(s[r:])\n\t\t\t\tif rr < 0 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tr += 6\n\t\t\t\tif utf16.IsSurrogate(rr) {\n\t\t\t\t\trr1 := getu4(s[r:])\n\t\t\t\t\tif dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar {\n\t\t\t\t\t\t// A valid pair; consume.\n\t\t\t\t\t\tr += 6\n\t\t\t\t\t\tw += utf8.EncodeRune(b[w:], dec)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// Invalid surrogate; fall back to replacement rune.\n\t\t\t\t\trr = unicode.ReplacementChar\n\t\t\t\t}\n\t\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t\t}\n\n\t\t// Quote, control characters are invalid.\n\t\tcase c == '\"', c < ' ':\n\t\t\treturn\n\n\t\t// ASCII\n\t\tcase c < utf8.RuneSelf:\n\t\t\tb[w] = c\n\t\t\tr++\n\t\t\tw++\n\n\t\t// Coerce to well-formed UTF-8.\n\t\tdefault:\n\t\t\trr, size := utf8.DecodeRune(s[r:])\n\t\t\tr += size\n\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t}\n\t}\n\treturn b[0:w], true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/jpillora/backoff/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 Jaime Pillora\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": "12fa-docker-golang/chapter11/vendor/github.com/jpillora/backoff/backoff.go",
    "content": "// Package backoff provides an exponential-backoff implementation.\npackage backoff\n\nimport (\n\t\"math\"\n\t\"math/rand\"\n\t\"time\"\n)\n\n// Backoff is a time.Duration counter, starting at Min. After every call to\n// the Duration method the current timing is multiplied by Factor, but it\n// never exceeds Max.\n//\n// Backoff is not generally concurrent-safe, but the ForAttempt method can\n// be used concurrently.\ntype Backoff struct {\n\t//Factor is the multiplying factor for each increment step\n\tattempt, Factor float64\n\t//Jitter eases contention by randomizing backoff steps\n\tJitter bool\n\t//Min and Max are the minimum and maximum values of the counter\n\tMin, Max time.Duration\n}\n\n// Duration returns the duration for the current attempt before incrementing\n// the attempt counter. See ForAttempt.\nfunc (b *Backoff) Duration() time.Duration {\n\td := b.ForAttempt(b.attempt)\n\tb.attempt++\n\treturn d\n}\n\nconst maxInt64 = float64(math.MaxInt64 - 512)\n\n// ForAttempt returns the duration for a specific attempt. This is useful if\n// you have a large number of independent Backoffs, but don't want use\n// unnecessary memory storing the Backoff parameters per Backoff. The first\n// attempt should be 0.\n//\n// ForAttempt is concurrent-safe.\nfunc (b *Backoff) ForAttempt(attempt float64) time.Duration {\n\t// Zero-values are nonsensical, so we use\n\t// them to apply defaults\n\tmin := b.Min\n\tif min <= 0 {\n\t\tmin = 100 * time.Millisecond\n\t}\n\tmax := b.Max\n\tif max <= 0 {\n\t\tmax = 10 * time.Second\n\t}\n\tif min >= max {\n\t\t// short-circuit\n\t\treturn max\n\t}\n\tfactor := b.Factor\n\tif factor <= 0 {\n\t\tfactor = 2\n\t}\n\t//calculate this duration\n\tminf := float64(min)\n\tdurf := minf * math.Pow(factor, attempt)\n\tif b.Jitter {\n\t\tdurf = rand.Float64()*(durf-minf) + minf\n\t}\n\t//ensure float64 wont overflow int64\n\tif durf > maxInt64 {\n\t\treturn max\n\t}\n\tdur := time.Duration(durf)\n\t//keep within bounds\n\tif dur < min {\n\t\treturn min\n\t} else if dur > max {\n\t\treturn max\n\t}\n\treturn dur\n}\n\n// Reset restarts the current attempt counter at zero.\nfunc (b *Backoff) Reset() {\n\tb.attempt = 0\n}\n\n// Attempt returns the current attempt counter value.\nfunc (b *Backoff) Attempt() float64 {\n\treturn b.attempt\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/kr/logfmt/decode.go",
    "content": "// Package implements the decoding of logfmt key-value pairs.\n//\n// Example logfmt message:\n//\n//\tfoo=bar a=14 baz=\"hello kitty\" cool%story=bro f %^asdf\n//\n// Example result in JSON:\n//\n//\t{ \"foo\": \"bar\", \"a\": 14, \"baz\": \"hello kitty\", \"cool%story\": \"bro\", \"f\": true, \"%^asdf\": true }\n//\n// EBNFish:\n//\n// \tident_byte = any byte greater than ' ', excluding '=' and '\"'\n// \tstring_byte = any byte excluding '\"' and '\\'\n// \tgarbage = !ident_byte\n// \tident = ident_byte, { ident byte }\n// \tkey = ident\n// \tvalue = ident | '\"', { string_byte | '\\', '\"' }, '\"'\n// \tpair = key, '=', value | key, '=' | key\n// \tmessage = { garbage, pair }, garbage\npackage logfmt\n\nimport (\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Handler is the interface implemented by objects that accept logfmt\n// key-value pairs. HandleLogfmt must copy the logfmt data if it\n// wishes to retain the data after returning.\ntype Handler interface {\n\tHandleLogfmt(key, val []byte) error\n}\n\n// The HandlerFunc type is an adapter to allow the use of ordinary functions as\n// logfmt handlers. If f is a function with the appropriate signature,\n// HandlerFunc(f) is a Handler object that calls f.\ntype HandlerFunc func(key, val []byte) error\n\nfunc (f HandlerFunc) HandleLogfmt(key, val []byte) error {\n\treturn f(key, val)\n}\n\n// Unmarshal parses the logfmt encoding data and stores the result in the value\n// pointed to by v. If v is an Handler, HandleLogfmt will be called for each\n// key-value pair.\n//\n// If v is not a Handler, it will pass v to NewStructHandler and use the\n// returned StructHandler for decoding.\nfunc Unmarshal(data []byte, v interface{}) (err error) {\n\th, ok := v.(Handler)\n\tif !ok {\n\t\th, err = NewStructHandler(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn gotoScanner(data, h)\n}\n\n// StructHandler unmarshals logfmt into a struct. It matches incoming keys to\n// the the struct's fields (either the struct field name or its tag, preferring\n// an exact match but also accepting a case-insensitive match.\n//\n// Field types supported by StructHandler are:\n//\n// \tall numeric types (e.g. float32, int, etc.)\n// \t[]byte\n// \tstring\n// \tbool - true if key is present, false otherwise (the value is ignored).\n//\ttime.Duration - uses time.ParseDuration\n//\n// If a field is a pointer to an above type, and a matching key is not present\n// in the logfmt data, the pointer will be untouched.\n//\n// If v is not a pointer to an Handler or struct, Unmarshal will return an\n// error.\ntype StructHandler struct {\n\trv reflect.Value\n}\n\nfunc NewStructHandler(v interface{}) (Handler, error) {\n\trv := reflect.ValueOf(v)\n\tif rv.Kind() != reflect.Ptr || rv.IsNil() {\n\t\treturn nil, &InvalidUnmarshalError{reflect.TypeOf(v)}\n\t}\n\treturn &StructHandler{rv: rv}, nil\n}\n\nfunc (h *StructHandler) HandleLogfmt(key, val []byte) error {\n\tel := h.rv.Elem()\n\tskey := string(key)\n\tfor i := 0; i < el.NumField(); i++ {\n\t\tfv := el.Field(i)\n\t\tft := el.Type().Field(i)\n\t\tswitch {\n\t\tcase ft.Name == skey:\n\t\tcase ft.Tag.Get(\"logfmt\") == skey:\n\t\tcase strings.EqualFold(ft.Name, skey):\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Ptr {\n\t\t\tif fv.IsNil() {\n\t\t\t\tt := fv.Type().Elem()\n\t\t\t\tv := reflect.New(t)\n\t\t\t\tfv.Set(v)\n\t\t\t\tfv = v\n\t\t\t}\n\t\t\tfv = fv.Elem()\n\t\t}\n\t\tswitch fv.Interface().(type) {\n\t\tcase time.Duration:\n\t\t\td, err := time.ParseDuration(string(val))\n\t\t\tif err != nil {\n\t\t\t\treturn &UnmarshalTypeError{string(val), fv.Type()}\n\t\t\t}\n\t\t\tfv.Set(reflect.ValueOf(d))\n\t\tcase string:\n\t\t\tfv.SetString(string(val))\n\t\tcase []byte:\n\t\t\tb := make([]byte, len(val))\n\t\t\tcopy(b, val)\n\t\t\tfv.SetBytes(b)\n\t\tcase bool:\n\t\t\tfv.SetBool(true)\n\t\tdefault:\n\t\t\tswitch {\n\t\t\tcase reflect.Int <= fv.Kind() && fv.Kind() <= reflect.Int64:\n\t\t\t\tv, err := strconv.ParseInt(string(val), 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\tfv.SetInt(v)\n\t\t\tcase reflect.Uint32 <= fv.Kind() && fv.Kind() <= reflect.Uint64:\n\t\t\t\tv, err := strconv.ParseUint(string(val), 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\tfv.SetUint(v)\n\t\t\tcase reflect.Float32 <= fv.Kind() && fv.Kind() <= reflect.Float64:\n\t\t\t\tv, err := strconv.ParseFloat(string(val), 10)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tfv.SetFloat(v)\n\t\t\tdefault:\n\t\t\t\treturn &UnmarshalTypeError{string(val), fv.Type()}\n\t\t\t}\n\t\t}\n\n\t}\n\treturn nil\n}\n\n// An InvalidUnmarshalError describes an invalid argument passed to Unmarshal.\n// (The argument to Unmarshal must be a non-nil pointer.)\ntype InvalidUnmarshalError struct {\n\tType reflect.Type\n}\n\nfunc (e *InvalidUnmarshalError) Error() string {\n\tif e.Type == nil {\n\t\treturn \"logfmt: Unmarshal(nil)\"\n\t}\n\n\tif e.Type.Kind() != reflect.Ptr {\n\t\treturn \"logfmt: Unmarshal(non-pointer \" + e.Type.String() + \")\"\n\t}\n\treturn \"logfmt: Unmarshal(nil \" + e.Type.String() + \")\"\n}\n\n// An UnmarshalTypeError describes a logfmt value that was\n// not appropriate for a value of a specific Go type.\ntype UnmarshalTypeError struct {\n\tValue string       // the logfmt value\n\tType  reflect.Type // type of Go value it could not be assigned to\n}\n\nfunc (e *UnmarshalTypeError) Error() string {\n\treturn \"logfmt: cannot unmarshal \" + e.Value + \" into Go value of type \" + e.Type.String()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/kr/logfmt/scanner.go",
    "content": "package logfmt\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nvar ErrUnterminatedString = errors.New(\"logfmt: unterminated string\")\n\nfunc gotoScanner(data []byte, h Handler) (err error) {\n\tsaveError := func(e error) {\n\t\tif err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\tvar c byte\n\tvar i int\n\tvar m int\n\tvar key []byte\n\tvar val []byte\n\tvar ok bool\n\tvar esc bool\n\ngarbage:\n\tif i == len(data) {\n\t\treturn\n\t}\n\n\tc = data[i]\n\tswitch {\n\tcase c > ' ' && c != '\"' && c != '=':\n\t\tkey, val = nil, nil\n\t\tm = i\n\t\ti++\n\t\tgoto key\n\tdefault:\n\t\ti++\n\t\tgoto garbage\n\t}\n\nkey:\n\tif i >= len(data) {\n\t\tif m >= 0 {\n\t\t\tkey = data[m:i]\n\t\t\tsaveError(h.HandleLogfmt(key, nil))\n\t\t}\n\t\treturn\n\t}\n\n\tc = data[i]\n\tswitch {\n\tcase c > ' ' && c != '\"' && c != '=':\n\t\ti++\n\t\tgoto key\n\tcase c == '=':\n\t\tkey = data[m:i]\n\t\ti++\n\t\tgoto equal\n\tdefault:\n\t\tkey = data[m:i]\n\t\ti++\n\t\tsaveError(h.HandleLogfmt(key, nil))\n\t\tgoto garbage\n\t}\n\nequal:\n\tif i >= len(data) {\n\t\tif m >= 0 {\n\t\t\ti--\n\t\t\tkey = data[m:i]\n\t\t\tsaveError(h.HandleLogfmt(key, nil))\n\t\t}\n\t\treturn\n\t}\n\n\tc = data[i]\n\tswitch {\n\tcase c > ' ' && c != '\"' && c != '=':\n\t\tm = i\n\t\ti++\n\t\tgoto ivalue\n\tcase c == '\"':\n\t\tm = i\n\t\ti++\n\t\tesc = false\n\t\tgoto qvalue\n\tdefault:\n\t\tif key != nil {\n\t\t\tsaveError(h.HandleLogfmt(key, val))\n\t\t}\n\t\ti++\n\t\tgoto garbage\n\t}\n\nivalue:\n\tif i >= len(data) {\n\t\tif m >= 0 {\n\t\t\tval = data[m:i]\n\t\t\tsaveError(h.HandleLogfmt(key, val))\n\t\t}\n\t\treturn\n\t}\n\n\tc = data[i]\n\tswitch {\n\tcase c > ' ' && c != '\"' && c != '=':\n\t\ti++\n\t\tgoto ivalue\n\tdefault:\n\t\tval = data[m:i]\n\t\tsaveError(h.HandleLogfmt(key, val))\n\t\ti++\n\t\tgoto garbage\n\t}\n\nqvalue:\n\tif i >= len(data) {\n\t\tif m >= 0 {\n\t\t\tsaveError(ErrUnterminatedString)\n\t\t}\n\t\treturn\n\t}\n\n\tc = data[i]\n\tswitch c {\n\tcase '\\\\':\n\t\ti += 2\n\t\tesc = true\n\t\tgoto qvalue\n\tcase '\"':\n\t\ti++\n\t\tval = data[m:i]\n\t\tif esc {\n\t\t\tval, ok = unquoteBytes(val)\n\t\t\tif !ok {\n\t\t\t\tsaveError(fmt.Errorf(\"logfmt: error unquoting bytes %q\", string(val)))\n\t\t\t\tgoto garbage\n\t\t\t}\n\t\t} else {\n\t\t\tval = val[1 : len(val)-1]\n\t\t}\n\t\tsaveError(h.HandleLogfmt(key, val))\n\t\tgoto garbage\n\tdefault:\n\t\ti++\n\t\tgoto qvalue\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/kr/logfmt/unquote.go",
    "content": "package logfmt\n\nimport (\n\t\"strconv\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n)\n\n// Taken from Go's encoding/json\n\n// 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// getu4 decodes \\uXXXX from the beginning of s, returning the hex value,\n// or it returns -1.\nfunc getu4(s []byte) rune {\n\tif len(s) < 6 || s[0] != '\\\\' || s[1] != 'u' {\n\t\treturn -1\n\t}\n\tr, err := strconv.ParseUint(string(s[2:6]), 16, 64)\n\tif err != nil {\n\t\treturn -1\n\t}\n\treturn rune(r)\n}\n\n// unquote converts a quoted JSON string literal s into an actual string t.\n// The rules are different than for Go, so cannot use strconv.Unquote.\nfunc unquote(s []byte) (t string, ok bool) {\n\ts, ok = unquoteBytes(s)\n\tt = string(s)\n\treturn\n}\n\nfunc unquoteBytes(s []byte) (t []byte, ok bool) {\n\tif len(s) < 2 || s[0] != '\"' || s[len(s)-1] != '\"' {\n\t\treturn\n\t}\n\ts = s[1 : len(s)-1]\n\n\t// Check for unusual characters. If there are none,\n\t// then no unquoting is needed, so return a slice of the\n\t// original bytes.\n\tr := 0\n\tfor r < len(s) {\n\t\tc := s[r]\n\t\tif c == '\\\\' || c == '\"' || c < ' ' {\n\t\t\tbreak\n\t\t}\n\t\tif c < utf8.RuneSelf {\n\t\t\tr++\n\t\t\tcontinue\n\t\t}\n\t\trr, size := utf8.DecodeRune(s[r:])\n\t\tif rr == utf8.RuneError && size == 1 {\n\t\t\tbreak\n\t\t}\n\t\tr += size\n\t}\n\tif r == len(s) {\n\t\treturn s, true\n\t}\n\n\tb := make([]byte, len(s)+2*utf8.UTFMax)\n\tw := copy(b, s[0:r])\n\tfor r < len(s) {\n\t\t// Out of room?  Can only happen if s is full of\n\t\t// malformed UTF-8 and we're replacing each\n\t\t// byte with RuneError.\n\t\tif w >= len(b)-2*utf8.UTFMax {\n\t\t\tnb := make([]byte, (len(b)+utf8.UTFMax)*2)\n\t\t\tcopy(nb, b[0:w])\n\t\t\tb = nb\n\t\t}\n\t\tswitch c := s[r]; {\n\t\tcase c == '\\\\':\n\t\t\tr++\n\t\t\tif r >= len(s) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tswitch s[r] {\n\t\t\tdefault:\n\t\t\t\treturn\n\t\t\tcase '\"', '\\\\', '/', '\\'':\n\t\t\t\tb[w] = s[r]\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'b':\n\t\t\t\tb[w] = '\\b'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'f':\n\t\t\t\tb[w] = '\\f'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'n':\n\t\t\t\tb[w] = '\\n'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'r':\n\t\t\t\tb[w] = '\\r'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 't':\n\t\t\t\tb[w] = '\\t'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'u':\n\t\t\t\tr--\n\t\t\t\trr := getu4(s[r:])\n\t\t\t\tif rr < 0 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tr += 6\n\t\t\t\tif utf16.IsSurrogate(rr) {\n\t\t\t\t\trr1 := getu4(s[r:])\n\t\t\t\t\tif dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar {\n\t\t\t\t\t\t// A valid pair; consume.\n\t\t\t\t\t\tr += 6\n\t\t\t\t\t\tw += utf8.EncodeRune(b[w:], dec)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// Invalid surrogate; fall back to replacement rune.\n\t\t\t\t\trr = unicode.ReplacementChar\n\t\t\t\t}\n\t\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t\t}\n\n\t\t// Quote, control characters are invalid.\n\t\tcase c == '\"', c < ' ':\n\t\t\treturn\n\n\t\t// ASCII\n\t\tcase c < utf8.RuneSelf:\n\t\t\tb[w] = c\n\t\t\tr++\n\t\t\tw++\n\n\t\t// Coerce to well-formed UTF-8.\n\t\tdefault:\n\t\t\trr, size := utf8.DecodeRune(s[r:])\n\t\t\tr += size\n\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t}\n\t}\n\treturn b[0:w], true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/pkg/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\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\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": "12fa-docker-golang/chapter11/vendor/github.com/pkg/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Wrap function returns a new error that adds context to the\n// original error by recording a stack trace at the point Wrap is called,\n// and the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Wrap(err, \"read failed\")\n//     }\n//\n// If additional control is required the errors.WithStack and errors.WithMessage\n// functions destructure errors.Wrap into its component operations of annotating\n// an error with a stack trace and an a message, respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Wrap constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Wrap to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error which does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// causer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are\n// invoked. This information can be retrieved with the following interface.\n//\n//     type stackTracer interface {\n//             StackTrace() errors.StackTrace\n//     }\n//\n// Where errors.StackTrace is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if err, ok := err.(stackTracer); ok {\n//             for _, f := range err.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\", f)\n//             }\n//     }\n//\n// stackTracer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// See the documentation for Frame.Format for more details.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is call, and the format specifier.\n// If err is nil, Wrapf returns nil.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n}\n\ntype withMessage struct {\n\tcause error\n\tmsg   string\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's', 'q':\n\t\tio.WriteString(s, w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\n\tfor err != nil {\n\t\tcause, ok := err.(causer)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\terr = cause.Cause()\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/pkg/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// Frame represents a program counter inside a stack frame.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   path of source file relative to the compile time GOPATH\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tpc := f.pc()\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn == nil {\n\t\t\t\tio.WriteString(s, \"unknown\")\n\t\t\t} else {\n\t\t\t\tfile, _ := fn.FileLine(pc)\n\t\t\t\tfmt.Fprintf(s, \"%s\\n\\t%s\", fn.Name(), file)\n\t\t\t}\n\t\tdefault:\n\t\t\tio.WriteString(s, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tfmt.Fprintf(s, \"%d\", f.line())\n\tcase 'n':\n\t\tname := runtime.FuncForPC(f.pc()).Name()\n\t\tio.WriteString(s, funcname(name))\n\tcase 'v':\n\t\tf.Format(s, 's')\n\t\tio.WriteString(s, \":\")\n\t\tf.Format(s, 'd')\n\t}\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tfor _, f := range st {\n\t\t\t\tfmt.Fprintf(s, \"\\n%+v\", f)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(s, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tfmt.Fprintf(s, \"%v\", []Frame(st))\n\t\t}\n\tcase 's':\n\t\tfmt.Fprintf(s, \"%s\", []Frame(st))\n\t}\n}\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tfmt.Fprintf(st, \"\\n%+v\", f)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(3, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n\nfunc trimGOPATH(name, file string) string {\n\t// Here we want to get the source file path relative to the compile time\n\t// GOPATH. As of Go 1.6.x there is no direct way to know the compiled\n\t// GOPATH at runtime, but we can infer the number of path segments in the\n\t// GOPATH. We note that fn.Name() returns the function name qualified by\n\t// the import path, which does not include the GOPATH. Thus we can trim\n\t// segments from the beginning of the file path until the number of path\n\t// separators remaining is one more than the number of path separators in\n\t// the function name. For example, given:\n\t//\n\t//    GOPATH     /home/user\n\t//    file       /home/user/src/pkg/sub/file.go\n\t//    fn.Name()  pkg/sub.Type.Method\n\t//\n\t// We want to produce:\n\t//\n\t//    pkg/sub/file.go\n\t//\n\t// From this we can easily see that fn.Name() has one less path separator\n\t// than our desired output. We count separators from the end of the file\n\t// path until it finds two more than in the function name and then move\n\t// one character forward to preserve the initial path segment without a\n\t// leading separator.\n\tconst sep = \"/\"\n\tgoal := strings.Count(name, sep) + 2\n\ti := len(file)\n\tfor n := 0; n < goal; n++ {\n\t\ti = strings.LastIndex(file[:i], sep)\n\t\tif i == -1 {\n\t\t\t// not enough separators found, set i so that the slice expression\n\t\t\t// below leaves file unmodified\n\t\t\ti = -len(sep)\n\t\t\tbreak\n\t\t}\n\t}\n\t// get back to 0 or trim the leading separator\n\tfile = file[i+len(sep):]\n\treturn file\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/rogpeppe/fastuuid/LICENSE",
    "content": "Copyright © 2014, Roger Peppe\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\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    * Neither the name of this project nor the names of its contributors\n      may be used to endorse or promote products derived from this software\n      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 LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/rogpeppe/fastuuid/uuid.go",
    "content": "// Package fastuuid provides fast UUID generation of 192 bit\n// universally unique identifiers. It does not provide\n// formatting or parsing of the identifiers (it is assumed\n// that a simple hexadecimal or base64 representation\n// is sufficient, for which adequate functionality exists elsewhere).\n//\n// Note that the generated UUIDs are not unguessable - each\n// UUID generated from a Generator is adjacent to the\n// previously generated UUID.\n//\n// It ignores RFC 4122.\npackage fastuuid\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"sync/atomic\"\n)\n\n// Generator represents a UUID generator that\n// generates UUIDs in sequence from a random starting\n// point.\ntype Generator struct {\n\tseed    [24]byte\n\tcounter uint64\n}\n\n// NewGenerator returns a new Generator.\n// It can fail if the crypto/rand read fails.\nfunc NewGenerator() (*Generator, error) {\n\tvar g Generator\n\t_, err := rand.Read(g.seed[:])\n\tif err != nil {\n\t\treturn nil, errors.New(\"cannot generate random seed: \" + err.Error())\n\t}\n\treturn &g, nil\n}\n\n// MustNewGenerator is like NewGenerator\n// but panics on failure.\nfunc MustNewGenerator() *Generator {\n\tg, err := NewGenerator()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn g\n}\n\n// Next returns the next UUID from the generator.\n// Only the first 8 bytes can differ from the previous\n// UUID, so taking a slice of the first 16 bytes\n// is sufficient to provide a somewhat less secure 128 bit UUID.\n//\n// It is OK to call this method concurrently.\nfunc (g *Generator) Next() [24]byte {\n\tx := atomic.AddUint64(&g.counter, 1)\n\tvar counterBytes [8]byte\n\tbinary.LittleEndian.PutUint64(counterBytes[:], x)\n\n\tuuid := g.seed\n\tfor i, b := range counterBytes {\n\t\tuuid[i] ^= b\n\t}\n\treturn uuid\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/satori/go.uuid/LICENSE",
    "content": "Copyright (C) 2013-2016 by Maxim Bublis <b@codemonkey.ru>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/satori/go.uuid/uuid.go",
    "content": "// Copyright (C) 2013-2015 by Maxim Bublis <b@codemonkey.ru>\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n//\n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// Package uuid provides implementation of Universally Unique Identifier (UUID).\n// Supported versions are 1, 3, 4 and 5 (as specified in RFC 4122) and\n// version 2 (as specified in DCE 1.1).\npackage uuid\n\nimport (\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"hash\"\n\t\"net\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n)\n\n// UUID layout variants.\nconst (\n\tVariantNCS = iota\n\tVariantRFC4122\n\tVariantMicrosoft\n\tVariantFuture\n)\n\n// UUID DCE domains.\nconst (\n\tDomainPerson = iota\n\tDomainGroup\n\tDomainOrg\n)\n\n// Difference in 100-nanosecond intervals between\n// UUID epoch (October 15, 1582) and Unix epoch (January 1, 1970).\nconst epochStart = 122192928000000000\n\n// Used in string method conversion\nconst dash byte = '-'\n\n// UUID v1/v2 storage.\nvar (\n\tstorageMutex  sync.Mutex\n\tstorageOnce   sync.Once\n\tepochFunc     = unixTimeFunc\n\tclockSequence uint16\n\tlastTime      uint64\n\thardwareAddr  [6]byte\n\tposixUID      = uint32(os.Getuid())\n\tposixGID      = uint32(os.Getgid())\n)\n\n// String parse helpers.\nvar (\n\turnPrefix  = []byte(\"urn:uuid:\")\n\tbyteGroups = []int{8, 4, 4, 4, 12}\n)\n\nfunc initClockSequence() {\n\tbuf := make([]byte, 2)\n\tsafeRandom(buf)\n\tclockSequence = binary.BigEndian.Uint16(buf)\n}\n\nfunc initHardwareAddr() {\n\tinterfaces, err := net.Interfaces()\n\tif err == nil {\n\t\tfor _, iface := range interfaces {\n\t\t\tif len(iface.HardwareAddr) >= 6 {\n\t\t\t\tcopy(hardwareAddr[:], iface.HardwareAddr)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// Initialize hardwareAddr randomly in case\n\t// of real network interfaces absence\n\tsafeRandom(hardwareAddr[:])\n\n\t// Set multicast bit as recommended in RFC 4122\n\thardwareAddr[0] |= 0x01\n}\n\nfunc initStorage() {\n\tinitClockSequence()\n\tinitHardwareAddr()\n}\n\nfunc safeRandom(dest []byte) {\n\tif _, err := rand.Read(dest); err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// Returns difference in 100-nanosecond intervals between\n// UUID epoch (October 15, 1582) and current time.\n// This is default epoch calculation function.\nfunc unixTimeFunc() uint64 {\n\treturn epochStart + uint64(time.Now().UnixNano()/100)\n}\n\n// UUID representation compliant with specification\n// described in RFC 4122.\ntype UUID [16]byte\n\n// NullUUID can be used with the standard sql package to represent a\n// UUID value that can be NULL in the database\ntype NullUUID struct {\n\tUUID  UUID\n\tValid bool\n}\n\n// The nil UUID is special form of UUID that is specified to have all\n// 128 bits set to zero.\nvar Nil = UUID{}\n\n// Predefined namespace UUIDs.\nvar (\n\tNamespaceDNS, _  = FromString(\"6ba7b810-9dad-11d1-80b4-00c04fd430c8\")\n\tNamespaceURL, _  = FromString(\"6ba7b811-9dad-11d1-80b4-00c04fd430c8\")\n\tNamespaceOID, _  = FromString(\"6ba7b812-9dad-11d1-80b4-00c04fd430c8\")\n\tNamespaceX500, _ = FromString(\"6ba7b814-9dad-11d1-80b4-00c04fd430c8\")\n)\n\n// And returns result of binary AND of two UUIDs.\nfunc And(u1 UUID, u2 UUID) UUID {\n\tu := UUID{}\n\tfor i := 0; i < 16; i++ {\n\t\tu[i] = u1[i] & u2[i]\n\t}\n\treturn u\n}\n\n// Or returns result of binary OR of two UUIDs.\nfunc Or(u1 UUID, u2 UUID) UUID {\n\tu := UUID{}\n\tfor i := 0; i < 16; i++ {\n\t\tu[i] = u1[i] | u2[i]\n\t}\n\treturn u\n}\n\n// Equal returns true if u1 and u2 equals, otherwise returns false.\nfunc Equal(u1 UUID, u2 UUID) bool {\n\treturn bytes.Equal(u1[:], u2[:])\n}\n\n// Version returns algorithm version used to generate UUID.\nfunc (u UUID) Version() uint {\n\treturn uint(u[6] >> 4)\n}\n\n// Variant returns UUID layout variant.\nfunc (u UUID) Variant() uint {\n\tswitch {\n\tcase (u[8] & 0x80) == 0x00:\n\t\treturn VariantNCS\n\tcase (u[8]&0xc0)|0x80 == 0x80:\n\t\treturn VariantRFC4122\n\tcase (u[8]&0xe0)|0xc0 == 0xc0:\n\t\treturn VariantMicrosoft\n\t}\n\treturn VariantFuture\n}\n\n// Bytes returns bytes slice representation of UUID.\nfunc (u UUID) Bytes() []byte {\n\treturn u[:]\n}\n\n// Returns canonical string representation of UUID:\n// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.\nfunc (u UUID) String() string {\n\tbuf := make([]byte, 36)\n\n\thex.Encode(buf[0:8], u[0:4])\n\tbuf[8] = dash\n\thex.Encode(buf[9:13], u[4:6])\n\tbuf[13] = dash\n\thex.Encode(buf[14:18], u[6:8])\n\tbuf[18] = dash\n\thex.Encode(buf[19:23], u[8:10])\n\tbuf[23] = dash\n\thex.Encode(buf[24:], u[10:])\n\n\treturn string(buf)\n}\n\n// SetVersion sets version bits.\nfunc (u *UUID) SetVersion(v byte) {\n\tu[6] = (u[6] & 0x0f) | (v << 4)\n}\n\n// SetVariant sets variant bits as described in RFC 4122.\nfunc (u *UUID) SetVariant() {\n\tu[8] = (u[8] & 0xbf) | 0x80\n}\n\n// MarshalText implements the encoding.TextMarshaler interface.\n// The encoding is the same as returned by String.\nfunc (u UUID) MarshalText() (text []byte, err error) {\n\ttext = []byte(u.String())\n\treturn\n}\n\n// UnmarshalText implements the encoding.TextUnmarshaler interface.\n// Following formats are supported:\n// \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\",\n// \"{6ba7b810-9dad-11d1-80b4-00c04fd430c8}\",\n// \"urn:uuid:6ba7b810-9dad-11d1-80b4-00c04fd430c8\"\nfunc (u *UUID) UnmarshalText(text []byte) (err error) {\n\tif len(text) < 32 {\n\t\terr = fmt.Errorf(\"uuid: UUID string too short: %s\", text)\n\t\treturn\n\t}\n\n\tt := text[:]\n\tbraced := false\n\n\tif bytes.Equal(t[:9], urnPrefix) {\n\t\tt = t[9:]\n\t} else if t[0] == '{' {\n\t\tbraced = true\n\t\tt = t[1:]\n\t}\n\n\tb := u[:]\n\n\tfor i, byteGroup := range byteGroups {\n\t\tif i > 0 {\n\t\t\tif t[0] != '-' {\n\t\t\t\terr = fmt.Errorf(\"uuid: invalid string format\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tt = t[1:]\n\t\t}\n\n\t\tif len(t) < byteGroup {\n\t\t\terr = fmt.Errorf(\"uuid: UUID string too short: %s\", text)\n\t\t\treturn\n\t\t}\n\n\t\tif i == 4 && len(t) > byteGroup &&\n\t\t\t((braced && t[byteGroup] != '}') || len(t[byteGroup:]) > 1 || !braced) {\n\t\t\terr = fmt.Errorf(\"uuid: UUID string too long: %s\", text)\n\t\t\treturn\n\t\t}\n\n\t\t_, err = hex.Decode(b[:byteGroup/2], t[:byteGroup])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tt = t[byteGroup:]\n\t\tb = b[byteGroup/2:]\n\t}\n\n\treturn\n}\n\n// MarshalBinary implements the encoding.BinaryMarshaler interface.\nfunc (u UUID) MarshalBinary() (data []byte, err error) {\n\tdata = u.Bytes()\n\treturn\n}\n\n// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.\n// It will return error if the slice isn't 16 bytes long.\nfunc (u *UUID) UnmarshalBinary(data []byte) (err error) {\n\tif len(data) != 16 {\n\t\terr = fmt.Errorf(\"uuid: UUID must be exactly 16 bytes long, got %d bytes\", len(data))\n\t\treturn\n\t}\n\tcopy(u[:], data)\n\n\treturn\n}\n\n// Value implements the driver.Valuer interface.\nfunc (u UUID) Value() (driver.Value, error) {\n\treturn u.String(), nil\n}\n\n// Scan implements the sql.Scanner interface.\n// A 16-byte slice is handled by UnmarshalBinary, while\n// a longer byte slice or a string is handled by UnmarshalText.\nfunc (u *UUID) Scan(src interface{}) error {\n\tswitch src := src.(type) {\n\tcase []byte:\n\t\tif len(src) == 16 {\n\t\t\treturn u.UnmarshalBinary(src)\n\t\t}\n\t\treturn u.UnmarshalText(src)\n\n\tcase string:\n\t\treturn u.UnmarshalText([]byte(src))\n\t}\n\n\treturn fmt.Errorf(\"uuid: cannot convert %T to UUID\", src)\n}\n\n// Value implements the driver.Valuer interface.\nfunc (u NullUUID) Value() (driver.Value, error) {\n\tif !u.Valid {\n\t\treturn nil, nil\n\t}\n\t// Delegate to UUID Value function\n\treturn u.UUID.Value()\n}\n\n// Scan implements the sql.Scanner interface.\nfunc (u *NullUUID) Scan(src interface{}) error {\n\tif src == nil {\n\t\tu.UUID, u.Valid = Nil, false\n\t\treturn nil\n\t}\n\n\t// Delegate to UUID Scan function\n\tu.Valid = true\n\treturn u.UUID.Scan(src)\n}\n\n// FromBytes returns UUID converted from raw byte slice input.\n// It will return error if the slice isn't 16 bytes long.\nfunc FromBytes(input []byte) (u UUID, err error) {\n\terr = u.UnmarshalBinary(input)\n\treturn\n}\n\n// FromBytesOrNil returns UUID converted from raw byte slice input.\n// Same behavior as FromBytes, but returns a Nil UUID on error.\nfunc FromBytesOrNil(input []byte) UUID {\n\tuuid, err := FromBytes(input)\n\tif err != nil {\n\t\treturn Nil\n\t}\n\treturn uuid\n}\n\n// FromString returns UUID parsed from string input.\n// Input is expected in a form accepted by UnmarshalText.\nfunc FromString(input string) (u UUID, err error) {\n\terr = u.UnmarshalText([]byte(input))\n\treturn\n}\n\n// FromStringOrNil returns UUID parsed from string input.\n// Same behavior as FromString, but returns a Nil UUID on error.\nfunc FromStringOrNil(input string) UUID {\n\tuuid, err := FromString(input)\n\tif err != nil {\n\t\treturn Nil\n\t}\n\treturn uuid\n}\n\n// Returns UUID v1/v2 storage state.\n// Returns epoch timestamp, clock sequence, and hardware address.\nfunc getStorage() (uint64, uint16, []byte) {\n\tstorageOnce.Do(initStorage)\n\n\tstorageMutex.Lock()\n\tdefer storageMutex.Unlock()\n\n\ttimeNow := epochFunc()\n\t// Clock changed backwards since last UUID generation.\n\t// Should increase clock sequence.\n\tif timeNow <= lastTime {\n\t\tclockSequence++\n\t}\n\tlastTime = timeNow\n\n\treturn timeNow, clockSequence, hardwareAddr[:]\n}\n\n// NewV1 returns UUID based on current timestamp and MAC address.\nfunc NewV1() UUID {\n\tu := UUID{}\n\n\ttimeNow, clockSeq, hardwareAddr := getStorage()\n\n\tbinary.BigEndian.PutUint32(u[0:], uint32(timeNow))\n\tbinary.BigEndian.PutUint16(u[4:], uint16(timeNow>>32))\n\tbinary.BigEndian.PutUint16(u[6:], uint16(timeNow>>48))\n\tbinary.BigEndian.PutUint16(u[8:], clockSeq)\n\n\tcopy(u[10:], hardwareAddr)\n\n\tu.SetVersion(1)\n\tu.SetVariant()\n\n\treturn u\n}\n\n// NewV2 returns DCE Security UUID based on POSIX UID/GID.\nfunc NewV2(domain byte) UUID {\n\tu := UUID{}\n\n\ttimeNow, clockSeq, hardwareAddr := getStorage()\n\n\tswitch domain {\n\tcase DomainPerson:\n\t\tbinary.BigEndian.PutUint32(u[0:], posixUID)\n\tcase DomainGroup:\n\t\tbinary.BigEndian.PutUint32(u[0:], posixGID)\n\t}\n\n\tbinary.BigEndian.PutUint16(u[4:], uint16(timeNow>>32))\n\tbinary.BigEndian.PutUint16(u[6:], uint16(timeNow>>48))\n\tbinary.BigEndian.PutUint16(u[8:], clockSeq)\n\tu[9] = domain\n\n\tcopy(u[10:], hardwareAddr)\n\n\tu.SetVersion(2)\n\tu.SetVariant()\n\n\treturn u\n}\n\n// NewV3 returns UUID based on MD5 hash of namespace UUID and name.\nfunc NewV3(ns UUID, name string) UUID {\n\tu := newFromHash(md5.New(), ns, name)\n\tu.SetVersion(3)\n\tu.SetVariant()\n\n\treturn u\n}\n\n// NewV4 returns random generated UUID.\nfunc NewV4() UUID {\n\tu := UUID{}\n\tsafeRandom(u[:])\n\tu.SetVersion(4)\n\tu.SetVariant()\n\n\treturn u\n}\n\n// NewV5 returns UUID based on SHA-1 hash of namespace UUID and name.\nfunc NewV5(ns UUID, name string) UUID {\n\tu := newFromHash(sha1.New(), ns, name)\n\tu.SetVersion(5)\n\tu.SetVariant()\n\n\treturn u\n}\n\n// Returns UUID based on hashing of namespace UUID and name.\nfunc newFromHash(h hash.Hash, ns UUID, name string) UUID {\n\tu := UUID{}\n\th.Write(ns[:])\n\th.Write([]byte(name))\n\tcopy(u[:], h.Sum(nil))\n\n\treturn u\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/tj/go-elastic/batch/batch.go",
    "content": "// Package batch lets you buffer bulk documents for insert. None of the methods\n// provided are thread-safe, you must synchronize if desired.\npackage batch\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"io\"\n)\n\n// Elasticsearch interface.\ntype Elasticsearch interface {\n\tBulk(io.Reader) error\n}\n\n// Index metadata.\ntype Index struct {\n\tIndex   string `json:\"_index\"`\n\tType    string `json:\"_type\"`\n\tRouting string `json:\"_routing,omitempty\"`\n\tID      string `json:\"_id,omitempty\"`\n}\n\n// IndexOp is an index operation.\ntype IndexOp struct {\n\tIndex Index `json:\"index\"`\n}\n\n// Batch indexes docs in bulk for reporting. Currently documents\n// are flushed in a single write, however may allow streaming\n// in the future.\ntype Batch struct {\n\tElastic Elasticsearch // Elasticsearch implementation\n\tDocs    []interface{} // Docs buffered\n\tIndex   string        // Index name\n\tType    string        // Type name\n}\n\n// Add document.\nfunc (b *Batch) Add(doc interface{}) {\n\tb.Docs = append(b.Docs, doc)\n}\n\n// Size returns the number of documents pending flush.\nfunc (b *Batch) Size() int {\n\treturn len(b.Docs)\n}\n\n// Bytes returns the request body.\nfunc (b *Batch) Bytes() (*bytes.Buffer, error) {\n\tbuf := new(bytes.Buffer)\n\tenc := json.NewEncoder(buf)\n\n\top := IndexOp{\n\t\tIndex: Index{\n\t\t\tIndex: b.Index,\n\t\t\tType:  b.Type,\n\t\t},\n\t}\n\n\tfor _, doc := range b.Docs {\n\t\tif err := enc.Encode(op); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif err := enc.Encode(doc); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn buf, nil\n}\n\n// Flush checks in bulk.\nfunc (b *Batch) Flush() (err error) {\n\tif b.Size() == 0 {\n\t\treturn nil\n\t}\n\n\tbuf, err := b.Bytes()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tb.Docs = nil\n\n\treturn b.Elastic.Bulk(buf)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/tj/go-kinesis/LICENSE",
    "content": "(The MIT License)\n\nCopyright (c) 2015 TJ Holowaychuk &lt;tj@tjholowaychuk.coma&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/tj/go-kinesis/config.go",
    "content": "package kinesis\n\nimport (\n\t\"time\"\n\n\t\"github.com/apex/log\"\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\tk \"github.com/aws/aws-sdk-go/service/kinesis\"\n\t\"github.com/aws/aws-sdk-go/service/kinesis/kinesisiface\"\n\t\"github.com/jpillora/backoff\"\n)\n\nconst (\n\tmaxRecordsPerRequest = 500\n)\n\ntype Config struct {\n\t// StreamName is the Kinesis stream.\n\tStreamName string\n\n\t// FlushInterval is a regular interval for flushing the buffer. Defaults to 1s.\n\tFlushInterval time.Duration\n\n\t// BufferSize determines the batch request size. Must not exceed 500. Defaults to 500.\n\tBufferSize int\n\n\t// BacklogSize determines the channel capacity before Put() will begin blocking. Defaults to 500.\n\tBacklogSize int\n\n\t// Backoff determines the backoff strategy for record failures.\n\tBackoff backoff.Backoff\n\n\t// Logger is the logger used. Defaults to log.Log.\n\tLogger log.Interface\n\n\t// Client is the Kinesis API implementation.\n\tClient kinesisiface.KinesisAPI\n}\n\n// defaults for configuration.\nfunc (c *Config) defaults() {\n\tif c.Client == nil {\n\t\tc.Client = k.New(session.New(aws.NewConfig()))\n\t}\n\n\tif c.Logger == nil {\n\t\tc.Logger = log.Log\n\t}\n\n\tc.Logger = c.Logger.WithFields(log.Fields{\n\t\t\"package\": \"kinesis\",\n\t})\n\n\tif c.StreamName == \"\" {\n\t\tc.Logger.Fatal(\"StreamName required\")\n\t}\n\n\tc.Logger = c.Logger.WithFields(log.Fields{\n\t\t\"stream\": c.StreamName,\n\t})\n\n\tif c.BufferSize == 0 {\n\t\tc.BufferSize = maxRecordsPerRequest\n\t}\n\n\tif c.BufferSize > maxRecordsPerRequest {\n\t\tc.Logger.Fatal(\"BufferSize exceeds 500\")\n\t}\n\n\tif c.BacklogSize == 0 {\n\t\tc.BacklogSize = maxRecordsPerRequest\n\t}\n\n\tif c.FlushInterval == 0 {\n\t\tc.FlushInterval = time.Second\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/github.com/tj/go-kinesis/kinesis.go",
    "content": "// Package kinesis implements a batch producer built on top of the official AWS SDK.\npackage kinesis\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/apex/log\"\n\tk \"github.com/aws/aws-sdk-go/service/kinesis\"\n)\n\n// Size limits as defined by http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html.\nconst (\n\tmaxRecordSize  = 1 << 20 // 1MiB\n\tmaxRequestSize = 5 << 20 // 5MiB\n)\n\n// Errors.\nvar (\n\tErrRecordSizeExceeded = errors.New(\"kinesis: record size exceeded\")\n)\n\n// Producer batches records.\ntype Producer struct {\n\tConfig\n\trecords chan *k.PutRecordsRequestEntry\n\tdone    chan struct{}\n}\n\n// New producer with the given config.\nfunc New(config Config) *Producer {\n\tconfig.defaults()\n\treturn &Producer{\n\t\tConfig:  config,\n\t\trecords: make(chan *k.PutRecordsRequestEntry, config.BacklogSize),\n\t\tdone:    make(chan struct{}),\n\t}\n}\n\n// Put record `data` using `partitionKey`. This method is thread-safe.\nfunc (p *Producer) Put(data []byte, partitionKey string) error {\n\tif len(data) > maxRecordSize {\n\t\treturn ErrRecordSizeExceeded\n\t}\n\n\tp.records <- &k.PutRecordsRequestEntry{\n\t\tData:         data,\n\t\tPartitionKey: &partitionKey,\n\t}\n\n\treturn nil\n}\n\n// Start the producer.\nfunc (p *Producer) Start() {\n\tgo p.loop()\n}\n\n// Stop the producer. Flushes any in-flight data.\nfunc (p *Producer) Stop() {\n\tp.Logger.WithField(\"backlog\", len(p.records)).Info(\"stopping producer\")\n\n\t// drain\n\tp.done <- struct{}{}\n\tclose(p.records)\n\n\t// wait\n\t<-p.done\n\n\tp.Logger.Info(\"stopped producer\")\n}\n\n// loop and flush at the configured interval, or when the buffer is exceeded.\nfunc (p *Producer) loop() {\n\tbuf := make([]*k.PutRecordsRequestEntry, 0, p.BufferSize)\n\ttick := time.NewTicker(p.FlushInterval)\n\tdrain := false\n\n\tdefer tick.Stop()\n\tdefer close(p.done)\n\n\tfor {\n\t\tselect {\n\t\tcase record := <-p.records:\n\t\t\tbuf = append(buf, record)\n\n\t\t\tif len(buf) >= p.BufferSize {\n\t\t\t\tp.flush(buf, \"buffer size\")\n\t\t\t\tbuf = nil\n\t\t\t}\n\n\t\t\tif drain && len(p.records) == 0 {\n\t\t\t\tp.Logger.Info(\"drained\")\n\t\t\t\treturn\n\t\t\t}\n\t\tcase <-tick.C:\n\t\t\tif len(buf) > 0 {\n\t\t\t\tp.flush(buf, \"interval\")\n\t\t\t\tbuf = nil\n\t\t\t}\n\t\tcase <-p.done:\n\t\t\tdrain = true\n\n\t\t\tif len(p.records) == 0 {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// flush records and retry failures if necessary.\nfunc (p *Producer) flush(records []*k.PutRecordsRequestEntry, reason string) {\n\tp.Logger.WithFields(log.Fields{\n\t\t\"records\": len(records),\n\t\t\"reason\":  reason,\n\t}).Info(\"flush\")\n\n\tout, err := p.Client.PutRecords(&k.PutRecordsInput{\n\t\tStreamName: &p.StreamName,\n\t\tRecords:    records,\n\t})\n\n\tif err != nil {\n\t\tp.Logger.WithError(err).Error(\"flush\")\n\t\tp.backoff(len(records))\n\t\tp.flush(records, \"error\")\n\t\treturn\n\t}\n\n\tfailed := *out.FailedRecordCount\n\tif failed == 0 {\n\t\tp.Backoff.Reset()\n\t\treturn\n\t}\n\n\tp.backoff(int(failed))\n\tp.flush(failures(records, out.Records), \"retry\")\n}\n\n// calculates backoff duration and pauses execution\nfunc (p *Producer) backoff(failed int) {\n\tbackoff := p.Backoff.Duration()\n\n\tp.Logger.WithFields(log.Fields{\n\t\t\"failures\": failed,\n\t\t\"backoff\":  backoff,\n\t}).Warn(\"put failures\")\n\n\ttime.Sleep(backoff)\n}\n\n// failures returns the failed records as indicated in the response.\nfunc failures(records []*k.PutRecordsRequestEntry, response []*k.PutRecordsResultEntry) (out []*k.PutRecordsRequestEntry) {\n\tfor i, record := range response {\n\t\tif record.ErrorCode != nil {\n\t\t\tout = append(out, records[i])\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter11/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/apex/log\",\n\t\t\t\"repository\": \"https://github.com/apex/log\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"a0bcece0a725e2b62f01d948b25ba3c22ebfb792\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aphistic/golf\",\n\t\t\t\"repository\": \"https://github.com/aphistic/golf\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"9a6a5804b74b01193a6989786e63a1580d470f8f\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/aws\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"aws\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/private/protocol\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"private/protocol\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/service/kinesis\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"service/kinesis\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/service/sts\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"service/sts\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/vendor/github.com/go-ini/ini\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"vendor/github.com/go-ini/ini\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/aws/aws-sdk-go/vendor/github.com/jmespath/go-jmespath\",\n\t\t\t\"repository\": \"https://github.com/aws/aws-sdk-go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"baba9e786eae5ba978f2007f8e718557b29157c8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"vendor/github.com/jmespath/go-jmespath\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/go-logfmt/logfmt\",\n\t\t\t\"repository\": \"https://github.com/go-logfmt/logfmt\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"390ab7935ee28ec6b286364bba9b4dd6410cb3d5\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/jpillora/backoff\",\n\t\t\t\"repository\": \"https://github.com/jpillora/backoff\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"06c7a16c845dc8e0bf575fafeeca0f5462f5eb4d\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/kr/logfmt\",\n\t\t\t\"repository\": \"https://github.com/kr/logfmt\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"b84e30acd515aadc4b783ad4ff83aff3299bdfe0\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/pkg/errors\",\n\t\t\t\"repository\": \"https://github.com/pkg/errors\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"ff09b135c25aae272398c51a07235b90a75aa4f0\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/rogpeppe/fastuuid\",\n\t\t\t\"repository\": \"https://github.com/rogpeppe/fastuuid\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"6724a57986aff9bff1a1770e9347036def7c89f6\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/satori/go.uuid\",\n\t\t\t\"repository\": \"https://github.com/satori/go.uuid\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"5bf94b69c6b68ee1b541973bb8e1144db23a194b\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/tj/go-elastic/batch\",\n\t\t\t\"repository\": \"https://github.com/tj/go-elastic\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"9a9a2a21e071e6e38f236740c3b650e7316ae67e\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/batch\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/tj/go-kinesis\",\n\t\t\t\"repository\": \"https://github.com/tj/go-kinesis\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"28ff32f8b54954f8ea365fa278bcfcec35ec094b\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter2/run",
    "content": "gvt fetch github.com/namsral/flag"
  },
  {
    "path": "12fa-docker-golang/chapter2/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter2/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter2/vendor/github.com/namsral/flag/flag.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/*Package flag implements command-line flag parsing.\n\nUsage:\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n    import \"flag\"\n    var ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\nIf you like, you can bind the flag to a variable using the Var() functions.\n    var flagvar int\n    func init() {\n        flag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n    }\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n    flag.Var(&flagVal, \"name\", \"help message for flagname\")\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n    flag.Parse()\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n    fmt.Println(\"ip has value \", *ip)\n    fmt.Println(\"flagvar has value \", flagvar)\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nCommand line flag syntax:\n    -flag\n    -flag=x\n    -flag x  // non-boolean flags only\nOne or two minus signs may be used; they are equivalent.\nThe last form is not permitted for boolean flags because the\nmeaning of the command\n    cmd -x *\nwill change if there is a file called 0, false, etc.  You must\nuse the -flag=false form to turn off a boolean flag.\n\nFlag parsing stops just before the first non-flag argument\n(\"-\" is a non-flag argument) or after the terminator \"--\".\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags may be 1, 0, t, f, true, false, TRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n*/\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how to handle flag parsing errors.\ntype ErrorHandling int\n\nconst (\n\tContinueOnError ErrorHandling = iota\n\tExitOnError\n\tPanicOnError\n)\n\n// A FlagSet represents a set of defined flags.  The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\texitOnError   bool     // does the program exit if there's an error?\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each.  It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each.  It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// PrintDefaults prints, to standard error unless configured\n// otherwise, the default values of all defined flags in the set.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\tformat := \"  -%s=%s: %s\\n\"\n\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t// put quotes on the value\n\t\t\tformat = \"  -%s=%q: %s\\n\"\n\t\t}\n\t\tfmt.Fprintf(f.out(), format, flag.Name, flag.DefValue, flag.Usage)\n\t})\n}\n\n// PrintDefaults prints to standard error the default values of all defined command-line flags.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// The function is a variable that may be changed to point to a custom function.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set, or the usage function if\n// the flag set is CommandLine.\nfunc (f *FlagSet) usage() {\n\tif f == CommandLine {\n\t\tUsage()\n\t} else if f.Usage == nil {\n\t\tdefaultUsage(f)\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for  -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tfv.Set(\"true\")\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name.  Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help was set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tf.ParseEnv(os.Environ())\n\n\t// Parse configuration from file\n\tconfigFlag := f.actual[\"config\"]\n\tif configFlag != nil {\n\t\tf.ParseFile(configFlag.Value.String())\n\t}\n\n\treturn nil\n}\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif !hasValue {\n\t\t\t\treturn f.failf(\"environment variable needs an value: %s\", name)\n\t\t\t}\n\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif !hasValue {\n\t\t\t\treturn f.failf(\"configuration variable needs an argument: %s\", name)\n\t\t\t}\n\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed returns true if the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// Init sets the name, environment name prefix, and error handling property\n// for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter2/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"881a43080604bcf99ab1118a814d1cb2c268fc36\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/flags.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/namsral/flag\"\n)\n\nfunc main() {\n\tvar age int\n\n\tflag.IntVar(&age, \"age\", 0, \"age of gopher\")\n\tflag.Parse()\n\n\tfmt.Print(\"age:\", age)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/run",
    "content": "#!/bin/bash\ndocker run --rm -e \"AGE=35\" -v $(pwd):/go/src/app -w /go/src/app golang go run flags.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/vendor/github.com/namsral/flag/extras.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\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strings\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// DefaultConfigFlagname defines the flag name of the optional config file\n// path. Used to lookup and parse the config file when a default is set and\n// available on disk.\nvar DefaultConfigFlagname = \"config\"\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/vendor/github.com/namsral/flag/flag.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/*\n\tPackage flag implements command-line flag parsing.\n\n\tUsage:\n\n\tDefine flags using flag.String(), Bool(), Int(), etc.\n\n\tThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\t\timport \"flag\"\n\t\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\tIf you like, you can bind the flag to a variable using the Var() functions.\n\t\tvar flagvar int\n\t\tfunc init() {\n\t\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t\t}\n\tOr you can create custom flags that satisfy the Value interface (with\n\tpointer receivers) and couple them to flag parsing by\n\t\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\n\tFor such flags, the default value is just the initial value of the variable.\n\n\tAfter all flags are defined, call\n\t\tflag.Parse()\n\tto parse the command line into the defined flags.\n\n\tFlags may then be used directly. If you're using the flags themselves,\n\tthey are all pointers; if you bind to variables, they're values.\n\t\tfmt.Println(\"ip has value \", *ip)\n\t\tfmt.Println(\"flagvar has value \", flagvar)\n\n\tAfter parsing, the arguments following the flags are available as the\n\tslice flag.Args() or individually as flag.Arg(i).\n\tThe arguments are indexed from 0 through flag.NArg()-1.\n\n\tCommand line flag syntax:\n\t\t-flag\n\t\t-flag=x\n\t\t-flag x  // non-boolean flags only\n\tOne or two minus signs may be used; they are equivalent.\n\tThe last form is not permitted for boolean flags because the\n\tmeaning of the command\n\t\tcmd -x *\n\twill change if there is a file called 0, false, etc.  You must\n\tuse the -flag=false form to turn off a boolean flag.\n\n\tFlag parsing stops just before the first non-flag argument\n\t(\"-\" is a non-flag argument) or after the terminator \"--\".\n\n\tInteger flags accept 1234, 0664, 0x1234 and may be negative.\n\tBoolean flags may be:\n\t\t1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False\n\tDuration flags accept any input valid for time.ParseDuration.\n\n\tThe default set of command-line flags is controlled by\n\ttop-level functions.  The FlagSet type allows one to define\n\tindependent sets of flags, such as to implement subcommands\n\tin a command-line interface. The methods of FlagSet are\n\tanalogous to the top-level functions for the command-line\n\tflag set.\n*/\npackage flag\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ErrHelp is the error returned if the -help or -h flag is invoked\n// but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\n//\n// Set is called once, in command line order, for each flag present.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how FlagSet.Parse behaves if the parse fails.\ntype ErrorHandling int\n\n// These constants cause FlagSet.Parse to behave as described if the parse fails.\nconst (\n\tContinueOnError ErrorHandling = iota // Return a descriptive error.\n\tExitOnError                          // Call os.Exit(2).\n\tPanicOnError                         // Call panic with a descriptive error.\n)\n\n// A FlagSet represents a set of defined flags. The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each. It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each. It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// isZeroValue guesses whether the string represents the zero\n// value for a flag. It is not accurate but in practice works OK.\nfunc isZeroValue(flag *Flag, value string) bool {\n\t// Build a zero value of the flag's Value type, and see if the\n\t// result of calling its String method equals the value passed in.\n\t// This works unless the Value type is itself an interface type.\n\ttyp := reflect.TypeOf(flag.Value)\n\tvar z reflect.Value\n\tif typ.Kind() == reflect.Ptr {\n\t\tz = reflect.New(typ.Elem())\n\t} else {\n\t\tz = reflect.Zero(typ)\n\t}\n\tif value == z.Interface().(Value).String() {\n\t\treturn true\n\t}\n\n\tswitch value {\n\tcase \"false\":\n\t\treturn true\n\tcase \"\":\n\t\treturn true\n\tcase \"0\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\t// No explicit name, so use type if we can find one.\n\tname = \"value\"\n\tswitch flag.Value.(type) {\n\tcase boolFlag:\n\t\tname = \"\"\n\tcase *durationValue:\n\t\tname = \"duration\"\n\tcase *float64Value:\n\t\tname = \"float\"\n\tcase *intValue, *int64Value:\n\t\tname = \"int\"\n\tcase *stringValue:\n\t\tname = \"string\"\n\tcase *uintValue, *uint64Value:\n\t\tname = \"uint\"\n\t}\n\treturn\n}\n\n// PrintDefaults prints to standard error the default values of all\n// defined command-line flags in the set. See the documentation for\n// the global function PrintDefaults for more information.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\ts := fmt.Sprintf(\"  -%s\", flag.Name) // Two spaces before -; see next two comments.\n\t\tname, usage := UnquoteUsage(flag)\n\t\tif len(name) > 0 {\n\t\t\ts += \" \" + name\n\t\t}\n\t\t// Boolean flags of one ASCII letter are so common we\n\t\t// treat them specially, putting their usage on the same line.\n\t\tif len(s) <= 4 { // space, space, '-', 'x'.\n\t\t\ts += \"\\t\"\n\t\t} else {\n\t\t\t// Four spaces before the tab triggers good alignment\n\t\t\t// for both 4- and 8-space tab stops.\n\t\t\ts += \"\\n    \\t\"\n\t\t}\n\t\ts += usage\n\t\tif !isZeroValue(flag, flag.DefValue) {\n\t\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t\t// put quotes on the value\n\t\t\t\ts += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\ts += fmt.Sprintf(\" (default %v)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(f.out(), s, \"\\n\")\n\t})\n}\n\n// PrintDefaults prints, to standard error unless configured otherwise,\n// a usage message showing the default settings of all defined\n// command-line flags.\n// For an integer valued flag x, the default output has the form\n//\t-x int\n//\t\tusage-message-for-x (default 7)\n// The usage message will appear on a separate line for anything but\n// a bool flag with a one-byte name. For bool flags, the type is\n// omitted and if the flag name is one byte the usage message appears\n// on the same line. The parenthetical default is omitted if the\n// default is the zero value for the type. The listed type, here int,\n// can be changed by placing a back-quoted name in the flag's usage\n// string; the first such item in the message is taken to be a parameter\n// name to show in the message and the back quotes are stripped from\n// the message when displayed. For instance, given\n//\tflag.String(\"I\", \"\", \"search `directory` for include files\")\n// the output will be\n//\t-I directory\n//\t\tsearch directory for include files.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// It is called when an error occurs while parsing flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set if one is specified,\n// or the appropriate default usage function otherwise.\nfunc (f *FlagSet) usage() {\n\tif f.Usage == nil {\n\t\tif f == CommandLine {\n\t\t\tUsage()\n\t\t} else {\n\t\t\tdefaultUsage(f)\n\t\t}\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// ignore go test flags\n\tif strings.HasPrefix(name, \"test.\") {\n\t\treturn false, nil\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := fv.Set(\"true\"); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean flag %s: %v\", name, err)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name. Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help or -h were set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tif err := f.ParseEnv(os.Environ()); err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t\treturn err\n\t}\n\n\t// Parse configuration from file\n\tvar cFile string\n\tif cf := f.formal[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cf := f.actual[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cFile != \"\" {\n\t\tif err := f.ParseFile(cFile); err != nil {\n\t\t\tswitch f.errorHandling {\n\t\t\tcase ContinueOnError:\n\t\t\t\treturn err\n\t\t\tcase ExitOnError:\n\t\t\t\tos.Exit(2)\n\t\t\tcase PanicOnError:\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed reports whether the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and so on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/flags/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"7fa59bdb55485001d702d9b6e15367cdf26bfde8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/flags.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/joho/godotenv\"\n\t\"github.com/namsral/flag\"\n)\n\nfunc main() {\n\tvar age int\n\n\tgodotenv.Load()\n\n\tflag.IntVar(&age, \"age\", 0, \"age of gopher\")\n\tflag.Parse()\n\n\tfmt.Print(\"age:\", age)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/run",
    "content": "#!/bin/bash\ndocker run --rm -v $(pwd):/go/src/app -w /go/src/app golang go run flags.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/joho/godotenv/LICENCE",
    "content": "Copyright (c) 2013 John Barton\n\nMIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/joho/godotenv/autoload/autoload.go",
    "content": "package autoload\n\n/*\n\tYou can just read the .env file on import just by doing\n\n\t\timport _ \"github.com/joho/godotenv/autoload\"\n\n\tAnd bob's your mother's brother\n*/\n\nimport \"github.com/joho/godotenv\"\n\nfunc init() {\n\tgodotenv.Load()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/joho/godotenv/cmd/godotenv/cmd.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\n\t\"strings\"\n\n\t\"github.com/joho/godotenv\"\n)\n\nfunc main() {\n\tvar showHelp bool\n\tflag.BoolVar(&showHelp, \"h\", false, \"show help\")\n\tvar rawEnvFilenames string\n\tflag.StringVar(&rawEnvFilenames, \"f\", \"\", \"comma separated paths to .env files\")\n\n\tflag.Parse()\n\n\tusage := `\nRun a process with a env setup from a .env file\n\ngodotenv [-f ENV_FILE_PATHS] COMMAND_ARGS\n\nENV_FILE_PATHS: comma separated paths to .env files\nCOMMAND_ARGS: command and args you want to run\n\nexample\n  godotenv -f /path/to/something/.env,/another/path/.env fortune\n`\n\t// if no args or -h flag\n\t// print usage and return\n\targs := flag.Args()\n\tif showHelp || len(args) == 0 {\n\t\tfmt.Println(usage)\n\t\treturn\n\t}\n\n\t// load env\n\tvar envFilenames []string\n\tif rawEnvFilenames != \"\" {\n\t\tenvFilenames = strings.Split(rawEnvFilenames, \",\")\n\t}\n\n\t// take rest of args and \"exec\" them\n\tcmd := args[0]\n\tcmdArgs := args[1:]\n\n\terr := godotenv.Exec(envFilenames, cmd, cmdArgs)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/joho/godotenv/godotenv.go",
    "content": "// Package godotenv is a go port of the ruby dotenv library (https://github.com/bkeepers/dotenv)\n//\n// Examples/readme can be found on the github page at https://github.com/joho/godotenv\n//\n// The TL;DR is that you make a .env file that looks something like\n//\n// \t\tSOME_ENV_VAR=somevalue\n//\n// and then in your go code you can call\n//\n// \t\tgodotenv.Load()\n//\n// and all the env vars declared in .env will be avaiable through os.Getenv(\"SOME_ENV_VAR\")\npackage godotenv\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n)\n\n// Load will read your env file(s) and load them into ENV for this process.\n//\n// Call this function as close as possible to the start of your program (ideally in main)\n//\n// If you call Load without any args it will default to loading .env in the current path\n//\n// You can otherwise tell it which files to load (there can be more than one) like\n//\n//\t\tgodotenv.Load(\"fileone\", \"filetwo\")\n//\n// It's important to note that it WILL NOT OVERRIDE an env variable that already exists - consider the .env file to set dev vars or sensible defaults\nfunc Load(filenames ...string) (err error) {\n\tfilenames = filenamesOrDefault(filenames)\n\n\tfor _, filename := range filenames {\n\t\terr = loadFile(filename, false)\n\t\tif err != nil {\n\t\t\treturn // return early on a spazout\n\t\t}\n\t}\n\treturn\n}\n\n// Overload will read your env file(s) and load them into ENV for this process.\n//\n// Call this function as close as possible to the start of your program (ideally in main)\n//\n// If you call Overload without any args it will default to loading .env in the current path\n//\n// You can otherwise tell it which files to load (there can be more than one) like\n//\n//\t\tgodotenv.Overload(\"fileone\", \"filetwo\")\n//\n// It's important to note this WILL OVERRIDE an env variable that already exists - consider the .env file to forcefilly set all vars.\nfunc Overload(filenames ...string) (err error) {\n\tfilenames = filenamesOrDefault(filenames)\n\n\tfor _, filename := range filenames {\n\t\terr = loadFile(filename, true)\n\t\tif err != nil {\n\t\t\treturn // return early on a spazout\n\t\t}\n\t}\n\treturn\n}\n\n// Read all env (with same file loading semantics as Load) but return values as\n// a map rather than automatically writing values into env\nfunc Read(filenames ...string) (envMap map[string]string, err error) {\n\tfilenames = filenamesOrDefault(filenames)\n\tenvMap = make(map[string]string)\n\n\tfor _, filename := range filenames {\n\t\tindividualEnvMap, individualErr := readFile(filename)\n\n\t\tif individualErr != nil {\n\t\t\terr = individualErr\n\t\t\treturn // return early on a spazout\n\t\t}\n\n\t\tfor key, value := range individualEnvMap {\n\t\t\tenvMap[key] = value\n\t\t}\n\t}\n\n\treturn\n}\n\n// Exec loads env vars from the specified filenames (empty map falls back to default)\n// then executes the cmd specified.\n//\n// Simply hooks up os.Stdin/err/out to the command and calls Run()\n//\n// If you want more fine grained control over your command it's recommended\n// that you use `Load()` or `Read()` and the `os/exec` package yourself.\nfunc Exec(filenames []string, cmd string, cmdArgs []string) error {\n\tLoad(filenames...)\n\n\tcommand := exec.Command(cmd, cmdArgs...)\n\tcommand.Stdin = os.Stdin\n\tcommand.Stdout = os.Stdout\n\tcommand.Stderr = os.Stderr\n\treturn command.Run()\n}\n\nfunc filenamesOrDefault(filenames []string) []string {\n\tif len(filenames) == 0 {\n\t\treturn []string{\".env\"}\n\t}\n\treturn filenames\n}\n\nfunc loadFile(filename string, overload bool) error {\n\tenvMap, err := readFile(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor key, value := range envMap {\n\t\tif os.Getenv(key) == \"\" || overload {\n\t\t\tos.Setenv(key, value)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc readFile(filename string) (envMap map[string]string, err error) {\n\tfile, err := os.Open(filename)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer file.Close()\n\n\tenvMap = make(map[string]string)\n\n\tvar lines []string\n\tscanner := bufio.NewScanner(file)\n\tfor scanner.Scan() {\n\t\tlines = append(lines, scanner.Text())\n\t}\n\n\tif err = scanner.Err(); err != nil {\n\t\treturn\n\t}\n\n\tfor _, fullLine := range lines {\n\t\tif !isIgnoredLine(fullLine) {\n\t\t\tvar key, value string\n\t\t\tkey, value, err = parseLine(fullLine)\n\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tenvMap[key] = value\n\t\t}\n\t}\n\treturn\n}\n\nfunc parseLine(line string) (key string, value string, err error) {\n\tif len(line) == 0 {\n\t\terr = errors.New(\"zero length string\")\n\t\treturn\n\t}\n\n\t// ditch the comments (but keep quoted hashes)\n\tif strings.Contains(line, \"#\") {\n\t\tsegmentsBetweenHashes := strings.Split(line, \"#\")\n\t\tquotesAreOpen := false\n\t\tvar segmentsToKeep []string\n\t\tfor _, segment := range segmentsBetweenHashes {\n\t\t\tif strings.Count(segment, \"\\\"\") == 1 || strings.Count(segment, \"'\") == 1 {\n\t\t\t\tif quotesAreOpen {\n\t\t\t\t\tquotesAreOpen = false\n\t\t\t\t\tsegmentsToKeep = append(segmentsToKeep, segment)\n\t\t\t\t} else {\n\t\t\t\t\tquotesAreOpen = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif len(segmentsToKeep) == 0 || quotesAreOpen {\n\t\t\t\tsegmentsToKeep = append(segmentsToKeep, segment)\n\t\t\t}\n\t\t}\n\n\t\tline = strings.Join(segmentsToKeep, \"#\")\n\t}\n\n\t// now split key from value\n\tsplitString := strings.SplitN(line, \"=\", 2)\n\n\tif len(splitString) != 2 {\n\t\t// try yaml mode!\n\t\tsplitString = strings.SplitN(line, \":\", 2)\n\t}\n\n\tif len(splitString) != 2 {\n\t\terr = errors.New(\"Can't separate key from value\")\n\t\treturn\n\t}\n\n\t// Parse the key\n\tkey = splitString[0]\n\tif strings.HasPrefix(key, \"export\") {\n\t\tkey = strings.TrimPrefix(key, \"export\")\n\t}\n\tkey = strings.Trim(key, \" \")\n\n\t// Parse the value\n\tvalue = splitString[1]\n\t// trim\n\tvalue = strings.Trim(value, \" \")\n\n\t// check if we've got quoted values\n\tif strings.Count(value, \"\\\"\") == 2 || strings.Count(value, \"'\") == 2 {\n\t\t// pull the quotes off the edges\n\t\tvalue = strings.Trim(value, \"\\\"'\")\n\n\t\t// expand quotes\n\t\tvalue = strings.Replace(value, \"\\\\\\\"\", \"\\\"\", -1)\n\t\t// expand newlines\n\t\tvalue = strings.Replace(value, \"\\\\n\", \"\\n\", -1)\n\t}\n\n\treturn\n}\n\nfunc isIgnoredLine(line string) bool {\n\ttrimmedLine := strings.Trim(line, \" \\n\\t\")\n\treturn len(trimmedLine) == 0 || strings.HasPrefix(trimmedLine, \"#\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/namsral/flag/extras.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\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strings\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// DefaultConfigFlagname defines the flag name of the optional config file\n// path. Used to lookup and parse the config file when a default is set and\n// available on disk.\nvar DefaultConfigFlagname = \"config\"\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/github.com/namsral/flag/flag.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/*\n\tPackage flag implements command-line flag parsing.\n\n\tUsage:\n\n\tDefine flags using flag.String(), Bool(), Int(), etc.\n\n\tThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\t\timport \"flag\"\n\t\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\tIf you like, you can bind the flag to a variable using the Var() functions.\n\t\tvar flagvar int\n\t\tfunc init() {\n\t\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t\t}\n\tOr you can create custom flags that satisfy the Value interface (with\n\tpointer receivers) and couple them to flag parsing by\n\t\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\n\tFor such flags, the default value is just the initial value of the variable.\n\n\tAfter all flags are defined, call\n\t\tflag.Parse()\n\tto parse the command line into the defined flags.\n\n\tFlags may then be used directly. If you're using the flags themselves,\n\tthey are all pointers; if you bind to variables, they're values.\n\t\tfmt.Println(\"ip has value \", *ip)\n\t\tfmt.Println(\"flagvar has value \", flagvar)\n\n\tAfter parsing, the arguments following the flags are available as the\n\tslice flag.Args() or individually as flag.Arg(i).\n\tThe arguments are indexed from 0 through flag.NArg()-1.\n\n\tCommand line flag syntax:\n\t\t-flag\n\t\t-flag=x\n\t\t-flag x  // non-boolean flags only\n\tOne or two minus signs may be used; they are equivalent.\n\tThe last form is not permitted for boolean flags because the\n\tmeaning of the command\n\t\tcmd -x *\n\twill change if there is a file called 0, false, etc.  You must\n\tuse the -flag=false form to turn off a boolean flag.\n\n\tFlag parsing stops just before the first non-flag argument\n\t(\"-\" is a non-flag argument) or after the terminator \"--\".\n\n\tInteger flags accept 1234, 0664, 0x1234 and may be negative.\n\tBoolean flags may be:\n\t\t1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False\n\tDuration flags accept any input valid for time.ParseDuration.\n\n\tThe default set of command-line flags is controlled by\n\ttop-level functions.  The FlagSet type allows one to define\n\tindependent sets of flags, such as to implement subcommands\n\tin a command-line interface. The methods of FlagSet are\n\tanalogous to the top-level functions for the command-line\n\tflag set.\n*/\npackage flag\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ErrHelp is the error returned if the -help or -h flag is invoked\n// but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\n//\n// Set is called once, in command line order, for each flag present.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how FlagSet.Parse behaves if the parse fails.\ntype ErrorHandling int\n\n// These constants cause FlagSet.Parse to behave as described if the parse fails.\nconst (\n\tContinueOnError ErrorHandling = iota // Return a descriptive error.\n\tExitOnError                          // Call os.Exit(2).\n\tPanicOnError                         // Call panic with a descriptive error.\n)\n\n// A FlagSet represents a set of defined flags. The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each. It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each. It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// isZeroValue guesses whether the string represents the zero\n// value for a flag. It is not accurate but in practice works OK.\nfunc isZeroValue(flag *Flag, value string) bool {\n\t// Build a zero value of the flag's Value type, and see if the\n\t// result of calling its String method equals the value passed in.\n\t// This works unless the Value type is itself an interface type.\n\ttyp := reflect.TypeOf(flag.Value)\n\tvar z reflect.Value\n\tif typ.Kind() == reflect.Ptr {\n\t\tz = reflect.New(typ.Elem())\n\t} else {\n\t\tz = reflect.Zero(typ)\n\t}\n\tif value == z.Interface().(Value).String() {\n\t\treturn true\n\t}\n\n\tswitch value {\n\tcase \"false\":\n\t\treturn true\n\tcase \"\":\n\t\treturn true\n\tcase \"0\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\t// No explicit name, so use type if we can find one.\n\tname = \"value\"\n\tswitch flag.Value.(type) {\n\tcase boolFlag:\n\t\tname = \"\"\n\tcase *durationValue:\n\t\tname = \"duration\"\n\tcase *float64Value:\n\t\tname = \"float\"\n\tcase *intValue, *int64Value:\n\t\tname = \"int\"\n\tcase *stringValue:\n\t\tname = \"string\"\n\tcase *uintValue, *uint64Value:\n\t\tname = \"uint\"\n\t}\n\treturn\n}\n\n// PrintDefaults prints to standard error the default values of all\n// defined command-line flags in the set. See the documentation for\n// the global function PrintDefaults for more information.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\ts := fmt.Sprintf(\"  -%s\", flag.Name) // Two spaces before -; see next two comments.\n\t\tname, usage := UnquoteUsage(flag)\n\t\tif len(name) > 0 {\n\t\t\ts += \" \" + name\n\t\t}\n\t\t// Boolean flags of one ASCII letter are so common we\n\t\t// treat them specially, putting their usage on the same line.\n\t\tif len(s) <= 4 { // space, space, '-', 'x'.\n\t\t\ts += \"\\t\"\n\t\t} else {\n\t\t\t// Four spaces before the tab triggers good alignment\n\t\t\t// for both 4- and 8-space tab stops.\n\t\t\ts += \"\\n    \\t\"\n\t\t}\n\t\ts += usage\n\t\tif !isZeroValue(flag, flag.DefValue) {\n\t\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t\t// put quotes on the value\n\t\t\t\ts += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\ts += fmt.Sprintf(\" (default %v)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(f.out(), s, \"\\n\")\n\t})\n}\n\n// PrintDefaults prints, to standard error unless configured otherwise,\n// a usage message showing the default settings of all defined\n// command-line flags.\n// For an integer valued flag x, the default output has the form\n//\t-x int\n//\t\tusage-message-for-x (default 7)\n// The usage message will appear on a separate line for anything but\n// a bool flag with a one-byte name. For bool flags, the type is\n// omitted and if the flag name is one byte the usage message appears\n// on the same line. The parenthetical default is omitted if the\n// default is the zero value for the type. The listed type, here int,\n// can be changed by placing a back-quoted name in the flag's usage\n// string; the first such item in the message is taken to be a parameter\n// name to show in the message and the back quotes are stripped from\n// the message when displayed. For instance, given\n//\tflag.String(\"I\", \"\", \"search `directory` for include files\")\n// the output will be\n//\t-I directory\n//\t\tsearch directory for include files.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// It is called when an error occurs while parsing flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set if one is specified,\n// or the appropriate default usage function otherwise.\nfunc (f *FlagSet) usage() {\n\tif f.Usage == nil {\n\t\tif f == CommandLine {\n\t\t\tUsage()\n\t\t} else {\n\t\t\tdefaultUsage(f)\n\t\t}\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// ignore go test flags\n\tif strings.HasPrefix(name, \"test.\") {\n\t\treturn false, nil\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := fv.Set(\"true\"); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean flag %s: %v\", name, err)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name. Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help or -h were set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tif err := f.ParseEnv(os.Environ()); err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t\treturn err\n\t}\n\n\t// Parse configuration from file\n\tvar cFile string\n\tif cf := f.formal[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cf := f.actual[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cFile != \"\" {\n\t\tif err := f.ParseFile(cFile); err != nil {\n\t\t\tswitch f.errorHandling {\n\t\t\tcase ContinueOnError:\n\t\t\t\treturn err\n\t\t\tcase ExitOnError:\n\t\t\t\tos.Exit(2)\n\t\t\tcase PanicOnError:\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed reports whether the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and so on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/godotenv/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/joho/godotenv\",\n\t\t\t\"repository\": \"https://github.com/joho/godotenv\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"726cc8b906e3d31c70a9671c90a13716a8d3f50d\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"7fa59bdb55485001d702d9b6e15367cdf26bfde8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/spf13/viper\"\n)\n\nfunc readConfig(filename string, defaults map[string]interface{}) (*viper.Viper, error) {\n\tv := viper.New()\n\tfor key, value := range defaults {\n\t\tv.SetDefault(key, value)\n\t}\n\tv.SetConfigName(filename)\n\tv.AddConfigPath(\".\")\n\tv.AutomaticEnv()\n\terr := v.ReadInConfig()\n\treturn v, err\n}\n\nfunc main() {\n\tv1, err := readConfig(\".env\", map[string]interface{}{\n\t\t\"port\":     9090,\n\t\t\"hostname\": \"localhost\",\n\t\t\"auth\": map[string]string{\n\t\t\t\"username\": \"titpetric\",\n\t\t\t\"password\": \"12fa\",\n\t\t},\n\t})\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"Error when reading config: %v\\n\", err))\n\t}\n\n\tport := v1.GetInt(\"port\")\n\thostname := v1.GetString(\"hostname\")\n\tauth := v1.GetStringMapString(\"auth\")\n\n\tfmt.Printf(\"Reading config for port = %d\\n\", port)\n\tfmt.Printf(\"Reading config for hostname = %s\\n\", hostname)\n\tfmt.Printf(\"Reading config for auth = %#v\\n\", auth)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/run",
    "content": "#!/bin/bash\ndocker run -h viper --rm -v $(pwd):/go/src/app -w /go/src/app golang:1.8-alpine go run main.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/run_with_env",
    "content": "#!/bin/bash\ndocker run -h viper --rm -e HOSTNAME=example.com -e PORT=1337 -v $(pwd):/go/src/app -w /go/src/app golang:1.8-alpine go run main.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/acl.go",
    "content": "package consulapi\n\nconst (\n\t// ACLCLientType is the client type token\n\tACLClientType = \"client\"\n\n\t// ACLManagementType is the management type token\n\tACLManagementType = \"management\"\n)\n\n// ACLEntry is used to represent an ACL entry\ntype ACLEntry struct {\n\tCreateIndex uint64\n\tModifyIndex uint64\n\tID          string\n\tName        string\n\tType        string\n\tRules       string\n}\n\n// ACL can be used to query the ACL endpoints\ntype ACL struct {\n\tc *Client\n}\n\n// ACL returns a handle to the ACL endpoints\nfunc (c *Client) ACL() *ACL {\n\treturn &ACL{c}\n}\n\n// Create is used to generate a new token with the given parameters\nfunc (a *ACL) Create(acl *ACLEntry, q *WriteOptions) (string, *WriteMeta, error) {\n\tr := a.c.newRequest(\"PUT\", \"/v1/acl/create\")\n\tr.setWriteOptions(q)\n\tr.obj = acl\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\tvar out struct{ ID string }\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn out.ID, wm, nil\n}\n\n// Update is used to update the rules of an existing token\nfunc (a *ACL) Update(acl *ACLEntry, q *WriteOptions) (*WriteMeta, error) {\n\tr := a.c.newRequest(\"PUT\", \"/v1/acl/update\")\n\tr.setWriteOptions(q)\n\tr.obj = acl\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\treturn wm, nil\n}\n\n// Destroy is used to destroy a given ACL token ID\nfunc (a *ACL) Destroy(id string, q *WriteOptions) (*WriteMeta, error) {\n\tr := a.c.newRequest(\"PUT\", \"/v1/acl/destroy/\"+id)\n\tr.setWriteOptions(q)\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\treturn wm, nil\n}\n\n// Clone is used to return a new token cloned from an existing one\nfunc (a *ACL) Clone(id string, q *WriteOptions) (string, *WriteMeta, error) {\n\tr := a.c.newRequest(\"PUT\", \"/v1/acl/clone/\"+id)\n\tr.setWriteOptions(q)\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\tvar out struct{ ID string }\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn out.ID, wm, nil\n}\n\n// Info is used to query for information about an ACL token\nfunc (a *ACL) Info(id string, q *QueryOptions) (*ACLEntry, *QueryMeta, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/acl/info/\"+id)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*ACLEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif len(entries) > 0 {\n\t\treturn entries[0], qm, nil\n\t}\n\treturn nil, qm, nil\n}\n\n// List is used to get all the ACL tokens\nfunc (a *ACL) List(q *QueryOptions) ([]*ACLEntry, *QueryMeta, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/acl/list\")\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*ACLEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/agent.go",
    "content": "package consulapi\n\nimport (\n\t\"fmt\"\n)\n\n// AgentCheck represents a check known to the agent\ntype AgentCheck struct {\n\tNode        string\n\tCheckID     string\n\tName        string\n\tStatus      string\n\tNotes       string\n\tOutput      string\n\tServiceID   string\n\tServiceName string\n}\n\n// AgentService represents a service known to the agent\ntype AgentService struct {\n\tID      string\n\tService string\n\tTags    []string\n\tPort    int\n}\n\n// AgentMember represents a cluster member known to the agent\ntype AgentMember struct {\n\tName        string\n\tAddr        string\n\tPort        uint16\n\tTags        map[string]string\n\tStatus      int\n\tProtocolMin uint8\n\tProtocolMax uint8\n\tProtocolCur uint8\n\tDelegateMin uint8\n\tDelegateMax uint8\n\tDelegateCur uint8\n}\n\n// AgentServiceRegistration is used to register a new service\ntype AgentServiceRegistration struct {\n\tID    string   `json:\",omitempty\"`\n\tName  string   `json:\",omitempty\"`\n\tTags  []string `json:\",omitempty\"`\n\tPort  int      `json:\",omitempty\"`\n\tCheck *AgentServiceCheck\n}\n\n// AgentCheckRegistration is used to register a new check\ntype AgentCheckRegistration struct {\n\tID    string `json:\",omitempty\"`\n\tName  string `json:\",omitempty\"`\n\tNotes string `json:\",omitempty\"`\n\tAgentServiceCheck\n}\n\n// AgentServiceCheck is used to create an associated\n// check for a service\ntype AgentServiceCheck struct {\n\tScript   string `json:\",omitempty\"`\n\tInterval string `json:\",omitempty\"`\n\tTTL      string `json:\",omitempty\"`\n}\n\n// Agent can be used to query the Agent endpoints\ntype Agent struct {\n\tc *Client\n\n\t// cache the node name\n\tnodeName string\n}\n\n// Agent returns a handle to the agent endpoints\nfunc (c *Client) Agent() *Agent {\n\treturn &Agent{c: c}\n}\n\n// Self is used to query the agent we are speaking to for\n// information about itself\nfunc (a *Agent) Self() (map[string]map[string]interface{}, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/agent/self\")\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar out map[string]map[string]interface{}\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// NodeName is used to get the node name of the agent\nfunc (a *Agent) NodeName() (string, error) {\n\tif a.nodeName != \"\" {\n\t\treturn a.nodeName, nil\n\t}\n\tinfo, err := a.Self()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tname := info[\"Config\"][\"NodeName\"].(string)\n\ta.nodeName = name\n\treturn name, nil\n}\n\n// Checks returns the locally registered checks\nfunc (a *Agent) Checks() (map[string]*AgentCheck, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/agent/checks\")\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar out map[string]*AgentCheck\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Services returns the locally registered services\nfunc (a *Agent) Services() (map[string]*AgentService, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/agent/services\")\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar out map[string]*AgentService\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Members returns the known gossip members. The WAN\n// flag can be used to query a server for WAN members.\nfunc (a *Agent) Members(wan bool) ([]*AgentMember, error) {\n\tr := a.c.newRequest(\"GET\", \"/v1/agent/members\")\n\tif wan {\n\t\tr.params.Set(\"wan\", \"1\")\n\t}\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar out []*AgentMember\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ServiceRegister is used to register a new service with\n// the local agent\nfunc (a *Agent) ServiceRegister(service *AgentServiceRegistration) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/service/register\")\n\tr.obj = service\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// ServiceDeregister is used to deregister a service with\n// the local agent\nfunc (a *Agent) ServiceDeregister(serviceID string) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/service/deregister/\"+serviceID)\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// PassTTL is used to set a TTL check to the passing state\nfunc (a *Agent) PassTTL(checkID, note string) error {\n\treturn a.UpdateTTL(checkID, note, \"pass\")\n}\n\n// WarnTTL is used to set a TTL check to the warning state\nfunc (a *Agent) WarnTTL(checkID, note string) error {\n\treturn a.UpdateTTL(checkID, note, \"warn\")\n}\n\n// FailTTL is used to set a TTL check to the failing state\nfunc (a *Agent) FailTTL(checkID, note string) error {\n\treturn a.UpdateTTL(checkID, note, \"fail\")\n}\n\n// UpdateTTL is used to update the TTL of a check\nfunc (a *Agent) UpdateTTL(checkID, note, status string) error {\n\tswitch status {\n\tcase \"pass\":\n\tcase \"warn\":\n\tcase \"fail\":\n\tdefault:\n\t\treturn fmt.Errorf(\"Invalid status: %s\", status)\n\t}\n\tendpoint := fmt.Sprintf(\"/v1/agent/check/%s/%s\", status, checkID)\n\tr := a.c.newRequest(\"PUT\", endpoint)\n\tr.params.Set(\"note\", note)\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// CheckRegister is used to register a new check with\n// the local agent\nfunc (a *Agent) CheckRegister(check *AgentCheckRegistration) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/check/register\")\n\tr.obj = check\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// CheckDeregister is used to deregister a check with\n// the local agent\nfunc (a *Agent) CheckDeregister(checkID string) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/check/deregister/\"+checkID)\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// Join is used to instruct the agent to attempt a join to\n// another cluster member\nfunc (a *Agent) Join(addr string, wan bool) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/join/\"+addr)\n\tif wan {\n\t\tr.params.Set(\"wan\", \"1\")\n\t}\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n\n// ForceLeave is used to have the agent eject a failed node\nfunc (a *Agent) ForceLeave(node string) error {\n\tr := a.c.newRequest(\"PUT\", \"/v1/agent/force-leave/\"+node)\n\t_, resp, err := requireOK(a.c.doRequest(r))\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp.Body.Close()\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/api.go",
    "content": "package consulapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// QueryOptions are used to parameterize a query\ntype QueryOptions struct {\n\t// Providing a datacenter overwrites the DC provided\n\t// by the Config\n\tDatacenter string\n\n\t// AllowStale allows any Consul server (non-leader) to service\n\t// a read. This allows for lower latency and higher throughput\n\tAllowStale bool\n\n\t// RequireConsistent forces the read to be fully consistent.\n\t// This is more expensive but prevents ever performing a stale\n\t// read.\n\tRequireConsistent bool\n\n\t// WaitIndex is used to enable a blocking query. Waits\n\t// until the timeout or the next index is reached\n\tWaitIndex uint64\n\n\t// WaitTime is used to bound the duration of a wait.\n\t// Defaults to that of the Config, but can be overriden.\n\tWaitTime time.Duration\n\n\t// Token is used to provide a per-request ACL token\n\t// which overrides the agent's default token.\n\tToken string\n}\n\n// WriteOptions are used to parameterize a write\ntype WriteOptions struct {\n\t// Providing a datacenter overwrites the DC provided\n\t// by the Config\n\tDatacenter string\n\n\t// Token is used to provide a per-request ACL token\n\t// which overrides the agent's default token.\n\tToken string\n}\n\n// QueryMeta is used to return meta data about a query\ntype QueryMeta struct {\n\t// LastIndex. This can be used as a WaitIndex to perform\n\t// a blocking query\n\tLastIndex uint64\n\n\t// Time of last contact from the leader for the\n\t// server servicing the request\n\tLastContact time.Duration\n\n\t// Is there a known leader\n\tKnownLeader bool\n\n\t// How long did the request take\n\tRequestTime time.Duration\n}\n\n// WriteMeta is used to return meta data about a write\ntype WriteMeta struct {\n\t// How long did the request take\n\tRequestTime time.Duration\n}\n\n// HttpBasicAuth is used to authenticate http client with HTTP Basic Authentication\ntype HttpBasicAuth struct {\n\t// Username to use for HTTP Basic Authentication\n\tUsername string\n\n\t// Password to use for HTTP Basic Authentication\n\tPassword string\n}\n\n// Config is used to configure the creation of a client\ntype Config struct {\n\t// Address is the address of the Consul server\n\tAddress string\n\n\t// Scheme is the URI scheme for the Consul server\n\tScheme string\n\n\t// Datacenter to use. If not provided, the default agent datacenter is used.\n\tDatacenter string\n\n\t// HttpClient is the client to use. Default will be\n\t// used if not provided.\n\tHttpClient *http.Client\n\n\t// HttpAuth is the auth info to use for http access.\n\tHttpAuth *HttpBasicAuth\n\n\t// WaitTime limits how long a Watch will block. If not provided,\n\t// the agent default values will be used.\n\tWaitTime time.Duration\n\n\t// Token is used to provide a per-request ACL token\n\t// which overrides the agent's default token.\n\tToken string\n}\n\n// DefaultConfig returns a default configuration for the client\nfunc DefaultConfig() *Config {\n\treturn &Config{\n\t\tAddress:    \"127.0.0.1:8500\",\n\t\tScheme:     \"http\",\n\t\tHttpClient: http.DefaultClient,\n\t}\n}\n\n// Client provides a client to the Consul API\ntype Client struct {\n\tconfig Config\n}\n\n// NewClient returns a new client\nfunc NewClient(config *Config) (*Client, error) {\n\t// bootstrap the config\n\tdefConfig := DefaultConfig()\n\n\tif len(config.Address) == 0 {\n\t\tconfig.Address = defConfig.Address\n\t}\n\n\tif len(config.Scheme) == 0 {\n\t\tconfig.Scheme = defConfig.Scheme\n\t}\n\n\tif config.HttpClient == nil {\n\t\tconfig.HttpClient = defConfig.HttpClient\n\t}\n\n\tclient := &Client{\n\t\tconfig: *config,\n\t}\n\treturn client, nil\n}\n\n// request is used to help build up a request\ntype request struct {\n\tconfig *Config\n\tmethod string\n\turl    *url.URL\n\tparams url.Values\n\tbody   io.Reader\n\tobj    interface{}\n}\n\n// setQueryOptions is used to annotate the request with\n// additional query options\nfunc (r *request) setQueryOptions(q *QueryOptions) {\n\tif q == nil {\n\t\treturn\n\t}\n\tif q.Datacenter != \"\" {\n\t\tr.params.Set(\"dc\", q.Datacenter)\n\t}\n\tif q.AllowStale {\n\t\tr.params.Set(\"stale\", \"\")\n\t}\n\tif q.RequireConsistent {\n\t\tr.params.Set(\"consistent\", \"\")\n\t}\n\tif q.WaitIndex != 0 {\n\t\tr.params.Set(\"index\", strconv.FormatUint(q.WaitIndex, 10))\n\t}\n\tif q.WaitTime != 0 {\n\t\tr.params.Set(\"wait\", durToMsec(q.WaitTime))\n\t}\n\tif q.Token != \"\" {\n\t\tr.params.Set(\"token\", q.Token)\n\t}\n}\n\n// durToMsec converts a duration to a millisecond specified string\nfunc durToMsec(dur time.Duration) string {\n\treturn fmt.Sprintf(\"%dms\", dur/time.Millisecond)\n}\n\n// setWriteOptions is used to annotate the request with\n// additional write options\nfunc (r *request) setWriteOptions(q *WriteOptions) {\n\tif q == nil {\n\t\treturn\n\t}\n\tif q.Datacenter != \"\" {\n\t\tr.params.Set(\"dc\", q.Datacenter)\n\t}\n\tif q.Token != \"\" {\n\t\tr.params.Set(\"token\", q.Token)\n\t}\n}\n\n// toHTTP converts the request to an HTTP request\nfunc (r *request) toHTTP() (*http.Request, error) {\n\t// Encode the query parameters\n\tr.url.RawQuery = r.params.Encode()\n\n\t// Get the url sring\n\turlRaw := r.url.String()\n\n\t// Check if we should encode the body\n\tif r.body == nil && r.obj != nil {\n\t\tif b, err := encodeBody(r.obj); err != nil {\n\t\t\treturn nil, err\n\t\t} else {\n\t\t\tr.body = b\n\t\t}\n\t}\n\n\t// Create the HTTP request\n\treq, err := http.NewRequest(r.method, urlRaw, r.body)\n\n\t// Setup auth\n\tif err == nil && r.config.HttpAuth != nil {\n\t\treq.SetBasicAuth(r.config.HttpAuth.Username, r.config.HttpAuth.Password)\n\t}\n\n\treturn req, err\n}\n\n// newRequest is used to create a new request\nfunc (c *Client) newRequest(method, path string) *request {\n\tr := &request{\n\t\tconfig: &c.config,\n\t\tmethod: method,\n\t\turl: &url.URL{\n\t\t\tScheme: c.config.Scheme,\n\t\t\tHost:   c.config.Address,\n\t\t\tPath:   path,\n\t\t},\n\t\tparams: make(map[string][]string),\n\t}\n\tif c.config.Datacenter != \"\" {\n\t\tr.params.Set(\"dc\", c.config.Datacenter)\n\t}\n\tif c.config.WaitTime != 0 {\n\t\tr.params.Set(\"wait\", durToMsec(r.config.WaitTime))\n\t}\n\tif c.config.Token != \"\" {\n\t\tr.params.Set(\"token\", r.config.Token)\n\t}\n\treturn r\n}\n\n// doRequest runs a request with our client\nfunc (c *Client) doRequest(r *request) (time.Duration, *http.Response, error) {\n\treq, err := r.toHTTP()\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\tstart := time.Now()\n\tresp, err := c.config.HttpClient.Do(req)\n\tdiff := time.Now().Sub(start)\n\treturn diff, resp, err\n}\n\n// parseQueryMeta is used to help parse query meta-data\nfunc parseQueryMeta(resp *http.Response, q *QueryMeta) error {\n\theader := resp.Header\n\n\t// Parse the X-Consul-Index\n\tindex, err := strconv.ParseUint(header.Get(\"X-Consul-Index\"), 10, 64)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to parse X-Consul-Index: %v\", err)\n\t}\n\tq.LastIndex = index\n\n\t// Parse the X-Consul-LastContact\n\tlast, err := strconv.ParseUint(header.Get(\"X-Consul-LastContact\"), 10, 64)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to parse X-Consul-LastContact: %v\", err)\n\t}\n\tq.LastContact = time.Duration(last) * time.Millisecond\n\n\t// Parse the X-Consul-KnownLeader\n\tswitch header.Get(\"X-Consul-KnownLeader\") {\n\tcase \"true\":\n\t\tq.KnownLeader = true\n\tdefault:\n\t\tq.KnownLeader = false\n\t}\n\treturn nil\n}\n\n// decodeBody is used to JSON decode a body\nfunc decodeBody(resp *http.Response, out interface{}) error {\n\tdec := json.NewDecoder(resp.Body)\n\treturn dec.Decode(out)\n}\n\n// encodeBody is used to encode a request body\nfunc encodeBody(obj interface{}) (io.Reader, error) {\n\tbuf := bytes.NewBuffer(nil)\n\tenc := json.NewEncoder(buf)\n\tif err := enc.Encode(obj); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf, nil\n}\n\n// requireOK is used to wrap doRequest and check for a 200\nfunc requireOK(d time.Duration, resp *http.Response, e error) (time.Duration, *http.Response, error) {\n\tif e != nil {\n\t\treturn d, resp, e\n\t}\n\tif resp.StatusCode != 200 {\n\t\tvar buf bytes.Buffer\n\t\tio.Copy(&buf, resp.Body)\n\t\treturn d, resp, fmt.Errorf(\"Unexpected response code: %d (%s)\", resp.StatusCode, buf.Bytes())\n\t}\n\treturn d, resp, e\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/catalog.go",
    "content": "package consulapi\n\ntype Node struct {\n\tNode    string\n\tAddress string\n}\n\ntype CatalogService struct {\n\tNode        string\n\tAddress     string\n\tServiceID   string\n\tServiceName string\n\tServiceTags []string\n\tServicePort int\n}\n\ntype CatalogNode struct {\n\tNode     *Node\n\tServices map[string]*AgentService\n}\n\ntype CatalogRegistration struct {\n\tNode       string\n\tAddress    string\n\tDatacenter string\n\tService    *AgentService\n\tCheck      *AgentCheck\n}\n\ntype CatalogDeregistration struct {\n\tNode       string\n\tAddress    string\n\tDatacenter string\n\tServiceID  string\n\tCheckID    string\n}\n\n// Catalog can be used to query the Catalog endpoints\ntype Catalog struct {\n\tc *Client\n}\n\n// Catalog returns a handle to the catalog endpoints\nfunc (c *Client) Catalog() *Catalog {\n\treturn &Catalog{c}\n}\n\nfunc (c *Catalog) Register(reg *CatalogRegistration, q *WriteOptions) (*WriteMeta, error) {\n\tr := c.c.newRequest(\"PUT\", \"/v1/catalog/register\")\n\tr.setWriteOptions(q)\n\tr.obj = reg\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp.Body.Close()\n\n\twm := &WriteMeta{}\n\twm.RequestTime = rtt\n\n\treturn wm, nil\n}\n\nfunc (c *Catalog) Deregister(dereg *CatalogDeregistration, q *WriteOptions) (*WriteMeta, error) {\n\tr := c.c.newRequest(\"PUT\", \"/v1/catalog/deregister\")\n\tr.setWriteOptions(q)\n\tr.obj = dereg\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp.Body.Close()\n\n\twm := &WriteMeta{}\n\twm.RequestTime = rtt\n\n\treturn wm, nil\n}\n\n// Datacenters is used to query for all the known datacenters\nfunc (c *Catalog) Datacenters() ([]string, error) {\n\tr := c.c.newRequest(\"GET\", \"/v1/catalog/datacenters\")\n\t_, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar out []string\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// Nodes is used to query all the known nodes\nfunc (c *Catalog) Nodes(q *QueryOptions) ([]*Node, *QueryMeta, error) {\n\tr := c.c.newRequest(\"GET\", \"/v1/catalog/nodes\")\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*Node\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// Services is used to query for all known services\nfunc (c *Catalog) Services(q *QueryOptions) (map[string][]string, *QueryMeta, error) {\n\tr := c.c.newRequest(\"GET\", \"/v1/catalog/services\")\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out map[string][]string\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// Service is used to query catalog entries for a given service\nfunc (c *Catalog) Service(service, tag string, q *QueryOptions) ([]*CatalogService, *QueryMeta, error) {\n\tr := c.c.newRequest(\"GET\", \"/v1/catalog/service/\"+service)\n\tr.setQueryOptions(q)\n\tif tag != \"\" {\n\t\tr.params.Set(\"tag\", tag)\n\t}\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*CatalogService\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// Node is used to query for service information about a single node\nfunc (c *Catalog) Node(node string, q *QueryOptions) (*CatalogNode, *QueryMeta, error) {\n\tr := c.c.newRequest(\"GET\", \"/v1/catalog/node/\"+node)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(c.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out *CatalogNode\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/event.go",
    "content": "package consulapi\n\nimport (\n\t\"bytes\"\n\t\"strconv\"\n)\n\n// Event can be used to query the Event endpoints\ntype Event struct {\n\tc *Client\n}\n\n// UserEvent represents an event that was fired by the user\ntype UserEvent struct {\n\tID            string\n\tName          string\n\tPayload       []byte\n\tNodeFilter    string\n\tServiceFilter string\n\tTagFilter     string\n\tVersion       int\n\tLTime         uint64\n}\n\n// Event returns a handle to the event endpoints\nfunc (c *Client) Event() *Event {\n\treturn &Event{c}\n}\n\n// Fire is used to fire a new user event. Only the Name, Payload and Filters\n// are respected. This returns the ID or an associated error. Cross DC requests\n// are supported.\nfunc (e *Event) Fire(params *UserEvent, q *WriteOptions) (string, *WriteMeta, error) {\n\tr := e.c.newRequest(\"PUT\", \"/v1/event/fire/\"+params.Name)\n\tr.setWriteOptions(q)\n\tif params.NodeFilter != \"\" {\n\t\tr.params.Set(\"node\", params.NodeFilter)\n\t}\n\tif params.ServiceFilter != \"\" {\n\t\tr.params.Set(\"service\", params.ServiceFilter)\n\t}\n\tif params.TagFilter != \"\" {\n\t\tr.params.Set(\"tag\", params.TagFilter)\n\t}\n\tif params.Payload != nil {\n\t\tr.body = bytes.NewReader(params.Payload)\n\t}\n\n\trtt, resp, err := requireOK(e.c.doRequest(r))\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\tvar out UserEvent\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn out.ID, wm, nil\n}\n\n// List is used to get the most recent events an agent has received.\n// This list can be optionally filtered by the name. This endpoint supports\n// quasi-blocking queries. The index is not monotonic, nor does it provide provide\n// LastContact or KnownLeader.\nfunc (e *Event) List(name string, q *QueryOptions) ([]*UserEvent, *QueryMeta, error) {\n\tr := e.c.newRequest(\"GET\", \"/v1/event/list\")\n\tr.setQueryOptions(q)\n\tif name != \"\" {\n\t\tr.params.Set(\"name\", name)\n\t}\n\trtt, resp, err := requireOK(e.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*UserEvent\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n\n// IDToIndex is a bit of a hack. This simulates the index generation to\n// convert an event ID into a WaitIndex.\nfunc (e *Event) IDToIndex(uuid string) uint64 {\n\tlower := uuid[0:8] + uuid[9:13] + uuid[14:18]\n\tupper := uuid[19:23] + uuid[24:36]\n\tlowVal, err := strconv.ParseUint(lower, 16, 64)\n\tif err != nil {\n\t\tpanic(\"Failed to convert \" + lower)\n\t}\n\thighVal, err := strconv.ParseUint(upper, 16, 64)\n\tif err != nil {\n\t\tpanic(\"Failed to convert \" + upper)\n\t}\n\treturn lowVal ^ highVal\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/health.go",
    "content": "package consulapi\n\nimport (\n\t\"fmt\"\n)\n\n// HealthCheck is used to represent a single check\ntype HealthCheck struct {\n\tNode        string\n\tCheckID     string\n\tName        string\n\tStatus      string\n\tNotes       string\n\tOutput      string\n\tServiceID   string\n\tServiceName string\n}\n\n// ServiceEntry is used for the health service endpoint\ntype ServiceEntry struct {\n\tNode    *Node\n\tService *AgentService\n\tChecks  []*HealthCheck\n}\n\n// Health can be used to query the Health endpoints\ntype Health struct {\n\tc *Client\n}\n\n// Health returns a handle to the health endpoints\nfunc (c *Client) Health() *Health {\n\treturn &Health{c}\n}\n\n// Node is used to query for checks belonging to a given node\nfunc (h *Health) Node(node string, q *QueryOptions) ([]*HealthCheck, *QueryMeta, error) {\n\tr := h.c.newRequest(\"GET\", \"/v1/health/node/\"+node)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(h.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*HealthCheck\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// Checks is used to return the checks associated with a service\nfunc (h *Health) Checks(service string, q *QueryOptions) ([]*HealthCheck, *QueryMeta, error) {\n\tr := h.c.newRequest(\"GET\", \"/v1/health/checks/\"+service)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(h.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*HealthCheck\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// Service is used to query health information along with service info\n// for a given service. It can optionally do server-side filtering on a tag\n// or nodes with passing health checks only.\nfunc (h *Health) Service(service, tag string, passingOnly bool, q *QueryOptions) ([]*ServiceEntry, *QueryMeta, error) {\n\tr := h.c.newRequest(\"GET\", \"/v1/health/service/\"+service)\n\tr.setQueryOptions(q)\n\tif tag != \"\" {\n\t\tr.params.Set(\"tag\", tag)\n\t}\n\tif passingOnly {\n\t\tr.params.Set(\"passing\", \"1\")\n\t}\n\trtt, resp, err := requireOK(h.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*ServiceEntry\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n\n// State is used to retreive all the checks in a given state.\n// The wildcard \"any\" state can also be used for all checks.\nfunc (h *Health) State(state string, q *QueryOptions) ([]*HealthCheck, *QueryMeta, error) {\n\tswitch state {\n\tcase \"any\":\n\tcase \"warning\":\n\tcase \"critical\":\n\tcase \"passing\":\n\tcase \"unknown\":\n\tdefault:\n\t\treturn nil, nil, fmt.Errorf(\"Unsupported state: %v\", state)\n\t}\n\tr := h.c.newRequest(\"GET\", \"/v1/health/state/\"+state)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(h.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar out []*HealthCheck\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn out, qm, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/kv.go",
    "content": "package consulapi\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// KVPair is used to represent a single K/V entry\ntype KVPair struct {\n\tKey         string\n\tCreateIndex uint64\n\tModifyIndex uint64\n\tLockIndex   uint64\n\tFlags       uint64\n\tValue       []byte\n\tSession     string\n}\n\n// KVPairs is a list of KVPair objects\ntype KVPairs []*KVPair\n\n// KV is used to manipulate the K/V API\ntype KV struct {\n\tc *Client\n}\n\n// KV is used to return a handle to the K/V apis\nfunc (c *Client) KV() *KV {\n\treturn &KV{c}\n}\n\n// Get is used to lookup a single key\nfunc (k *KV) Get(key string, q *QueryOptions) (*KVPair, *QueryMeta, error) {\n\tresp, qm, err := k.getInternal(key, nil, q)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif resp == nil {\n\t\treturn nil, qm, nil\n\t}\n\tdefer resp.Body.Close()\n\n\tvar entries []*KVPair\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif len(entries) > 0 {\n\t\treturn entries[0], qm, nil\n\t}\n\treturn nil, qm, nil\n}\n\n// List is used to lookup all keys under a prefix\nfunc (k *KV) List(prefix string, q *QueryOptions) (KVPairs, *QueryMeta, error) {\n\tresp, qm, err := k.getInternal(prefix, map[string]string{\"recurse\": \"\"}, q)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif resp == nil {\n\t\treturn nil, qm, nil\n\t}\n\tdefer resp.Body.Close()\n\n\tvar entries []*KVPair\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n\n// Keys is used to list all the keys under a prefix. Optionally,\n// a separator can be used to limit the responses.\nfunc (k *KV) Keys(prefix, separator string, q *QueryOptions) ([]string, *QueryMeta, error) {\n\tparams := map[string]string{\"keys\": \"\"}\n\tif separator != \"\" {\n\t\tparams[\"separator\"] = separator\n\t}\n\tresp, qm, err := k.getInternal(prefix, params, q)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif resp == nil {\n\t\treturn nil, qm, nil\n\t}\n\tdefer resp.Body.Close()\n\n\tvar entries []string\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n\nfunc (k *KV) getInternal(key string, params map[string]string, q *QueryOptions) (*http.Response, *QueryMeta, error) {\n\tr := k.c.newRequest(\"GET\", \"/v1/kv/\"+key)\n\tr.setQueryOptions(q)\n\tfor param, val := range params {\n\t\tr.params.Set(param, val)\n\t}\n\trtt, resp, err := k.c.doRequest(r)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tif resp.StatusCode == 404 {\n\t\tresp.Body.Close()\n\t\treturn nil, qm, nil\n\t} else if resp.StatusCode != 200 {\n\t\tresp.Body.Close()\n\t\treturn nil, nil, fmt.Errorf(\"Unexpected response code: %d\", resp.StatusCode)\n\t}\n\treturn resp, qm, nil\n}\n\n// Put is used to write a new value. Only the\n// Key, Flags and Value is respected.\nfunc (k *KV) Put(p *KVPair, q *WriteOptions) (*WriteMeta, error) {\n\tparams := make(map[string]string, 1)\n\tif p.Flags != 0 {\n\t\tparams[\"flags\"] = strconv.FormatUint(p.Flags, 10)\n\t}\n\t_, wm, err := k.put(p.Key, params, p.Value, q)\n\treturn wm, err\n}\n\n// CAS is used for a Check-And-Set operation. The Key,\n// ModifyIndex, Flags and Value are respected. Returns true\n// on success or false on failures.\nfunc (k *KV) CAS(p *KVPair, q *WriteOptions) (bool, *WriteMeta, error) {\n\tparams := make(map[string]string, 2)\n\tif p.Flags != 0 {\n\t\tparams[\"flags\"] = strconv.FormatUint(p.Flags, 10)\n\t}\n\tparams[\"cas\"] = strconv.FormatUint(p.ModifyIndex, 10)\n\treturn k.put(p.Key, params, p.Value, q)\n}\n\n// Acquire is used for a lock acquisiiton operation. The Key,\n// Flags, Value and Session are respected. Returns true\n// on success or false on failures.\nfunc (k *KV) Acquire(p *KVPair, q *WriteOptions) (bool, *WriteMeta, error) {\n\tparams := make(map[string]string, 2)\n\tif p.Flags != 0 {\n\t\tparams[\"flags\"] = strconv.FormatUint(p.Flags, 10)\n\t}\n\tparams[\"acquire\"] = p.Session\n\treturn k.put(p.Key, params, p.Value, q)\n}\n\n// Release is used for a lock release operation. The Key,\n// Flags, Value and Session are respected. Returns true\n// on success or false on failures.\nfunc (k *KV) Release(p *KVPair, q *WriteOptions) (bool, *WriteMeta, error) {\n\tparams := make(map[string]string, 2)\n\tif p.Flags != 0 {\n\t\tparams[\"flags\"] = strconv.FormatUint(p.Flags, 10)\n\t}\n\tparams[\"release\"] = p.Session\n\treturn k.put(p.Key, params, p.Value, q)\n}\n\nfunc (k *KV) put(key string, params map[string]string, body []byte, q *WriteOptions) (bool, *WriteMeta, error) {\n\tr := k.c.newRequest(\"PUT\", \"/v1/kv/\"+key)\n\tr.setWriteOptions(q)\n\tfor param, val := range params {\n\t\tr.params.Set(param, val)\n\t}\n\tr.body = bytes.NewReader(body)\n\trtt, resp, err := requireOK(k.c.doRequest(r))\n\tif err != nil {\n\t\treturn false, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &WriteMeta{}\n\tqm.RequestTime = rtt\n\n\tvar buf bytes.Buffer\n\tif _, err := io.Copy(&buf, resp.Body); err != nil {\n\t\treturn false, nil, fmt.Errorf(\"Failed to read response: %v\", err)\n\t}\n\tres := strings.Contains(string(buf.Bytes()), \"true\")\n\treturn res, qm, nil\n}\n\n// Delete is used to delete a single key\nfunc (k *KV) Delete(key string, w *WriteOptions) (*WriteMeta, error) {\n\treturn k.deleteInternal(key, nil, w)\n}\n\n// DeleteTree is used to delete all keys under a prefix\nfunc (k *KV) DeleteTree(prefix string, w *WriteOptions) (*WriteMeta, error) {\n\treturn k.deleteInternal(prefix, []string{\"recurse\"}, w)\n}\n\nfunc (k *KV) deleteInternal(key string, params []string, q *WriteOptions) (*WriteMeta, error) {\n\tr := k.c.newRequest(\"DELETE\", \"/v1/kv/\"+key)\n\tr.setWriteOptions(q)\n\tfor _, param := range params {\n\t\tr.params.Set(param, \"\")\n\t}\n\trtt, resp, err := requireOK(k.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp.Body.Close()\n\n\tqm := &WriteMeta{}\n\tqm.RequestTime = rtt\n\treturn qm, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/session.go",
    "content": "package consulapi\n\nimport (\n\t\"time\"\n)\n\n// SessionEntry represents a session in consul\ntype SessionEntry struct {\n\tCreateIndex uint64\n\tID          string\n\tName        string\n\tNode        string\n\tChecks      []string\n\tLockDelay   time.Duration\n\tBehavior    string\n\tTTL         string\n}\n\n// Session can be used to query the Session endpoints\ntype Session struct {\n\tc *Client\n}\n\n// Session returns a handle to the session endpoints\nfunc (c *Client) Session() *Session {\n\treturn &Session{c}\n}\n\n// CreateNoChecks is like Create but is used specifically to create\n// a session with no associated health checks.\nfunc (s *Session) CreateNoChecks(se *SessionEntry, q *WriteOptions) (string, *WriteMeta, error) {\n\tbody := make(map[string]interface{})\n\tbody[\"Checks\"] = []string{}\n\tif se != nil {\n\t\tif se.Name != \"\" {\n\t\t\tbody[\"Name\"] = se.Name\n\t\t}\n\t\tif se.Node != \"\" {\n\t\t\tbody[\"Node\"] = se.Node\n\t\t}\n\t\tif se.LockDelay != 0 {\n\t\t\tbody[\"LockDelay\"] = durToMsec(se.LockDelay)\n\t\t}\n\t\tif se.Behavior != \"\" {\n\t\t\tbody[\"Behavior\"] = se.Behavior\n\t\t}\n\t\tif se.TTL != \"\" {\n\t\t\tbody[\"TTL\"] = se.TTL\n\t\t}\n\t}\n\treturn s.create(body, q)\n\n}\n\n// Create makes a new session. Providing a session entry can\n// customize the session. It can also be nil to use defaults.\nfunc (s *Session) Create(se *SessionEntry, q *WriteOptions) (string, *WriteMeta, error) {\n\tvar obj interface{}\n\tif se != nil {\n\t\tbody := make(map[string]interface{})\n\t\tobj = body\n\t\tif se.Name != \"\" {\n\t\t\tbody[\"Name\"] = se.Name\n\t\t}\n\t\tif se.Node != \"\" {\n\t\t\tbody[\"Node\"] = se.Node\n\t\t}\n\t\tif se.LockDelay != 0 {\n\t\t\tbody[\"LockDelay\"] = durToMsec(se.LockDelay)\n\t\t}\n\t\tif len(se.Checks) > 0 {\n\t\t\tbody[\"Checks\"] = se.Checks\n\t\t}\n\t\tif se.Behavior != \"\" {\n\t\t\tbody[\"Behavior\"] = se.Behavior\n\t\t}\n\t\tif se.TTL != \"\" {\n\t\t\tbody[\"TTL\"] = se.TTL\n\t\t}\n\t}\n\treturn s.create(obj, q)\n}\n\nfunc (s *Session) create(obj interface{}, q *WriteOptions) (string, *WriteMeta, error) {\n\tr := s.c.newRequest(\"PUT\", \"/v1/session/create\")\n\tr.setWriteOptions(q)\n\tr.obj = obj\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\tvar out struct{ ID string }\n\tif err := decodeBody(resp, &out); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn out.ID, wm, nil\n}\n\n// Destroy invalides a given session\nfunc (s *Session) Destroy(id string, q *WriteOptions) (*WriteMeta, error) {\n\tr := s.c.newRequest(\"PUT\", \"/v1/session/destroy/\"+id)\n\tr.setWriteOptions(q)\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\treturn wm, nil\n}\n\n// Renew renews the TTL on a given session\nfunc (s *Session) Renew(id string, q *WriteOptions) (*SessionEntry, *WriteMeta, error) {\n\tr := s.c.newRequest(\"PUT\", \"/v1/session/renew/\"+id)\n\tr.setWriteOptions(q)\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\twm := &WriteMeta{RequestTime: rtt}\n\n\tvar entries []*SessionEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, wm, err\n\t}\n\n\tif len(entries) > 0 {\n\t\treturn entries[0], wm, nil\n\t}\n\treturn nil, wm, nil\n}\n\n// Info looks up a single session\nfunc (s *Session) Info(id string, q *QueryOptions) (*SessionEntry, *QueryMeta, error) {\n\tr := s.c.newRequest(\"GET\", \"/v1/session/info/\"+id)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*SessionEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif len(entries) > 0 {\n\t\treturn entries[0], qm, nil\n\t}\n\treturn nil, qm, nil\n}\n\n// List gets sessions for a node\nfunc (s *Session) Node(node string, q *QueryOptions) ([]*SessionEntry, *QueryMeta, error) {\n\tr := s.c.newRequest(\"GET\", \"/v1/session/node/\"+node)\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*SessionEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n\n// List gets all active sessions\nfunc (s *Session) List(q *QueryOptions) ([]*SessionEntry, *QueryMeta, error) {\n\tr := s.c.newRequest(\"GET\", \"/v1/session/list\")\n\tr.setQueryOptions(q)\n\trtt, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tqm := &QueryMeta{}\n\tparseQueryMeta(resp, qm)\n\tqm.RequestTime = rtt\n\n\tvar entries []*SessionEntry\n\tif err := decodeBody(resp, &entries); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn entries, qm, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/armon/consul-api/status.go",
    "content": "package consulapi\n\n// Status can be used to query the Status endpoints\ntype Status struct {\n\tc *Client\n}\n\n// Status returns a handle to the status endpoints\nfunc (c *Client) Status() *Status {\n\treturn &Status{c}\n}\n\n// Leader is used to query for a known leader\nfunc (s *Status) Leader() (string, error) {\n\tr := s.c.newRequest(\"GET\", \"/v1/status/leader\")\n\t_, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar leader string\n\tif err := decodeBody(resp, &leader); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn leader, nil\n}\n\n// Peers is used to query for a known raft peers\nfunc (s *Status) Peers() ([]string, error) {\n\tr := s.c.newRequest(\"GET\", \"/v1/status/peers\")\n\t_, resp, err := requireOK(s.c.doRequest(r))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar peers []string\n\tif err := decodeBody(resp, &peers); err != nil {\n\t\treturn nil, err\n\t}\n\treturn peers, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/add_child.go",
    "content": "package etcd\n\n// Add a new directory with a random etcd-generated key under the given path.\nfunc (c *Client) AddChildDir(key string, ttl uint64) (*Response, error) {\n\traw, err := c.post(key, \"\", ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// Add a new file with a random etcd-generated key under the given path.\nfunc (c *Client) AddChild(key string, value string, ttl uint64) (*Response, error) {\n\traw, err := c.post(key, value, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/client.go",
    "content": "package etcd\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math/rand\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n)\n\n// See SetConsistency for how to use these constants.\nconst (\n\t// Using strings rather than iota because the consistency level\n\t// could be persisted to disk, so it'd be better to use\n\t// human-readable values.\n\tSTRONG_CONSISTENCY = \"STRONG\"\n\tWEAK_CONSISTENCY   = \"WEAK\"\n)\n\nconst (\n\tdefaultBufferSize = 10\n)\n\nfunc init() {\n\trand.Seed(int64(time.Now().Nanosecond()))\n}\n\ntype Config struct {\n\tCertFile    string        `json:\"certFile\"`\n\tKeyFile     string        `json:\"keyFile\"`\n\tCaCertFile  []string      `json:\"caCertFiles\"`\n\tDialTimeout time.Duration `json:\"timeout\"`\n\tConsistency string        `json:\"consistency\"`\n}\n\ntype credentials struct {\n\tusername string\n\tpassword string\n}\n\ntype Client struct {\n\tconfig      Config   `json:\"config\"`\n\tcluster     *Cluster `json:\"cluster\"`\n\thttpClient  *http.Client\n\tcredentials *credentials\n\ttransport   *http.Transport\n\tpersistence io.Writer\n\tcURLch      chan string\n\t// CheckRetry can be used to control the policy for failed requests\n\t// and modify the cluster if needed.\n\t// The client calls it before sending requests again, and\n\t// stops retrying if CheckRetry returns some error. The cases that\n\t// this function needs to handle include no response and unexpected\n\t// http status code of response.\n\t// If CheckRetry is nil, client will call the default one\n\t// `DefaultCheckRetry`.\n\t// Argument cluster is the etcd.Cluster object that these requests have been made on.\n\t// Argument numReqs is the number of http.Requests that have been made so far.\n\t// Argument lastResp is the http.Responses from the last request.\n\t// Argument err is the reason of the failure.\n\tCheckRetry func(cluster *Cluster, numReqs int,\n\t\tlastResp http.Response, err error) error\n}\n\n// NewClient create a basic client that is configured to be used\n// with the given machine list.\nfunc NewClient(machines []string) *Client {\n\tconfig := Config{\n\t\t// default timeout is one second\n\t\tDialTimeout: time.Second,\n\t\tConsistency: WEAK_CONSISTENCY,\n\t}\n\n\tclient := &Client{\n\t\tcluster: NewCluster(machines),\n\t\tconfig:  config,\n\t}\n\n\tclient.initHTTPClient()\n\tclient.saveConfig()\n\n\treturn client\n}\n\n// NewTLSClient create a basic client with TLS configuration\nfunc NewTLSClient(machines []string, cert, key, caCert string) (*Client, error) {\n\t// overwrite the default machine to use https\n\tif len(machines) == 0 {\n\t\tmachines = []string{\"https://127.0.0.1:4001\"}\n\t}\n\n\tconfig := Config{\n\t\t// default timeout is one second\n\t\tDialTimeout: time.Second,\n\t\tConsistency: WEAK_CONSISTENCY,\n\t\tCertFile:    cert,\n\t\tKeyFile:     key,\n\t\tCaCertFile:  make([]string, 0),\n\t}\n\n\tclient := &Client{\n\t\tcluster: NewCluster(machines),\n\t\tconfig:  config,\n\t}\n\n\terr := client.initHTTPSClient(cert, key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = client.AddRootCA(caCert)\n\n\tclient.saveConfig()\n\n\treturn client, nil\n}\n\n// NewClientFromFile creates a client from a given file path.\n// The given file is expected to use the JSON format.\nfunc NewClientFromFile(fpath string) (*Client, error) {\n\tfi, err := os.Open(fpath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdefer func() {\n\t\tif err := fi.Close(); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\treturn NewClientFromReader(fi)\n}\n\n// NewClientFromReader creates a Client configured from a given reader.\n// The configuration is expected to use the JSON format.\nfunc NewClientFromReader(reader io.Reader) (*Client, error) {\n\tc := new(Client)\n\n\tb, err := ioutil.ReadAll(reader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = json.Unmarshal(b, c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif c.config.CertFile == \"\" {\n\t\tc.initHTTPClient()\n\t} else {\n\t\terr = c.initHTTPSClient(c.config.CertFile, c.config.KeyFile)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, caCert := range c.config.CaCertFile {\n\t\tif err := c.AddRootCA(caCert); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\n// Override the Client's HTTP Transport object\nfunc (c *Client) SetTransport(tr *http.Transport) {\n\tc.httpClient.Transport = tr\n\tc.transport = tr\n}\n\nfunc (c *Client) SetCredentials(username, password string) {\n\tc.credentials = &credentials{username, password}\n}\n\nfunc (c *Client) Close() {\n\tc.transport.DisableKeepAlives = true\n\tc.transport.CloseIdleConnections()\n}\n\n// initHTTPClient initializes a HTTP client for etcd client\nfunc (c *Client) initHTTPClient() {\n\tc.transport = &http.Transport{\n\t\tDial: c.DefaultDial,\n\t\tTLSClientConfig: &tls.Config{\n\t\t\tInsecureSkipVerify: true,\n\t\t},\n\t}\n\tc.httpClient = &http.Client{Transport: c.transport}\n}\n\n// initHTTPClient initializes a HTTPS client for etcd client\nfunc (c *Client) initHTTPSClient(cert, key string) error {\n\tif cert == \"\" || key == \"\" {\n\t\treturn errors.New(\"Require both cert and key path\")\n\t}\n\n\ttlsCert, err := tls.LoadX509KeyPair(cert, key)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttlsConfig := &tls.Config{\n\t\tCertificates:       []tls.Certificate{tlsCert},\n\t\tInsecureSkipVerify: true,\n\t}\n\n\tc.transport = &http.Transport{\n\t\tTLSClientConfig: tlsConfig,\n\t\tDial:            c.DefaultDial,\n\t}\n\n\tc.httpClient = &http.Client{Transport: c.transport}\n\treturn nil\n}\n\n// SetPersistence sets a writer to which the config will be\n// written every time it's changed.\nfunc (c *Client) SetPersistence(writer io.Writer) {\n\tc.persistence = writer\n}\n\n// SetConsistency changes the consistency level of the client.\n//\n// When consistency is set to STRONG_CONSISTENCY, all requests,\n// including GET, are sent to the leader.  This means that, assuming\n// the absence of leader failures, GET requests are guaranteed to see\n// the changes made by previous requests.\n//\n// When consistency is set to WEAK_CONSISTENCY, other requests\n// are still sent to the leader, but GET requests are sent to a\n// random server from the server pool.  This reduces the read\n// load on the leader, but it's not guaranteed that the GET requests\n// will see changes made by previous requests (they might have not\n// yet been committed on non-leader servers).\nfunc (c *Client) SetConsistency(consistency string) error {\n\tif !(consistency == STRONG_CONSISTENCY || consistency == WEAK_CONSISTENCY) {\n\t\treturn errors.New(\"The argument must be either STRONG_CONSISTENCY or WEAK_CONSISTENCY.\")\n\t}\n\tc.config.Consistency = consistency\n\treturn nil\n}\n\n// Sets the DialTimeout value\nfunc (c *Client) SetDialTimeout(d time.Duration) {\n\tc.config.DialTimeout = d\n}\n\n// AddRootCA adds a root CA cert for the etcd client\nfunc (c *Client) AddRootCA(caCert string) error {\n\tif c.httpClient == nil {\n\t\treturn errors.New(\"Client has not been initialized yet!\")\n\t}\n\n\tcertBytes, err := ioutil.ReadFile(caCert)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttr, ok := c.httpClient.Transport.(*http.Transport)\n\n\tif !ok {\n\t\tpanic(\"AddRootCA(): Transport type assert should not fail\")\n\t}\n\n\tif tr.TLSClientConfig.RootCAs == nil {\n\t\tcaCertPool := x509.NewCertPool()\n\t\tok = caCertPool.AppendCertsFromPEM(certBytes)\n\t\tif ok {\n\t\t\ttr.TLSClientConfig.RootCAs = caCertPool\n\t\t}\n\t\ttr.TLSClientConfig.InsecureSkipVerify = false\n\t} else {\n\t\tok = tr.TLSClientConfig.RootCAs.AppendCertsFromPEM(certBytes)\n\t}\n\n\tif !ok {\n\t\terr = errors.New(\"Unable to load caCert\")\n\t}\n\n\tc.config.CaCertFile = append(c.config.CaCertFile, caCert)\n\tc.saveConfig()\n\n\treturn err\n}\n\n// SetCluster updates cluster information using the given machine list.\nfunc (c *Client) SetCluster(machines []string) bool {\n\tsuccess := c.internalSyncCluster(machines)\n\treturn success\n}\n\nfunc (c *Client) GetCluster() []string {\n\treturn c.cluster.Machines\n}\n\n// SyncCluster updates the cluster information using the internal machine list.\n// If no members are found, the intenral machine list is left untouched.\nfunc (c *Client) SyncCluster() bool {\n\treturn c.internalSyncCluster(c.cluster.Machines)\n}\n\n// internalSyncCluster syncs cluster information using the given machine list.\nfunc (c *Client) internalSyncCluster(machines []string) bool {\n\t// comma-separated list of machines in the cluster.\n\tmembers := \"\"\n\n\tfor _, machine := range machines {\n\t\thttpPath := c.createHttpPath(machine, path.Join(version, \"members\"))\n\t\tresp, err := c.httpClient.Get(httpPath)\n\t\tif err != nil {\n\t\t\t// try another machine in the cluster\n\t\t\tcontinue\n\t\t}\n\n\t\tif resp.StatusCode != http.StatusOK { // fall-back to old endpoint\n\t\t\thttpPath := c.createHttpPath(machine, path.Join(version, \"machines\"))\n\t\t\tresp, err := c.httpClient.Get(httpPath)\n\t\t\tif err != nil {\n\t\t\t\t// try another machine in the cluster\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb, err := ioutil.ReadAll(resp.Body)\n\t\t\tresp.Body.Close()\n\t\t\tif err != nil {\n\t\t\t\t// try another machine in the cluster\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmembers = string(b)\n\t\t} else {\n\t\t\tb, err := ioutil.ReadAll(resp.Body)\n\t\t\tresp.Body.Close()\n\t\t\tif err != nil {\n\t\t\t\t// try another machine in the cluster\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar mCollection memberCollection\n\t\t\tif err := json.Unmarshal(b, &mCollection); err != nil {\n\t\t\t\t// try another machine\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\turls := make([]string, 0)\n\t\t\tfor _, m := range mCollection {\n\t\t\t\turls = append(urls, m.ClientURLs...)\n\t\t\t}\n\n\t\t\tmembers = strings.Join(urls, \",\")\n\t\t}\n\n\t\t// We should never do an empty cluster update.\n\t\tif members == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// update Machines List\n\t\tc.cluster.updateFromStr(members)\n\t\tlogger.Debug(\"sync.machines \", c.cluster.Machines)\n\t\tc.saveConfig()\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// createHttpPath creates a complete HTTP URL.\n// serverName should contain both the host name and a port number, if any.\nfunc (c *Client) createHttpPath(serverName string, _path string) string {\n\tu, err := url.Parse(serverName)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tu.Path = path.Join(u.Path, _path)\n\n\tif u.Scheme == \"\" {\n\t\tu.Scheme = \"http\"\n\t}\n\treturn u.String()\n}\n\n// DefaultDial attempts to open a TCP connection to the provided address, explicitly\n// enabling keep-alives with a one-second interval.\nfunc (c *Client) DefaultDial(network, addr string) (net.Conn, error) {\n\tdialer := net.Dialer{\n\t\tTimeout:   c.config.DialTimeout,\n\t\tKeepAlive: time.Second,\n\t}\n\n\treturn dialer.Dial(network, addr)\n}\n\nfunc (c *Client) OpenCURL() {\n\tc.cURLch = make(chan string, defaultBufferSize)\n}\n\nfunc (c *Client) CloseCURL() {\n\tc.cURLch = nil\n}\n\nfunc (c *Client) sendCURL(command string) {\n\tgo func() {\n\t\tselect {\n\t\tcase c.cURLch <- command:\n\t\tdefault:\n\t\t}\n\t}()\n}\n\nfunc (c *Client) RecvCURL() string {\n\treturn <-c.cURLch\n}\n\n// saveConfig saves the current config using c.persistence.\nfunc (c *Client) saveConfig() error {\n\tif c.persistence != nil {\n\t\tb, err := json.Marshal(c)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t_, err = c.persistence.Write(b)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// MarshalJSON implements the Marshaller interface\n// as defined by the standard JSON package.\nfunc (c *Client) MarshalJSON() ([]byte, error) {\n\tb, err := json.Marshal(struct {\n\t\tConfig  Config   `json:\"config\"`\n\t\tCluster *Cluster `json:\"cluster\"`\n\t}{\n\t\tConfig:  c.config,\n\t\tCluster: c.cluster,\n\t})\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn b, nil\n}\n\n// UnmarshalJSON implements the Unmarshaller interface\n// as defined by the standard JSON package.\nfunc (c *Client) UnmarshalJSON(b []byte) error {\n\ttemp := struct {\n\t\tConfig  Config   `json:\"config\"`\n\t\tCluster *Cluster `json:\"cluster\"`\n\t}{}\n\terr := json.Unmarshal(b, &temp)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc.cluster = temp.Cluster\n\tc.config = temp.Config\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/cluster.go",
    "content": "package etcd\n\nimport (\n\t\"math/rand\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype Cluster struct {\n\tLeader   string   `json:\"leader\"`\n\tMachines []string `json:\"machines\"`\n\tpicked   int\n\tmu       sync.RWMutex\n}\n\nfunc NewCluster(machines []string) *Cluster {\n\t// if an empty slice was sent in then just assume HTTP 4001 on localhost\n\tif len(machines) == 0 {\n\t\tmachines = []string{\"http://127.0.0.1:4001\"}\n\t}\n\n\tmachines = shuffleStringSlice(machines)\n\tlogger.Debug(\"Shuffle cluster machines\", machines)\n\t// default leader and machines\n\treturn &Cluster{\n\t\tLeader:   \"\",\n\t\tMachines: machines,\n\t\tpicked:   rand.Intn(len(machines)),\n\t}\n}\n\nfunc (cl *Cluster) failure() {\n\tcl.mu.Lock()\n\tdefer cl.mu.Unlock()\n\tcl.picked = (cl.picked + 1) % len(cl.Machines)\n}\n\nfunc (cl *Cluster) pick() string {\n\tcl.mu.Lock()\n\tdefer cl.mu.Unlock()\n\treturn cl.Machines[cl.picked]\n}\n\nfunc (cl *Cluster) updateFromStr(machines string) {\n\tcl.mu.Lock()\n\tdefer cl.mu.Unlock()\n\n\tcl.Machines = strings.Split(machines, \",\")\n\tfor i := range cl.Machines {\n\t\tcl.Machines[i] = strings.TrimSpace(cl.Machines[i])\n\t}\n\tcl.Machines = shuffleStringSlice(cl.Machines)\n\tcl.picked = rand.Intn(len(cl.Machines))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/compare_and_delete.go",
    "content": "package etcd\n\nimport \"fmt\"\n\nfunc (c *Client) CompareAndDelete(key string, prevValue string, prevIndex uint64) (*Response, error) {\n\traw, err := c.RawCompareAndDelete(key, prevValue, prevIndex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\nfunc (c *Client) RawCompareAndDelete(key string, prevValue string, prevIndex uint64) (*RawResponse, error) {\n\tif prevValue == \"\" && prevIndex == 0 {\n\t\treturn nil, fmt.Errorf(\"You must give either prevValue or prevIndex.\")\n\t}\n\n\toptions := Options{}\n\tif prevValue != \"\" {\n\t\toptions[\"prevValue\"] = prevValue\n\t}\n\tif prevIndex != 0 {\n\t\toptions[\"prevIndex\"] = prevIndex\n\t}\n\n\traw, err := c.delete(key, options)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/compare_and_swap.go",
    "content": "package etcd\n\nimport \"fmt\"\n\nfunc (c *Client) CompareAndSwap(key string, value string, ttl uint64,\n\tprevValue string, prevIndex uint64) (*Response, error) {\n\traw, err := c.RawCompareAndSwap(key, value, ttl, prevValue, prevIndex)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\nfunc (c *Client) RawCompareAndSwap(key string, value string, ttl uint64,\n\tprevValue string, prevIndex uint64) (*RawResponse, error) {\n\tif prevValue == \"\" && prevIndex == 0 {\n\t\treturn nil, fmt.Errorf(\"You must give either prevValue or prevIndex.\")\n\t}\n\n\toptions := Options{}\n\tif prevValue != \"\" {\n\t\toptions[\"prevValue\"] = prevValue\n\t}\n\tif prevIndex != 0 {\n\t\toptions[\"prevIndex\"] = prevIndex\n\t}\n\n\traw, err := c.put(key, value, ttl, options)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/debug.go",
    "content": "package etcd\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"strings\"\n)\n\nvar logger *etcdLogger\n\nfunc SetLogger(l *log.Logger) {\n\tlogger = &etcdLogger{l}\n}\n\nfunc GetLogger() *log.Logger {\n\treturn logger.log\n}\n\ntype etcdLogger struct {\n\tlog *log.Logger\n}\n\nfunc (p *etcdLogger) Debug(args ...interface{}) {\n\tmsg := \"DEBUG: \" + fmt.Sprint(args...)\n\tp.log.Println(msg)\n}\n\nfunc (p *etcdLogger) Debugf(f string, args ...interface{}) {\n\tmsg := \"DEBUG: \" + fmt.Sprintf(f, args...)\n\t// Append newline if necessary\n\tif !strings.HasSuffix(msg, \"\\n\") {\n\t\tmsg = msg + \"\\n\"\n\t}\n\tp.log.Print(msg)\n}\n\nfunc (p *etcdLogger) Warning(args ...interface{}) {\n\tmsg := \"WARNING: \" + fmt.Sprint(args...)\n\tp.log.Println(msg)\n}\n\nfunc (p *etcdLogger) Warningf(f string, args ...interface{}) {\n\tmsg := \"WARNING: \" + fmt.Sprintf(f, args...)\n\t// Append newline if necessary\n\tif !strings.HasSuffix(msg, \"\\n\") {\n\t\tmsg = msg + \"\\n\"\n\t}\n\tp.log.Print(msg)\n}\n\nfunc init() {\n\t// Default logger uses the go default log.\n\tSetLogger(log.New(ioutil.Discard, \"go-etcd\", log.LstdFlags))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/delete.go",
    "content": "package etcd\n\n// Delete deletes the given key.\n//\n// When recursive set to false, if the key points to a\n// directory the method will fail.\n//\n// When recursive set to true, if the key points to a file,\n// the file will be deleted; if the key points to a directory,\n// then everything under the directory (including all child directories)\n// will be deleted.\nfunc (c *Client) Delete(key string, recursive bool) (*Response, error) {\n\traw, err := c.RawDelete(key, recursive, false)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// DeleteDir deletes an empty directory or a key value pair\nfunc (c *Client) DeleteDir(key string) (*Response, error) {\n\traw, err := c.RawDelete(key, false, true)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\nfunc (c *Client) RawDelete(key string, recursive bool, dir bool) (*RawResponse, error) {\n\tops := Options{\n\t\t\"recursive\": recursive,\n\t\t\"dir\":       dir,\n\t}\n\n\treturn c.delete(key, ops)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/error.go",
    "content": "package etcd\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\nconst (\n\tErrCodeEtcdNotReachable    = 501\n\tErrCodeUnhandledHTTPStatus = 502\n)\n\nvar (\n\terrorMap = map[int]string{\n\t\tErrCodeEtcdNotReachable: \"All the given peers are not reachable\",\n\t}\n)\n\ntype EtcdError struct {\n\tErrorCode int    `json:\"errorCode\"`\n\tMessage   string `json:\"message\"`\n\tCause     string `json:\"cause,omitempty\"`\n\tIndex     uint64 `json:\"index\"`\n}\n\nfunc (e EtcdError) Error() string {\n\treturn fmt.Sprintf(\"%v: %v (%v) [%v]\", e.ErrorCode, e.Message, e.Cause, e.Index)\n}\n\nfunc newError(errorCode int, cause string, index uint64) *EtcdError {\n\treturn &EtcdError{\n\t\tErrorCode: errorCode,\n\t\tMessage:   errorMap[errorCode],\n\t\tCause:     cause,\n\t\tIndex:     index,\n\t}\n}\n\nfunc handleError(b []byte) error {\n\tetcdErr := new(EtcdError)\n\n\terr := json.Unmarshal(b, etcdErr)\n\tif err != nil {\n\t\tlogger.Warningf(\"cannot unmarshal etcd error: %v\", err)\n\t\treturn err\n\t}\n\n\treturn etcdErr\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/get.go",
    "content": "package etcd\n\n// Get gets the file or directory associated with the given key.\n// If the key points to a directory, files and directories under\n// it will be returned in sorted or unsorted order, depending on\n// the sort flag.\n// If recursive is set to false, contents under child directories\n// will not be returned.\n// If recursive is set to true, all the contents will be returned.\nfunc (c *Client) Get(key string, sort, recursive bool) (*Response, error) {\n\traw, err := c.RawGet(key, sort, recursive)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\nfunc (c *Client) RawGet(key string, sort, recursive bool) (*RawResponse, error) {\n\tvar q bool\n\tif c.config.Consistency == STRONG_CONSISTENCY {\n\t\tq = true\n\t}\n\tops := Options{\n\t\t\"recursive\": recursive,\n\t\t\"sorted\":    sort,\n\t\t\"quorum\":    q,\n\t}\n\n\treturn c.get(key, ops)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/member.go",
    "content": "package etcd\n\nimport \"encoding/json\"\n\ntype Member struct {\n\tID         string   `json:\"id\"`\n\tName       string   `json:\"name\"`\n\tPeerURLs   []string `json:\"peerURLs\"`\n\tClientURLs []string `json:\"clientURLs\"`\n}\n\ntype memberCollection []Member\n\nfunc (c *memberCollection) UnmarshalJSON(data []byte) error {\n\td := struct {\n\t\tMembers []Member\n\t}{}\n\n\tif err := json.Unmarshal(data, &d); err != nil {\n\t\treturn err\n\t}\n\n\tif d.Members == nil {\n\t\t*c = make([]Member, 0)\n\t\treturn nil\n\t}\n\n\t*c = d.Members\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/options.go",
    "content": "package etcd\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"reflect\"\n)\n\ntype Options map[string]interface{}\n\n// An internally-used data structure that represents a mapping\n// between valid options and their kinds\ntype validOptions map[string]reflect.Kind\n\n// Valid options for GET, PUT, POST, DELETE\n// Using CAPITALIZED_UNDERSCORE to emphasize that these\n// values are meant to be used as constants.\nvar (\n\tVALID_GET_OPTIONS = validOptions{\n\t\t\"recursive\": reflect.Bool,\n\t\t\"quorum\":    reflect.Bool,\n\t\t\"sorted\":    reflect.Bool,\n\t\t\"wait\":      reflect.Bool,\n\t\t\"waitIndex\": reflect.Uint64,\n\t}\n\n\tVALID_PUT_OPTIONS = validOptions{\n\t\t\"prevValue\": reflect.String,\n\t\t\"prevIndex\": reflect.Uint64,\n\t\t\"prevExist\": reflect.Bool,\n\t\t\"dir\":       reflect.Bool,\n\t}\n\n\tVALID_POST_OPTIONS = validOptions{}\n\n\tVALID_DELETE_OPTIONS = validOptions{\n\t\t\"recursive\": reflect.Bool,\n\t\t\"dir\":       reflect.Bool,\n\t\t\"prevValue\": reflect.String,\n\t\t\"prevIndex\": reflect.Uint64,\n\t}\n)\n\n// Convert options to a string of HTML parameters\nfunc (ops Options) toParameters(validOps validOptions) (string, error) {\n\tp := \"?\"\n\tvalues := url.Values{}\n\n\tif ops == nil {\n\t\treturn \"\", nil\n\t}\n\n\tfor k, v := range ops {\n\t\t// Check if the given option is valid (that it exists)\n\t\tkind := validOps[k]\n\t\tif kind == reflect.Invalid {\n\t\t\treturn \"\", fmt.Errorf(\"Invalid option: %v\", k)\n\t\t}\n\n\t\t// Check if the given option is of the valid type\n\t\tt := reflect.TypeOf(v)\n\t\tif kind != t.Kind() {\n\t\t\treturn \"\", fmt.Errorf(\"Option %s should be of %v kind, not of %v kind.\",\n\t\t\t\tk, kind, t.Kind())\n\t\t}\n\n\t\tvalues.Set(k, fmt.Sprintf(\"%v\", v))\n\t}\n\n\tp += values.Encode()\n\treturn p, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/requests.go",
    "content": "package etcd\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\"path\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Errors introduced by handling requests\nvar (\n\tErrRequestCancelled = errors.New(\"sending request is cancelled\")\n)\n\ntype RawRequest struct {\n\tMethod       string\n\tRelativePath string\n\tValues       url.Values\n\tCancel       <-chan bool\n}\n\n// NewRawRequest returns a new RawRequest\nfunc NewRawRequest(method, relativePath string, values url.Values, cancel <-chan bool) *RawRequest {\n\treturn &RawRequest{\n\t\tMethod:       method,\n\t\tRelativePath: relativePath,\n\t\tValues:       values,\n\t\tCancel:       cancel,\n\t}\n}\n\n// getCancelable issues a cancelable GET request\nfunc (c *Client) getCancelable(key string, options Options,\n\tcancel <-chan bool) (*RawResponse, error) {\n\tlogger.Debugf(\"get %s [%s]\", key, c.cluster.pick())\n\tp := keyToPath(key)\n\n\tstr, err := options.toParameters(VALID_GET_OPTIONS)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp += str\n\n\treq := NewRawRequest(\"GET\", p, nil, cancel)\n\tresp, err := c.SendRequest(req)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp, nil\n}\n\n// get issues a GET request\nfunc (c *Client) get(key string, options Options) (*RawResponse, error) {\n\treturn c.getCancelable(key, options, nil)\n}\n\n// put issues a PUT request\nfunc (c *Client) put(key string, value string, ttl uint64,\n\toptions Options) (*RawResponse, error) {\n\n\tlogger.Debugf(\"put %s, %s, ttl: %d, [%s]\", key, value, ttl, c.cluster.pick())\n\tp := keyToPath(key)\n\n\tstr, err := options.toParameters(VALID_PUT_OPTIONS)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp += str\n\n\treq := NewRawRequest(\"PUT\", p, buildValues(value, ttl), nil)\n\tresp, err := c.SendRequest(req)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp, nil\n}\n\n// post issues a POST request\nfunc (c *Client) post(key string, value string, ttl uint64) (*RawResponse, error) {\n\tlogger.Debugf(\"post %s, %s, ttl: %d, [%s]\", key, value, ttl, c.cluster.pick())\n\tp := keyToPath(key)\n\n\treq := NewRawRequest(\"POST\", p, buildValues(value, ttl), nil)\n\tresp, err := c.SendRequest(req)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp, nil\n}\n\n// delete issues a DELETE request\nfunc (c *Client) delete(key string, options Options) (*RawResponse, error) {\n\tlogger.Debugf(\"delete %s [%s]\", key, c.cluster.pick())\n\tp := keyToPath(key)\n\n\tstr, err := options.toParameters(VALID_DELETE_OPTIONS)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp += str\n\n\treq := NewRawRequest(\"DELETE\", p, nil, nil)\n\tresp, err := c.SendRequest(req)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp, nil\n}\n\n// SendRequest sends a HTTP request and returns a Response as defined by etcd\nfunc (c *Client) SendRequest(rr *RawRequest) (*RawResponse, error) {\n\tvar req *http.Request\n\tvar resp *http.Response\n\tvar httpPath string\n\tvar err error\n\tvar respBody []byte\n\n\tvar numReqs = 1\n\n\tcheckRetry := c.CheckRetry\n\tif checkRetry == nil {\n\t\tcheckRetry = DefaultCheckRetry\n\t}\n\n\tcancelled := make(chan bool, 1)\n\treqLock := new(sync.Mutex)\n\n\tif rr.Cancel != nil {\n\t\tcancelRoutine := make(chan bool)\n\t\tdefer close(cancelRoutine)\n\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-rr.Cancel:\n\t\t\t\tcancelled <- true\n\t\t\t\tlogger.Debug(\"send.request is cancelled\")\n\t\t\tcase <-cancelRoutine:\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Repeat canceling request until this thread is stopped\n\t\t\t// because we have no idea about whether it succeeds.\n\t\t\tfor {\n\t\t\t\treqLock.Lock()\n\t\t\t\tc.httpClient.Transport.(*http.Transport).CancelRequest(req)\n\t\t\t\treqLock.Unlock()\n\n\t\t\t\tselect {\n\t\t\t\tcase <-time.After(100 * time.Millisecond):\n\t\t\t\tcase <-cancelRoutine:\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\n\t// If we connect to a follower and consistency is required, retry until\n\t// we connect to a leader\n\tsleep := 25 * time.Millisecond\n\tmaxSleep := time.Second\n\n\tfor attempt := 0; ; attempt++ {\n\t\tif attempt > 0 {\n\t\t\tselect {\n\t\t\tcase <-cancelled:\n\t\t\t\treturn nil, ErrRequestCancelled\n\t\t\tcase <-time.After(sleep):\n\t\t\t\tsleep = sleep * 2\n\t\t\t\tif sleep > maxSleep {\n\t\t\t\t\tsleep = maxSleep\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlogger.Debug(\"Connecting to etcd: attempt \", attempt+1, \" for \", rr.RelativePath)\n\n\t\t// get httpPath if not set\n\t\tif httpPath == \"\" {\n\t\t\thttpPath = c.getHttpPath(rr.RelativePath)\n\t\t}\n\n\t\t// Return a cURL command if curlChan is set\n\t\tif c.cURLch != nil {\n\t\t\tcommand := fmt.Sprintf(\"curl -X %s %s\", rr.Method, httpPath)\n\t\t\tfor key, value := range rr.Values {\n\t\t\t\tcommand += fmt.Sprintf(\" -d %s=%s\", key, value[0])\n\t\t\t}\n\t\t\tif c.credentials != nil {\n\t\t\t\tcommand += fmt.Sprintf(\" -u %s\", c.credentials.username)\n\t\t\t}\n\t\t\tc.sendCURL(command)\n\t\t}\n\n\t\tlogger.Debug(\"send.request.to \", httpPath, \" | method \", rr.Method)\n\n\t\treq, err := func() (*http.Request, error) {\n\t\t\treqLock.Lock()\n\t\t\tdefer reqLock.Unlock()\n\n\t\t\tif rr.Values == nil {\n\t\t\t\tif req, err = http.NewRequest(rr.Method, httpPath, nil); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbody := strings.NewReader(rr.Values.Encode())\n\t\t\t\tif req, err = http.NewRequest(rr.Method, httpPath, body); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\treq.Header.Set(\"Content-Type\",\n\t\t\t\t\t\"application/x-www-form-urlencoded; param=value\")\n\t\t\t}\n\t\t\treturn req, nil\n\t\t}()\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif c.credentials != nil {\n\t\t\treq.SetBasicAuth(c.credentials.username, c.credentials.password)\n\t\t}\n\n\t\tresp, err = c.httpClient.Do(req)\n\t\t// clear previous httpPath\n\t\thttpPath = \"\"\n\t\tdefer func() {\n\t\t\tif resp != nil {\n\t\t\t\tresp.Body.Close()\n\t\t\t}\n\t\t}()\n\n\t\t// If the request was cancelled, return ErrRequestCancelled directly\n\t\tselect {\n\t\tcase <-cancelled:\n\t\t\treturn nil, ErrRequestCancelled\n\t\tdefault:\n\t\t}\n\n\t\tnumReqs++\n\n\t\t// network error, change a machine!\n\t\tif err != nil {\n\t\t\tlogger.Debug(\"network error: \", err.Error())\n\t\t\tlastResp := http.Response{}\n\t\t\tif checkErr := checkRetry(c.cluster, numReqs, lastResp, err); checkErr != nil {\n\t\t\t\treturn nil, checkErr\n\t\t\t}\n\n\t\t\tc.cluster.failure()\n\t\t\tcontinue\n\t\t}\n\n\t\t// if there is no error, it should receive response\n\t\tlogger.Debug(\"recv.response.from \", httpPath)\n\n\t\tif validHttpStatusCode[resp.StatusCode] {\n\t\t\t// try to read byte code and break the loop\n\t\t\trespBody, err = ioutil.ReadAll(resp.Body)\n\t\t\tif err == nil {\n\t\t\t\tlogger.Debug(\"recv.success \", httpPath)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// ReadAll error may be caused due to cancel request\n\t\t\tselect {\n\t\t\tcase <-cancelled:\n\t\t\t\treturn nil, ErrRequestCancelled\n\t\t\tdefault:\n\t\t\t}\n\n\t\t\tif err == io.ErrUnexpectedEOF {\n\t\t\t\t// underlying connection was closed prematurely, probably by timeout\n\t\t\t\t// TODO: empty body or unexpectedEOF can cause http.Transport to get hosed;\n\t\t\t\t// this allows the client to detect that and take evasive action. Need\n\t\t\t\t// to revisit once code.google.com/p/go/issues/detail?id=8648 gets fixed.\n\t\t\t\trespBody = []byte{}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif resp.StatusCode == http.StatusTemporaryRedirect {\n\t\t\tu, err := resp.Location()\n\n\t\t\tif err != nil {\n\t\t\t\tlogger.Warning(err)\n\t\t\t} else {\n\t\t\t\t// set httpPath for following redirection\n\t\t\t\thttpPath = u.String()\n\t\t\t}\n\t\t\tresp.Body.Close()\n\t\t\tcontinue\n\t\t}\n\n\t\tif checkErr := checkRetry(c.cluster, numReqs, *resp,\n\t\t\terrors.New(\"Unexpected HTTP status code\")); checkErr != nil {\n\t\t\treturn nil, checkErr\n\t\t}\n\t\tresp.Body.Close()\n\t}\n\n\tr := &RawResponse{\n\t\tStatusCode: resp.StatusCode,\n\t\tBody:       respBody,\n\t\tHeader:     resp.Header,\n\t}\n\n\treturn r, nil\n}\n\n// DefaultCheckRetry defines the retrying behaviour for bad HTTP requests\n// If we have retried 2 * machine number, stop retrying.\n// If status code is InternalServerError, sleep for 200ms.\nfunc DefaultCheckRetry(cluster *Cluster, numReqs int, lastResp http.Response,\n\terr error) error {\n\n\tif numReqs > 2*len(cluster.Machines) {\n\t\terrStr := fmt.Sprintf(\"failed to propose on members %v twice [last error: %v]\", cluster.Machines, err)\n\t\treturn newError(ErrCodeEtcdNotReachable, errStr, 0)\n\t}\n\n\tif isEmptyResponse(lastResp) {\n\t\t// always retry if it failed to get response from one machine\n\t\treturn nil\n\t}\n\tif !shouldRetry(lastResp) {\n\t\tbody := []byte(\"nil\")\n\t\tif lastResp.Body != nil {\n\t\t\tif b, err := ioutil.ReadAll(lastResp.Body); err == nil {\n\t\t\t\tbody = b\n\t\t\t}\n\t\t}\n\t\terrStr := fmt.Sprintf(\"unhandled http status [%s] with body [%s]\", http.StatusText(lastResp.StatusCode), body)\n\t\treturn newError(ErrCodeUnhandledHTTPStatus, errStr, 0)\n\t}\n\t// sleep some time and expect leader election finish\n\ttime.Sleep(time.Millisecond * 200)\n\tlogger.Warning(\"bad response status code \", lastResp.StatusCode)\n\treturn nil\n}\n\nfunc isEmptyResponse(r http.Response) bool { return r.StatusCode == 0 }\n\n// shouldRetry returns whether the reponse deserves retry.\nfunc shouldRetry(r http.Response) bool {\n\t// TODO: only retry when the cluster is in leader election\n\t// We cannot do it exactly because etcd doesn't support it well.\n\treturn r.StatusCode == http.StatusInternalServerError\n}\n\nfunc (c *Client) getHttpPath(s ...string) string {\n\tfullPath := c.cluster.pick() + \"/\" + version\n\tfor _, seg := range s {\n\t\tfullPath = fullPath + \"/\" + seg\n\t}\n\treturn fullPath\n}\n\n// buildValues builds a url.Values map according to the given value and ttl\nfunc buildValues(value string, ttl uint64) url.Values {\n\tv := url.Values{}\n\n\tif value != \"\" {\n\t\tv.Set(\"value\", value)\n\t}\n\n\tif ttl > 0 {\n\t\tv.Set(\"ttl\", fmt.Sprintf(\"%v\", ttl))\n\t}\n\n\treturn v\n}\n\n// convert key string to http path exclude version, including URL escaping\n// for example: key[foo] -> path[keys/foo]\n// key[/%z] -> path[keys/%25z]\n// key[/] -> path[keys/]\nfunc keyToPath(key string) string {\n\t// URL-escape our key, except for slashes\n\tp := strings.Replace(url.QueryEscape(path.Join(\"keys\", key)), \"%2F\", \"/\", -1)\n\n\t// corner case: if key is \"/\" or \"//\" ect\n\t// path join will clear the tailing \"/\"\n\t// we need to add it back\n\tif p == \"keys\" {\n\t\tp = \"keys/\"\n\t}\n\n\treturn p\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/response.generated.go",
    "content": "// ************************************************************\n// DO NOT EDIT.\n// THIS FILE IS AUTO-GENERATED BY codecgen.\n// ************************************************************\n\npackage etcd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\tcodec1978 \"github.com/ugorji/go/codec\"\n\tpkg1_http \"net/http\"\n\t\"reflect\"\n\t\"runtime\"\n\ttime \"time\"\n)\n\nconst (\n\t// ----- content types ----\n\tcodecSelferC_UTF81978 = 1\n\tcodecSelferC_RAW1978  = 0\n\t// ----- value types used ----\n\tcodecSelferValueTypeArray1978 = 10\n\tcodecSelferValueTypeMap1978   = 9\n\t// ----- containerStateValues ----\n\tcodecSelfer_containerMapKey1978    = 2\n\tcodecSelfer_containerMapValue1978  = 3\n\tcodecSelfer_containerMapEnd1978    = 4\n\tcodecSelfer_containerArrayElem1978 = 6\n\tcodecSelfer_containerArrayEnd1978  = 7\n)\n\nvar (\n\tcodecSelferBitsize1978                         = uint8(reflect.TypeOf(uint(0)).Bits())\n\tcodecSelferOnlyMapOrArrayEncodeToStructErr1978 = errors.New(`only encoded map or array can be decoded into a struct`)\n)\n\ntype codecSelfer1978 struct{}\n\nfunc init() {\n\tif codec1978.GenVersion != 5 {\n\t\t_, file, _, _ := runtime.Caller(0)\n\t\terr := fmt.Errorf(\"codecgen version mismatch: current: %v, need %v. Re-generate file: %v\",\n\t\t\t5, codec1978.GenVersion, file)\n\t\tpanic(err)\n\t}\n\tif false { // reference the types, but skip this branch at build/run time\n\t\tvar v0 pkg1_http.Header\n\t\tvar v1 time.Time\n\t\t_, _ = v0, v1\n\t}\n}\n\nfunc (x responseType) CodecEncodeSelf(e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tyym1 := z.EncBinary()\n\t_ = yym1\n\tif false {\n\t} else if z.HasExtensions() && z.EncExt(x) {\n\t} else {\n\t\tr.EncodeInt(int64(x))\n\t}\n}\n\nfunc (x *responseType) CodecDecodeSelf(d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tyym2 := z.DecBinary()\n\t_ = yym2\n\tif false {\n\t} else if z.HasExtensions() && z.DecExt(x) {\n\t} else {\n\t\t*((*int)(x)) = int(r.DecodeInt(codecSelferBitsize1978))\n\t}\n}\n\nfunc (x *RawResponse) CodecEncodeSelf(e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tif x == nil {\n\t\tr.EncodeNil()\n\t} else {\n\t\tyym3 := z.EncBinary()\n\t\t_ = yym3\n\t\tif false {\n\t\t} else if z.HasExtensions() && z.EncExt(x) {\n\t\t} else {\n\t\t\tyysep4 := !z.EncBinary()\n\t\t\tyy2arr4 := z.EncBasicHandle().StructToArray\n\t\t\tvar yyq4 [3]bool\n\t\t\t_, _, _ = yysep4, yyq4, yy2arr4\n\t\t\tconst yyr4 bool = false\n\t\t\tvar yynn4 int\n\t\t\tif yyr4 || yy2arr4 {\n\t\t\t\tr.EncodeArrayStart(3)\n\t\t\t} else {\n\t\t\t\tyynn4 = 3\n\t\t\t\tfor _, b := range yyq4 {\n\t\t\t\t\tif b {\n\t\t\t\t\t\tyynn4++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tr.EncodeMapStart(yynn4)\n\t\t\t\tyynn4 = 0\n\t\t\t}\n\t\t\tif yyr4 || yy2arr4 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym6 := z.EncBinary()\n\t\t\t\t_ = yym6\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeInt(int64(x.StatusCode))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"StatusCode\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym7 := z.EncBinary()\n\t\t\t\t_ = yym7\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeInt(int64(x.StatusCode))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr4 || yy2arr4 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif x.Body == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tyym9 := z.EncBinary()\n\t\t\t\t\t_ = yym9\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeStringBytes(codecSelferC_RAW1978, []byte(x.Body))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"Body\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tif x.Body == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tyym10 := z.EncBinary()\n\t\t\t\t\t_ = yym10\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeStringBytes(codecSelferC_RAW1978, []byte(x.Body))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr4 || yy2arr4 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif x.Header == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tyym12 := z.EncBinary()\n\t\t\t\t\t_ = yym12\n\t\t\t\t\tif false {\n\t\t\t\t\t} else if z.HasExtensions() && z.EncExt(x.Header) {\n\t\t\t\t\t} else {\n\t\t\t\t\t\th.enchttp_Header((pkg1_http.Header)(x.Header), e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"Header\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tif x.Header == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tyym13 := z.EncBinary()\n\t\t\t\t\t_ = yym13\n\t\t\t\t\tif false {\n\t\t\t\t\t} else if z.HasExtensions() && z.EncExt(x.Header) {\n\t\t\t\t\t} else {\n\t\t\t\t\t\th.enchttp_Header((pkg1_http.Header)(x.Header), e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr4 || yy2arr4 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (x *RawResponse) CodecDecodeSelf(d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tyym14 := z.DecBinary()\n\t_ = yym14\n\tif false {\n\t} else if z.HasExtensions() && z.DecExt(x) {\n\t} else {\n\t\tyyct15 := r.ContainerType()\n\t\tif yyct15 == codecSelferValueTypeMap1978 {\n\t\t\tyyl15 := r.ReadMapStart()\n\t\t\tif yyl15 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromMap(yyl15, d)\n\t\t\t}\n\t\t} else if yyct15 == codecSelferValueTypeArray1978 {\n\t\t\tyyl15 := r.ReadArrayStart()\n\t\t\tif yyl15 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromArray(yyl15, d)\n\t\t\t}\n\t\t} else {\n\t\t\tpanic(codecSelferOnlyMapOrArrayEncodeToStructErr1978)\n\t\t}\n\t}\n}\n\nfunc (x *RawResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yys16Slc = z.DecScratchBuffer() // default slice to decode into\n\t_ = yys16Slc\n\tvar yyhl16 bool = l >= 0\n\tfor yyj16 := 0; ; yyj16++ {\n\t\tif yyhl16 {\n\t\t\tif yyj16 >= l {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif r.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerMapKey1978)\n\t\tyys16Slc = r.DecodeBytes(yys16Slc, true, true)\n\t\tyys16 := string(yys16Slc)\n\t\tz.DecSendContainerState(codecSelfer_containerMapValue1978)\n\t\tswitch yys16 {\n\t\tcase \"StatusCode\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.StatusCode = 0\n\t\t\t} else {\n\t\t\t\tx.StatusCode = int(r.DecodeInt(codecSelferBitsize1978))\n\t\t\t}\n\t\tcase \"Body\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Body = nil\n\t\t\t} else {\n\t\t\t\tyyv18 := &x.Body\n\t\t\t\tyym19 := z.DecBinary()\n\t\t\t\t_ = yym19\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\t*yyv18 = r.DecodeBytes(*(*[]byte)(yyv18), false, false)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"Header\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Header = nil\n\t\t\t} else {\n\t\t\t\tyyv20 := &x.Header\n\t\t\t\tyym21 := z.DecBinary()\n\t\t\t\t_ = yym21\n\t\t\t\tif false {\n\t\t\t\t} else if z.HasExtensions() && z.DecExt(yyv20) {\n\t\t\t\t} else {\n\t\t\t\t\th.dechttp_Header((*pkg1_http.Header)(yyv20), d)\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tz.DecStructFieldNotFound(-1, yys16)\n\t\t} // end switch yys16\n\t} // end for yyj16\n\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n}\n\nfunc (x *RawResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yyj22 int\n\tvar yyb22 bool\n\tvar yyhl22 bool = l >= 0\n\tyyj22++\n\tif yyhl22 {\n\t\tyyb22 = yyj22 > l\n\t} else {\n\t\tyyb22 = r.CheckBreak()\n\t}\n\tif yyb22 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.StatusCode = 0\n\t} else {\n\t\tx.StatusCode = int(r.DecodeInt(codecSelferBitsize1978))\n\t}\n\tyyj22++\n\tif yyhl22 {\n\t\tyyb22 = yyj22 > l\n\t} else {\n\t\tyyb22 = r.CheckBreak()\n\t}\n\tif yyb22 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Body = nil\n\t} else {\n\t\tyyv24 := &x.Body\n\t\tyym25 := z.DecBinary()\n\t\t_ = yym25\n\t\tif false {\n\t\t} else {\n\t\t\t*yyv24 = r.DecodeBytes(*(*[]byte)(yyv24), false, false)\n\t\t}\n\t}\n\tyyj22++\n\tif yyhl22 {\n\t\tyyb22 = yyj22 > l\n\t} else {\n\t\tyyb22 = r.CheckBreak()\n\t}\n\tif yyb22 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Header = nil\n\t} else {\n\t\tyyv26 := &x.Header\n\t\tyym27 := z.DecBinary()\n\t\t_ = yym27\n\t\tif false {\n\t\t} else if z.HasExtensions() && z.DecExt(yyv26) {\n\t\t} else {\n\t\t\th.dechttp_Header((*pkg1_http.Header)(yyv26), d)\n\t\t}\n\t}\n\tfor {\n\t\tyyj22++\n\t\tif yyhl22 {\n\t\t\tyyb22 = yyj22 > l\n\t\t} else {\n\t\t\tyyb22 = r.CheckBreak()\n\t\t}\n\t\tif yyb22 {\n\t\t\tbreak\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\t\tz.DecStructFieldNotFound(yyj22-1, \"\")\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n}\n\nfunc (x *Response) CodecEncodeSelf(e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tif x == nil {\n\t\tr.EncodeNil()\n\t} else {\n\t\tyym28 := z.EncBinary()\n\t\t_ = yym28\n\t\tif false {\n\t\t} else if z.HasExtensions() && z.EncExt(x) {\n\t\t} else {\n\t\t\tyysep29 := !z.EncBinary()\n\t\t\tyy2arr29 := z.EncBasicHandle().StructToArray\n\t\t\tvar yyq29 [6]bool\n\t\t\t_, _, _ = yysep29, yyq29, yy2arr29\n\t\t\tconst yyr29 bool = false\n\t\t\tyyq29[2] = x.PrevNode != nil\n\t\t\tvar yynn29 int\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tr.EncodeArrayStart(6)\n\t\t\t} else {\n\t\t\t\tyynn29 = 5\n\t\t\t\tfor _, b := range yyq29 {\n\t\t\t\t\tif b {\n\t\t\t\t\t\tyynn29++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tr.EncodeMapStart(yynn29)\n\t\t\t\tyynn29 = 0\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym31 := z.EncBinary()\n\t\t\t\t_ = yym31\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Action))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"action\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym32 := z.EncBinary()\n\t\t\t\t_ = yym32\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Action))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif x.Node == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tx.Node.CodecEncodeSelf(e)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"node\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tif x.Node == nil {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t} else {\n\t\t\t\t\tx.Node.CodecEncodeSelf(e)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq29[2] {\n\t\t\t\t\tif x.PrevNode == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx.PrevNode.CodecEncodeSelf(e)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq29[2] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"prevNode\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tif x.PrevNode == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx.PrevNode.CodecEncodeSelf(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym36 := z.EncBinary()\n\t\t\t\t_ = yym36\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.EtcdIndex))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"etcdIndex\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym37 := z.EncBinary()\n\t\t\t\t_ = yym37\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.EtcdIndex))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym39 := z.EncBinary()\n\t\t\t\t_ = yym39\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.RaftIndex))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"raftIndex\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym40 := z.EncBinary()\n\t\t\t\t_ = yym40\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.RaftIndex))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym42 := z.EncBinary()\n\t\t\t\t_ = yym42\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.RaftTerm))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"raftTerm\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym43 := z.EncBinary()\n\t\t\t\t_ = yym43\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(uint64(x.RaftTerm))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr29 || yy2arr29 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (x *Response) CodecDecodeSelf(d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tyym44 := z.DecBinary()\n\t_ = yym44\n\tif false {\n\t} else if z.HasExtensions() && z.DecExt(x) {\n\t} else {\n\t\tyyct45 := r.ContainerType()\n\t\tif yyct45 == codecSelferValueTypeMap1978 {\n\t\t\tyyl45 := r.ReadMapStart()\n\t\t\tif yyl45 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromMap(yyl45, d)\n\t\t\t}\n\t\t} else if yyct45 == codecSelferValueTypeArray1978 {\n\t\t\tyyl45 := r.ReadArrayStart()\n\t\t\tif yyl45 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromArray(yyl45, d)\n\t\t\t}\n\t\t} else {\n\t\t\tpanic(codecSelferOnlyMapOrArrayEncodeToStructErr1978)\n\t\t}\n\t}\n}\n\nfunc (x *Response) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yys46Slc = z.DecScratchBuffer() // default slice to decode into\n\t_ = yys46Slc\n\tvar yyhl46 bool = l >= 0\n\tfor yyj46 := 0; ; yyj46++ {\n\t\tif yyhl46 {\n\t\t\tif yyj46 >= l {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif r.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerMapKey1978)\n\t\tyys46Slc = r.DecodeBytes(yys46Slc, true, true)\n\t\tyys46 := string(yys46Slc)\n\t\tz.DecSendContainerState(codecSelfer_containerMapValue1978)\n\t\tswitch yys46 {\n\t\tcase \"action\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Action = \"\"\n\t\t\t} else {\n\t\t\t\tx.Action = string(r.DecodeString())\n\t\t\t}\n\t\tcase \"node\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tif x.Node != nil {\n\t\t\t\t\tx.Node = nil\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif x.Node == nil {\n\t\t\t\t\tx.Node = new(Node)\n\t\t\t\t}\n\t\t\t\tx.Node.CodecDecodeSelf(d)\n\t\t\t}\n\t\tcase \"prevNode\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tif x.PrevNode != nil {\n\t\t\t\t\tx.PrevNode = nil\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif x.PrevNode == nil {\n\t\t\t\t\tx.PrevNode = new(Node)\n\t\t\t\t}\n\t\t\t\tx.PrevNode.CodecDecodeSelf(d)\n\t\t\t}\n\t\tcase \"etcdIndex\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.EtcdIndex = 0\n\t\t\t} else {\n\t\t\t\tx.EtcdIndex = uint64(r.DecodeUint(64))\n\t\t\t}\n\t\tcase \"raftIndex\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.RaftIndex = 0\n\t\t\t} else {\n\t\t\t\tx.RaftIndex = uint64(r.DecodeUint(64))\n\t\t\t}\n\t\tcase \"raftTerm\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.RaftTerm = 0\n\t\t\t} else {\n\t\t\t\tx.RaftTerm = uint64(r.DecodeUint(64))\n\t\t\t}\n\t\tdefault:\n\t\t\tz.DecStructFieldNotFound(-1, yys46)\n\t\t} // end switch yys46\n\t} // end for yyj46\n\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n}\n\nfunc (x *Response) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yyj53 int\n\tvar yyb53 bool\n\tvar yyhl53 bool = l >= 0\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Action = \"\"\n\t} else {\n\t\tx.Action = string(r.DecodeString())\n\t}\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tif x.Node != nil {\n\t\t\tx.Node = nil\n\t\t}\n\t} else {\n\t\tif x.Node == nil {\n\t\t\tx.Node = new(Node)\n\t\t}\n\t\tx.Node.CodecDecodeSelf(d)\n\t}\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tif x.PrevNode != nil {\n\t\t\tx.PrevNode = nil\n\t\t}\n\t} else {\n\t\tif x.PrevNode == nil {\n\t\t\tx.PrevNode = new(Node)\n\t\t}\n\t\tx.PrevNode.CodecDecodeSelf(d)\n\t}\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.EtcdIndex = 0\n\t} else {\n\t\tx.EtcdIndex = uint64(r.DecodeUint(64))\n\t}\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.RaftIndex = 0\n\t} else {\n\t\tx.RaftIndex = uint64(r.DecodeUint(64))\n\t}\n\tyyj53++\n\tif yyhl53 {\n\t\tyyb53 = yyj53 > l\n\t} else {\n\t\tyyb53 = r.CheckBreak()\n\t}\n\tif yyb53 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.RaftTerm = 0\n\t} else {\n\t\tx.RaftTerm = uint64(r.DecodeUint(64))\n\t}\n\tfor {\n\t\tyyj53++\n\t\tif yyhl53 {\n\t\t\tyyb53 = yyj53 > l\n\t\t} else {\n\t\t\tyyb53 = r.CheckBreak()\n\t\t}\n\t\tif yyb53 {\n\t\t\tbreak\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\t\tz.DecStructFieldNotFound(yyj53-1, \"\")\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n}\n\nfunc (x *Node) CodecEncodeSelf(e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tif x == nil {\n\t\tr.EncodeNil()\n\t} else {\n\t\tyym60 := z.EncBinary()\n\t\t_ = yym60\n\t\tif false {\n\t\t} else if z.HasExtensions() && z.EncExt(x) {\n\t\t} else {\n\t\t\tyysep61 := !z.EncBinary()\n\t\t\tyy2arr61 := z.EncBasicHandle().StructToArray\n\t\t\tvar yyq61 [8]bool\n\t\t\t_, _, _ = yysep61, yyq61, yy2arr61\n\t\t\tconst yyr61 bool = false\n\t\t\tyyq61[1] = x.Value != \"\"\n\t\t\tyyq61[2] = x.Dir != false\n\t\t\tyyq61[3] = x.Expiration != nil\n\t\t\tyyq61[4] = x.TTL != 0\n\t\t\tyyq61[5] = len(x.Nodes) != 0\n\t\t\tyyq61[6] = x.ModifiedIndex != 0\n\t\t\tyyq61[7] = x.CreatedIndex != 0\n\t\t\tvar yynn61 int\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tr.EncodeArrayStart(8)\n\t\t\t} else {\n\t\t\t\tyynn61 = 1\n\t\t\t\tfor _, b := range yyq61 {\n\t\t\t\t\tif b {\n\t\t\t\t\t\tyynn61++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tr.EncodeMapStart(yynn61)\n\t\t\t\tyynn61 = 0\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tyym63 := z.EncBinary()\n\t\t\t\t_ = yym63\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Key))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"key\"))\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\tyym64 := z.EncBinary()\n\t\t\t\t_ = yym64\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Key))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[1] {\n\t\t\t\t\tyym66 := z.EncBinary()\n\t\t\t\t\t_ = yym66\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Value))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, \"\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[1] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"value\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tyym67 := z.EncBinary()\n\t\t\t\t\t_ = yym67\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(x.Value))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[2] {\n\t\t\t\t\tyym69 := z.EncBinary()\n\t\t\t\t\t_ = yym69\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeBool(bool(x.Dir))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeBool(false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[2] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"dir\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tyym70 := z.EncBinary()\n\t\t\t\t\t_ = yym70\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeBool(bool(x.Dir))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[3] {\n\t\t\t\t\tif x.Expiration == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyym72 := z.EncBinary()\n\t\t\t\t\t\t_ = yym72\n\t\t\t\t\t\tif false {\n\t\t\t\t\t\t} else if yym73 := z.TimeRtidIfBinc(); yym73 != 0 {\n\t\t\t\t\t\t\tr.EncodeBuiltin(yym73, x.Expiration)\n\t\t\t\t\t\t} else if z.HasExtensions() && z.EncExt(x.Expiration) {\n\t\t\t\t\t\t} else if yym72 {\n\t\t\t\t\t\t\tz.EncBinaryMarshal(x.Expiration)\n\t\t\t\t\t\t} else if !yym72 && z.IsJSONHandle() {\n\t\t\t\t\t\t\tz.EncJSONMarshal(x.Expiration)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tz.EncFallback(x.Expiration)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[3] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"expiration\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tif x.Expiration == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyym74 := z.EncBinary()\n\t\t\t\t\t\t_ = yym74\n\t\t\t\t\t\tif false {\n\t\t\t\t\t\t} else if yym75 := z.TimeRtidIfBinc(); yym75 != 0 {\n\t\t\t\t\t\t\tr.EncodeBuiltin(yym75, x.Expiration)\n\t\t\t\t\t\t} else if z.HasExtensions() && z.EncExt(x.Expiration) {\n\t\t\t\t\t\t} else if yym74 {\n\t\t\t\t\t\t\tz.EncBinaryMarshal(x.Expiration)\n\t\t\t\t\t\t} else if !yym74 && z.IsJSONHandle() {\n\t\t\t\t\t\t\tz.EncJSONMarshal(x.Expiration)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tz.EncFallback(x.Expiration)\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 yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[4] {\n\t\t\t\t\tyym77 := z.EncBinary()\n\t\t\t\t\t_ = yym77\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeInt(int64(x.TTL))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeInt(0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[4] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"ttl\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tyym78 := z.EncBinary()\n\t\t\t\t\t_ = yym78\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeInt(int64(x.TTL))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[5] {\n\t\t\t\t\tif x.Nodes == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx.Nodes.CodecEncodeSelf(e)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeNil()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[5] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"nodes\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tif x.Nodes == nil {\n\t\t\t\t\t\tr.EncodeNil()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx.Nodes.CodecEncodeSelf(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[6] {\n\t\t\t\t\tyym81 := z.EncBinary()\n\t\t\t\t\t_ = yym81\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeUint(uint64(x.ModifiedIndex))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[6] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"modifiedIndex\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tyym82 := z.EncBinary()\n\t\t\t\t\t_ = yym82\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeUint(uint64(x.ModifiedIndex))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\t\t\tif yyq61[7] {\n\t\t\t\t\tyym84 := z.EncBinary()\n\t\t\t\t\t_ = yym84\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeUint(uint64(x.CreatedIndex))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tr.EncodeUint(0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyq61[7] {\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\t\t\tr.EncodeString(codecSelferC_UTF81978, string(\"createdIndex\"))\n\t\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\t\t\tyym85 := z.EncBinary()\n\t\t\t\t\t_ = yym85\n\t\t\t\t\tif false {\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.EncodeUint(uint64(x.CreatedIndex))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif yyr61 || yy2arr61 {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tz.EncSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (x *Node) CodecDecodeSelf(d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tyym86 := z.DecBinary()\n\t_ = yym86\n\tif false {\n\t} else if z.HasExtensions() && z.DecExt(x) {\n\t} else {\n\t\tyyct87 := r.ContainerType()\n\t\tif yyct87 == codecSelferValueTypeMap1978 {\n\t\t\tyyl87 := r.ReadMapStart()\n\t\t\tif yyl87 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromMap(yyl87, d)\n\t\t\t}\n\t\t} else if yyct87 == codecSelferValueTypeArray1978 {\n\t\t\tyyl87 := r.ReadArrayStart()\n\t\t\tif yyl87 == 0 {\n\t\t\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\t\t} else {\n\t\t\t\tx.codecDecodeSelfFromArray(yyl87, d)\n\t\t\t}\n\t\t} else {\n\t\t\tpanic(codecSelferOnlyMapOrArrayEncodeToStructErr1978)\n\t\t}\n\t}\n}\n\nfunc (x *Node) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yys88Slc = z.DecScratchBuffer() // default slice to decode into\n\t_ = yys88Slc\n\tvar yyhl88 bool = l >= 0\n\tfor yyj88 := 0; ; yyj88++ {\n\t\tif yyhl88 {\n\t\t\tif yyj88 >= l {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif r.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerMapKey1978)\n\t\tyys88Slc = r.DecodeBytes(yys88Slc, true, true)\n\t\tyys88 := string(yys88Slc)\n\t\tz.DecSendContainerState(codecSelfer_containerMapValue1978)\n\t\tswitch yys88 {\n\t\tcase \"key\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Key = \"\"\n\t\t\t} else {\n\t\t\t\tx.Key = string(r.DecodeString())\n\t\t\t}\n\t\tcase \"value\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Value = \"\"\n\t\t\t} else {\n\t\t\t\tx.Value = string(r.DecodeString())\n\t\t\t}\n\t\tcase \"dir\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Dir = false\n\t\t\t} else {\n\t\t\t\tx.Dir = bool(r.DecodeBool())\n\t\t\t}\n\t\tcase \"expiration\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tif x.Expiration != nil {\n\t\t\t\t\tx.Expiration = nil\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif x.Expiration == nil {\n\t\t\t\t\tx.Expiration = new(time.Time)\n\t\t\t\t}\n\t\t\t\tyym93 := z.DecBinary()\n\t\t\t\t_ = yym93\n\t\t\t\tif false {\n\t\t\t\t} else if yym94 := z.TimeRtidIfBinc(); yym94 != 0 {\n\t\t\t\t\tr.DecodeBuiltin(yym94, x.Expiration)\n\t\t\t\t} else if z.HasExtensions() && z.DecExt(x.Expiration) {\n\t\t\t\t} else if yym93 {\n\t\t\t\t\tz.DecBinaryUnmarshal(x.Expiration)\n\t\t\t\t} else if !yym93 && z.IsJSONHandle() {\n\t\t\t\t\tz.DecJSONUnmarshal(x.Expiration)\n\t\t\t\t} else {\n\t\t\t\t\tz.DecFallback(x.Expiration, false)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"ttl\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.TTL = 0\n\t\t\t} else {\n\t\t\t\tx.TTL = int64(r.DecodeInt(64))\n\t\t\t}\n\t\tcase \"nodes\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.Nodes = nil\n\t\t\t} else {\n\t\t\t\tyyv96 := &x.Nodes\n\t\t\t\tyyv96.CodecDecodeSelf(d)\n\t\t\t}\n\t\tcase \"modifiedIndex\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.ModifiedIndex = 0\n\t\t\t} else {\n\t\t\t\tx.ModifiedIndex = uint64(r.DecodeUint(64))\n\t\t\t}\n\t\tcase \"createdIndex\":\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tx.CreatedIndex = 0\n\t\t\t} else {\n\t\t\t\tx.CreatedIndex = uint64(r.DecodeUint(64))\n\t\t\t}\n\t\tdefault:\n\t\t\tz.DecStructFieldNotFound(-1, yys88)\n\t\t} // end switch yys88\n\t} // end for yyj88\n\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n}\n\nfunc (x *Node) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tvar yyj99 int\n\tvar yyb99 bool\n\tvar yyhl99 bool = l >= 0\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Key = \"\"\n\t} else {\n\t\tx.Key = string(r.DecodeString())\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Value = \"\"\n\t} else {\n\t\tx.Value = string(r.DecodeString())\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Dir = false\n\t} else {\n\t\tx.Dir = bool(r.DecodeBool())\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tif x.Expiration != nil {\n\t\t\tx.Expiration = nil\n\t\t}\n\t} else {\n\t\tif x.Expiration == nil {\n\t\t\tx.Expiration = new(time.Time)\n\t\t}\n\t\tyym104 := z.DecBinary()\n\t\t_ = yym104\n\t\tif false {\n\t\t} else if yym105 := z.TimeRtidIfBinc(); yym105 != 0 {\n\t\t\tr.DecodeBuiltin(yym105, x.Expiration)\n\t\t} else if z.HasExtensions() && z.DecExt(x.Expiration) {\n\t\t} else if yym104 {\n\t\t\tz.DecBinaryUnmarshal(x.Expiration)\n\t\t} else if !yym104 && z.IsJSONHandle() {\n\t\t\tz.DecJSONUnmarshal(x.Expiration)\n\t\t} else {\n\t\t\tz.DecFallback(x.Expiration, false)\n\t\t}\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.TTL = 0\n\t} else {\n\t\tx.TTL = int64(r.DecodeInt(64))\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.Nodes = nil\n\t} else {\n\t\tyyv107 := &x.Nodes\n\t\tyyv107.CodecDecodeSelf(d)\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.ModifiedIndex = 0\n\t} else {\n\t\tx.ModifiedIndex = uint64(r.DecodeUint(64))\n\t}\n\tyyj99++\n\tif yyhl99 {\n\t\tyyb99 = yyj99 > l\n\t} else {\n\t\tyyb99 = r.CheckBreak()\n\t}\n\tif yyb99 {\n\t\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n\t\treturn\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\tif r.TryDecodeAsNil() {\n\t\tx.CreatedIndex = 0\n\t} else {\n\t\tx.CreatedIndex = uint64(r.DecodeUint(64))\n\t}\n\tfor {\n\t\tyyj99++\n\t\tif yyhl99 {\n\t\t\tyyb99 = yyj99 > l\n\t\t} else {\n\t\t\tyyb99 = r.CheckBreak()\n\t\t}\n\t\tif yyb99 {\n\t\t\tbreak\n\t\t}\n\t\tz.DecSendContainerState(codecSelfer_containerArrayElem1978)\n\t\tz.DecStructFieldNotFound(yyj99-1, \"\")\n\t}\n\tz.DecSendContainerState(codecSelfer_containerArrayEnd1978)\n}\n\nfunc (x Nodes) CodecEncodeSelf(e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tif x == nil {\n\t\tr.EncodeNil()\n\t} else {\n\t\tyym110 := z.EncBinary()\n\t\t_ = yym110\n\t\tif false {\n\t\t} else if z.HasExtensions() && z.EncExt(x) {\n\t\t} else {\n\t\t\th.encNodes((Nodes)(x), e)\n\t\t}\n\t}\n}\n\nfunc (x *Nodes) CodecDecodeSelf(d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\tyym111 := z.DecBinary()\n\t_ = yym111\n\tif false {\n\t} else if z.HasExtensions() && z.DecExt(x) {\n\t} else {\n\t\th.decNodes((*Nodes)(x), d)\n\t}\n}\n\nfunc (x codecSelfer1978) enchttp_Header(v pkg1_http.Header, e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tr.EncodeMapStart(len(v))\n\tfor yyk112, yyv112 := range v {\n\t\tz.EncSendContainerState(codecSelfer_containerMapKey1978)\n\t\tyym113 := z.EncBinary()\n\t\t_ = yym113\n\t\tif false {\n\t\t} else {\n\t\t\tr.EncodeString(codecSelferC_UTF81978, string(yyk112))\n\t\t}\n\t\tz.EncSendContainerState(codecSelfer_containerMapValue1978)\n\t\tif yyv112 == nil {\n\t\t\tr.EncodeNil()\n\t\t} else {\n\t\t\tyym114 := z.EncBinary()\n\t\t\t_ = yym114\n\t\t\tif false {\n\t\t\t} else {\n\t\t\t\tz.F.EncSliceStringV(yyv112, false, e)\n\t\t\t}\n\t\t}\n\t}\n\tz.EncSendContainerState(codecSelfer_containerMapEnd1978)\n}\n\nfunc (x codecSelfer1978) dechttp_Header(v *pkg1_http.Header, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\n\tyyv115 := *v\n\tyyl115 := r.ReadMapStart()\n\tyybh115 := z.DecBasicHandle()\n\tif yyv115 == nil {\n\t\tyyrl115, _ := z.DecInferLen(yyl115, yybh115.MaxInitLen, 40)\n\t\tyyv115 = make(map[string][]string, yyrl115)\n\t\t*v = yyv115\n\t}\n\tvar yymk115 string\n\tvar yymv115 []string\n\tvar yymg115 bool\n\tif yybh115.MapValueReset {\n\t\tyymg115 = true\n\t}\n\tif yyl115 > 0 {\n\t\tfor yyj115 := 0; yyj115 < yyl115; yyj115++ {\n\t\t\tz.DecSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tyymk115 = \"\"\n\t\t\t} else {\n\t\t\t\tyymk115 = string(r.DecodeString())\n\t\t\t}\n\n\t\t\tif yymg115 {\n\t\t\t\tyymv115 = yyv115[yymk115]\n\t\t\t} else {\n\t\t\t\tyymv115 = nil\n\t\t\t}\n\t\t\tz.DecSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tyymv115 = nil\n\t\t\t} else {\n\t\t\t\tyyv117 := &yymv115\n\t\t\t\tyym118 := z.DecBinary()\n\t\t\t\t_ = yym118\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tz.F.DecSliceStringX(yyv117, false, d)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif yyv115 != nil {\n\t\t\t\tyyv115[yymk115] = yymv115\n\t\t\t}\n\t\t}\n\t} else if yyl115 < 0 {\n\t\tfor yyj115 := 0; !r.CheckBreak(); yyj115++ {\n\t\t\tz.DecSendContainerState(codecSelfer_containerMapKey1978)\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tyymk115 = \"\"\n\t\t\t} else {\n\t\t\t\tyymk115 = string(r.DecodeString())\n\t\t\t}\n\n\t\t\tif yymg115 {\n\t\t\t\tyymv115 = yyv115[yymk115]\n\t\t\t} else {\n\t\t\t\tyymv115 = nil\n\t\t\t}\n\t\t\tz.DecSendContainerState(codecSelfer_containerMapValue1978)\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tyymv115 = nil\n\t\t\t} else {\n\t\t\t\tyyv120 := &yymv115\n\t\t\t\tyym121 := z.DecBinary()\n\t\t\t\t_ = yym121\n\t\t\t\tif false {\n\t\t\t\t} else {\n\t\t\t\t\tz.F.DecSliceStringX(yyv120, false, d)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif yyv115 != nil {\n\t\t\t\tyyv115[yymk115] = yymv115\n\t\t\t}\n\t\t}\n\t} // else len==0: TODO: Should we clear map entries?\n\tz.DecSendContainerState(codecSelfer_containerMapEnd1978)\n}\n\nfunc (x codecSelfer1978) encNodes(v Nodes, e *codec1978.Encoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperEncoder(e)\n\t_, _, _ = h, z, r\n\tr.EncodeArrayStart(len(v))\n\tfor _, yyv122 := range v {\n\t\tz.EncSendContainerState(codecSelfer_containerArrayElem1978)\n\t\tif yyv122 == nil {\n\t\t\tr.EncodeNil()\n\t\t} else {\n\t\t\tyyv122.CodecEncodeSelf(e)\n\t\t}\n\t}\n\tz.EncSendContainerState(codecSelfer_containerArrayEnd1978)\n}\n\nfunc (x codecSelfer1978) decNodes(v *Nodes, d *codec1978.Decoder) {\n\tvar h codecSelfer1978\n\tz, r := codec1978.GenHelperDecoder(d)\n\t_, _, _ = h, z, r\n\n\tyyv123 := *v\n\tyyh123, yyl123 := z.DecSliceHelperStart()\n\tvar yyc123 bool\n\tif yyl123 == 0 {\n\t\tif yyv123 == nil {\n\t\t\tyyv123 = []*Node{}\n\t\t\tyyc123 = true\n\t\t} else if len(yyv123) != 0 {\n\t\t\tyyv123 = yyv123[:0]\n\t\t\tyyc123 = true\n\t\t}\n\t} else if yyl123 > 0 {\n\t\tvar yyrr123, yyrl123 int\n\t\tvar yyrt123 bool\n\t\tif yyl123 > cap(yyv123) {\n\n\t\t\tyyrg123 := len(yyv123) > 0\n\t\t\tyyv2123 := yyv123\n\t\t\tyyrl123, yyrt123 = z.DecInferLen(yyl123, z.DecBasicHandle().MaxInitLen, 8)\n\t\t\tif yyrt123 {\n\t\t\t\tif yyrl123 <= cap(yyv123) {\n\t\t\t\t\tyyv123 = yyv123[:yyrl123]\n\t\t\t\t} else {\n\t\t\t\t\tyyv123 = make([]*Node, yyrl123)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tyyv123 = make([]*Node, yyrl123)\n\t\t\t}\n\t\t\tyyc123 = true\n\t\t\tyyrr123 = len(yyv123)\n\t\t\tif yyrg123 {\n\t\t\t\tcopy(yyv123, yyv2123)\n\t\t\t}\n\t\t} else if yyl123 != len(yyv123) {\n\t\t\tyyv123 = yyv123[:yyl123]\n\t\t\tyyc123 = true\n\t\t}\n\t\tyyj123 := 0\n\t\tfor ; yyj123 < yyrr123; yyj123++ {\n\t\t\tyyh123.ElemContainerState(yyj123)\n\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\tif yyv123[yyj123] != nil {\n\t\t\t\t\t*yyv123[yyj123] = Node{}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif yyv123[yyj123] == nil {\n\t\t\t\t\tyyv123[yyj123] = new(Node)\n\t\t\t\t}\n\t\t\t\tyyw124 := yyv123[yyj123]\n\t\t\t\tyyw124.CodecDecodeSelf(d)\n\t\t\t}\n\n\t\t}\n\t\tif yyrt123 {\n\t\t\tfor ; yyj123 < yyl123; yyj123++ {\n\t\t\t\tyyv123 = append(yyv123, nil)\n\t\t\t\tyyh123.ElemContainerState(yyj123)\n\t\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\t\tif yyv123[yyj123] != nil {\n\t\t\t\t\t\t*yyv123[yyj123] = Node{}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif yyv123[yyj123] == nil {\n\t\t\t\t\t\tyyv123[yyj123] = new(Node)\n\t\t\t\t\t}\n\t\t\t\t\tyyw125 := yyv123[yyj123]\n\t\t\t\t\tyyw125.CodecDecodeSelf(d)\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\tyyj123 := 0\n\t\tfor ; !r.CheckBreak(); yyj123++ {\n\n\t\t\tif yyj123 >= len(yyv123) {\n\t\t\t\tyyv123 = append(yyv123, nil) // var yyz123 *Node\n\t\t\t\tyyc123 = true\n\t\t\t}\n\t\t\tyyh123.ElemContainerState(yyj123)\n\t\t\tif yyj123 < len(yyv123) {\n\t\t\t\tif r.TryDecodeAsNil() {\n\t\t\t\t\tif yyv123[yyj123] != nil {\n\t\t\t\t\t\t*yyv123[yyj123] = Node{}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif yyv123[yyj123] == nil {\n\t\t\t\t\t\tyyv123[yyj123] = new(Node)\n\t\t\t\t\t}\n\t\t\t\t\tyyw126 := yyv123[yyj123]\n\t\t\t\t\tyyw126.CodecDecodeSelf(d)\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tz.DecSwallow()\n\t\t\t}\n\n\t\t}\n\t\tif yyj123 < len(yyv123) {\n\t\t\tyyv123 = yyv123[:yyj123]\n\t\t\tyyc123 = true\n\t\t} else if yyj123 == 0 && yyv123 == nil {\n\t\t\tyyv123 = []*Node{}\n\t\t\tyyc123 = true\n\t\t}\n\t}\n\tyyh123.End()\n\tif yyc123 {\n\t\t*v = yyv123\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/response.go",
    "content": "package etcd\n\n//go:generate codecgen -d 1978 -o response.generated.go response.go\n\nimport (\n\t\"net/http\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/ugorji/go/codec\"\n)\n\nconst (\n\trawResponse = iota\n\tnormalResponse\n)\n\ntype responseType int\n\ntype RawResponse struct {\n\tStatusCode int\n\tBody       []byte\n\tHeader     http.Header\n}\n\nvar (\n\tvalidHttpStatusCode = map[int]bool{\n\t\thttp.StatusCreated:            true,\n\t\thttp.StatusOK:                 true,\n\t\thttp.StatusBadRequest:         true,\n\t\thttp.StatusNotFound:           true,\n\t\thttp.StatusPreconditionFailed: true,\n\t\thttp.StatusForbidden:          true,\n\t\thttp.StatusUnauthorized:       true,\n\t}\n)\n\n// Unmarshal parses RawResponse and stores the result in Response\nfunc (rr *RawResponse) Unmarshal() (*Response, error) {\n\tif rr.StatusCode != http.StatusOK && rr.StatusCode != http.StatusCreated {\n\t\treturn nil, handleError(rr.Body)\n\t}\n\n\tresp := new(Response)\n\n\terr := codec.NewDecoderBytes(rr.Body, new(codec.JsonHandle)).Decode(resp)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// attach index and term to response\n\tresp.EtcdIndex, _ = strconv.ParseUint(rr.Header.Get(\"X-Etcd-Index\"), 10, 64)\n\tresp.RaftIndex, _ = strconv.ParseUint(rr.Header.Get(\"X-Raft-Index\"), 10, 64)\n\tresp.RaftTerm, _ = strconv.ParseUint(rr.Header.Get(\"X-Raft-Term\"), 10, 64)\n\n\treturn resp, nil\n}\n\ntype Response struct {\n\tAction    string `json:\"action\"`\n\tNode      *Node  `json:\"node\"`\n\tPrevNode  *Node  `json:\"prevNode,omitempty\"`\n\tEtcdIndex uint64 `json:\"etcdIndex\"`\n\tRaftIndex uint64 `json:\"raftIndex\"`\n\tRaftTerm  uint64 `json:\"raftTerm\"`\n}\n\ntype Node struct {\n\tKey           string     `json:\"key, omitempty\"`\n\tValue         string     `json:\"value,omitempty\"`\n\tDir           bool       `json:\"dir,omitempty\"`\n\tExpiration    *time.Time `json:\"expiration,omitempty\"`\n\tTTL           int64      `json:\"ttl,omitempty\"`\n\tNodes         Nodes      `json:\"nodes,omitempty\"`\n\tModifiedIndex uint64     `json:\"modifiedIndex,omitempty\"`\n\tCreatedIndex  uint64     `json:\"createdIndex,omitempty\"`\n}\n\ntype Nodes []*Node\n\n// interfaces for sorting\nfunc (ns Nodes) Len() int {\n\treturn len(ns)\n}\n\nfunc (ns Nodes) Less(i, j int) bool {\n\treturn ns[i].Key < ns[j].Key\n}\n\nfunc (ns Nodes) Swap(i, j int) {\n\tns[i], ns[j] = ns[j], ns[i]\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/set_update_create.go",
    "content": "package etcd\n\n// Set sets the given key to the given value.\n// It will create a new key value pair or replace the old one.\n// It will not replace a existing directory.\nfunc (c *Client) Set(key string, value string, ttl uint64) (*Response, error) {\n\traw, err := c.RawSet(key, value, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// SetDir sets the given key to a directory.\n// It will create a new directory or replace the old key value pair by a directory.\n// It will not replace a existing directory.\nfunc (c *Client) SetDir(key string, ttl uint64) (*Response, error) {\n\traw, err := c.RawSetDir(key, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// CreateDir creates a directory. It succeeds only if\n// the given key does not yet exist.\nfunc (c *Client) CreateDir(key string, ttl uint64) (*Response, error) {\n\traw, err := c.RawCreateDir(key, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// UpdateDir updates the given directory. It succeeds only if the\n// given key already exists.\nfunc (c *Client) UpdateDir(key string, ttl uint64) (*Response, error) {\n\traw, err := c.RawUpdateDir(key, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// Create creates a file with the given value under the given key.  It succeeds\n// only if the given key does not yet exist.\nfunc (c *Client) Create(key string, value string, ttl uint64) (*Response, error) {\n\traw, err := c.RawCreate(key, value, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// CreateInOrder creates a file with a key that's guaranteed to be higher than other\n// keys in the given directory. It is useful for creating queues.\nfunc (c *Client) CreateInOrder(dir string, value string, ttl uint64) (*Response, error) {\n\traw, err := c.RawCreateInOrder(dir, value, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\n// Update updates the given key to the given value.  It succeeds only if the\n// given key already exists.\nfunc (c *Client) Update(key string, value string, ttl uint64) (*Response, error) {\n\traw, err := c.RawUpdate(key, value, ttl)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn raw.Unmarshal()\n}\n\nfunc (c *Client) RawUpdateDir(key string, ttl uint64) (*RawResponse, error) {\n\tops := Options{\n\t\t\"prevExist\": true,\n\t\t\"dir\":       true,\n\t}\n\n\treturn c.put(key, \"\", ttl, ops)\n}\n\nfunc (c *Client) RawCreateDir(key string, ttl uint64) (*RawResponse, error) {\n\tops := Options{\n\t\t\"prevExist\": false,\n\t\t\"dir\":       true,\n\t}\n\n\treturn c.put(key, \"\", ttl, ops)\n}\n\nfunc (c *Client) RawSet(key string, value string, ttl uint64) (*RawResponse, error) {\n\treturn c.put(key, value, ttl, nil)\n}\n\nfunc (c *Client) RawSetDir(key string, ttl uint64) (*RawResponse, error) {\n\tops := Options{\n\t\t\"dir\": true,\n\t}\n\n\treturn c.put(key, \"\", ttl, ops)\n}\n\nfunc (c *Client) RawUpdate(key string, value string, ttl uint64) (*RawResponse, error) {\n\tops := Options{\n\t\t\"prevExist\": true,\n\t}\n\n\treturn c.put(key, value, ttl, ops)\n}\n\nfunc (c *Client) RawCreate(key string, value string, ttl uint64) (*RawResponse, error) {\n\tops := Options{\n\t\t\"prevExist\": false,\n\t}\n\n\treturn c.put(key, value, ttl, ops)\n}\n\nfunc (c *Client) RawCreateInOrder(dir string, value string, ttl uint64) (*RawResponse, error) {\n\treturn c.post(dir, value, ttl)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/shuffle.go",
    "content": "package etcd\n\nimport (\n\t\"math/rand\"\n)\n\nfunc shuffleStringSlice(cards []string) []string {\n\tsize := len(cards)\n\t//Do not need to copy if nothing changed\n\tif size <= 1 {\n\t\treturn cards\n\t}\n\tshuffled := make([]string, size)\n\tindex := rand.Perm(size)\n\tfor i := range cards {\n\t\tshuffled[index[i]] = cards[i]\n\t}\n\treturn shuffled\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/version.go",
    "content": "package etcd\n\nconst (\n\tversion        = \"v2\"\n\tpackageVersion = \"v2.0.0+git\"\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/coreos/go-etcd/etcd/watch.go",
    "content": "package etcd\n\nimport (\n\t\"errors\"\n)\n\n// Errors introduced by the Watch command.\nvar (\n\tErrWatchStoppedByUser = errors.New(\"Watch stopped by the user via stop channel\")\n)\n\n// If recursive is set to true the watch returns the first change under the given\n// prefix since the given index.\n//\n// If recursive is set to false the watch returns the first change to the given key\n// since the given index.\n//\n// To watch for the latest change, set waitIndex = 0.\n//\n// If a receiver channel is given, it will be a long-term watch. Watch will block at the\n//channel. After someone receives the channel, it will go on to watch that\n// prefix.  If a stop channel is given, the client can close long-term watch using\n// the stop channel.\nfunc (c *Client) Watch(prefix string, waitIndex uint64, recursive bool,\n\treceiver chan *Response, stop chan bool) (*Response, error) {\n\tlogger.Debugf(\"watch %s [%s]\", prefix, c.cluster.Leader)\n\tif receiver == nil {\n\t\traw, err := c.watchOnce(prefix, waitIndex, recursive, stop)\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn raw.Unmarshal()\n\t}\n\tdefer close(receiver)\n\n\tfor {\n\t\traw, err := c.watchOnce(prefix, waitIndex, recursive, stop)\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresp, err := raw.Unmarshal()\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\twaitIndex = resp.Node.ModifiedIndex + 1\n\t\treceiver <- resp\n\t}\n}\n\nfunc (c *Client) RawWatch(prefix string, waitIndex uint64, recursive bool,\n\treceiver chan *RawResponse, stop chan bool) (*RawResponse, error) {\n\n\tlogger.Debugf(\"rawWatch %s [%s]\", prefix, c.cluster.Leader)\n\tif receiver == nil {\n\t\treturn c.watchOnce(prefix, waitIndex, recursive, stop)\n\t}\n\n\tfor {\n\t\traw, err := c.watchOnce(prefix, waitIndex, recursive, stop)\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresp, err := raw.Unmarshal()\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\twaitIndex = resp.Node.ModifiedIndex + 1\n\t\treceiver <- raw\n\t}\n}\n\n// helper func\n// return when there is change under the given prefix\nfunc (c *Client) watchOnce(key string, waitIndex uint64, recursive bool, stop chan bool) (*RawResponse, error) {\n\n\toptions := Options{\n\t\t\"wait\": true,\n\t}\n\tif waitIndex > 0 {\n\t\toptions[\"waitIndex\"] = waitIndex\n\t}\n\tif recursive {\n\t\toptions[\"recursive\"] = true\n\t}\n\n\tresp, err := c.getCancelable(key, options, stop)\n\n\tif err == ErrRequestCancelled {\n\t\treturn nil, ErrWatchStoppedByUser\n\t}\n\n\treturn resp, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/LICENSE",
    "content": "Copyright (c) 2012 The Go Authors. All rights reserved.\nCopyright (c) 2012 fsnotify 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": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/fen.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 solaris\n\npackage fsnotify\n\nimport (\n\t\"errors\"\n)\n\n// Watcher watches a set of files, delivering events to a channel.\ntype Watcher struct {\n\tEvents chan Event\n\tErrors chan error\n}\n\n// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events.\nfunc NewWatcher() (*Watcher, error) {\n\treturn nil, errors.New(\"FEN based watcher not yet supported for fsnotify\\n\")\n}\n\n// Close removes all watches and closes the events channel.\nfunc (w *Watcher) Close() error {\n\treturn nil\n}\n\n// Add starts watching the named file or directory (non-recursively).\nfunc (w *Watcher) Add(name string) error {\n\treturn nil\n}\n\n// Remove stops watching the the named file or directory (non-recursively).\nfunc (w *Watcher) Remove(name string) error {\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/fsnotify.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 !plan9\n\n// Package fsnotify provides a platform-independent interface for file system notifications.\npackage fsnotify\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Event represents a single file system notification.\ntype Event struct {\n\tName string // Relative path to the file or directory.\n\tOp   Op     // File operation that triggered the event.\n}\n\n// Op describes a set of file operations.\ntype Op uint32\n\n// These are the generalized file operations that can trigger a notification.\nconst (\n\tCreate Op = 1 << iota\n\tWrite\n\tRemove\n\tRename\n\tChmod\n)\n\nfunc (op Op) String() string {\n\t// Use a buffer for efficient string concatenation\n\tvar buffer bytes.Buffer\n\n\tif op&Create == Create {\n\t\tbuffer.WriteString(\"|CREATE\")\n\t}\n\tif op&Remove == Remove {\n\t\tbuffer.WriteString(\"|REMOVE\")\n\t}\n\tif op&Write == Write {\n\t\tbuffer.WriteString(\"|WRITE\")\n\t}\n\tif op&Rename == Rename {\n\t\tbuffer.WriteString(\"|RENAME\")\n\t}\n\tif op&Chmod == Chmod {\n\t\tbuffer.WriteString(\"|CHMOD\")\n\t}\n\tif buffer.Len() == 0 {\n\t\treturn \"\"\n\t}\n\treturn buffer.String()[1:] // Strip leading pipe\n}\n\n// String returns a string representation of the event in the form\n// \"file: REMOVE|WRITE|...\"\nfunc (e Event) String() string {\n\treturn fmt.Sprintf(\"%q: %s\", e.Name, e.Op.String())\n}\n\n// Common errors that can be reported by a watcher\nvar ErrEventOverflow = errors.New(\"fsnotify queue overflow\")\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/inotify.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 linux\n\npackage fsnotify\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Watcher watches a set of files, delivering events to a channel.\ntype Watcher struct {\n\tEvents   chan Event\n\tErrors   chan error\n\tmu       sync.Mutex // Map access\n\tfd       int\n\tpoller   *fdPoller\n\twatches  map[string]*watch // Map of inotify watches (key: path)\n\tpaths    map[int]string    // Map of watched paths (key: watch descriptor)\n\tdone     chan struct{}     // Channel for sending a \"quit message\" to the reader goroutine\n\tdoneResp chan struct{}     // Channel to respond to Close\n}\n\n// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events.\nfunc NewWatcher() (*Watcher, error) {\n\t// Create inotify fd\n\tfd, errno := unix.InotifyInit1(unix.IN_CLOEXEC)\n\tif fd == -1 {\n\t\treturn nil, errno\n\t}\n\t// Create epoll\n\tpoller, err := newFdPoller(fd)\n\tif err != nil {\n\t\tunix.Close(fd)\n\t\treturn nil, err\n\t}\n\tw := &Watcher{\n\t\tfd:       fd,\n\t\tpoller:   poller,\n\t\twatches:  make(map[string]*watch),\n\t\tpaths:    make(map[int]string),\n\t\tEvents:   make(chan Event),\n\t\tErrors:   make(chan error),\n\t\tdone:     make(chan struct{}),\n\t\tdoneResp: make(chan struct{}),\n\t}\n\n\tgo w.readEvents()\n\treturn w, nil\n}\n\nfunc (w *Watcher) isClosed() bool {\n\tselect {\n\tcase <-w.done:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Close removes all watches and closes the events channel.\nfunc (w *Watcher) Close() error {\n\tif w.isClosed() {\n\t\treturn nil\n\t}\n\n\t// Send 'close' signal to goroutine, and set the Watcher to closed.\n\tclose(w.done)\n\n\t// Wake up goroutine\n\tw.poller.wake()\n\n\t// Wait for goroutine to close\n\t<-w.doneResp\n\n\treturn nil\n}\n\n// Add starts watching the named file or directory (non-recursively).\nfunc (w *Watcher) Add(name string) error {\n\tname = filepath.Clean(name)\n\tif w.isClosed() {\n\t\treturn errors.New(\"inotify instance already closed\")\n\t}\n\n\tconst agnosticEvents = unix.IN_MOVED_TO | unix.IN_MOVED_FROM |\n\t\tunix.IN_CREATE | unix.IN_ATTRIB | unix.IN_MODIFY |\n\t\tunix.IN_MOVE_SELF | unix.IN_DELETE | unix.IN_DELETE_SELF\n\n\tvar flags uint32 = agnosticEvents\n\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\twatchEntry := w.watches[name]\n\tif watchEntry != nil {\n\t\tflags |= watchEntry.flags | unix.IN_MASK_ADD\n\t}\n\twd, errno := unix.InotifyAddWatch(w.fd, name, flags)\n\tif wd == -1 {\n\t\treturn errno\n\t}\n\n\tif watchEntry == nil {\n\t\tw.watches[name] = &watch{wd: uint32(wd), flags: flags}\n\t\tw.paths[wd] = name\n\t} else {\n\t\twatchEntry.wd = uint32(wd)\n\t\twatchEntry.flags = flags\n\t}\n\n\treturn nil\n}\n\n// Remove stops watching the named file or directory (non-recursively).\nfunc (w *Watcher) Remove(name string) error {\n\tname = filepath.Clean(name)\n\n\t// Fetch the watch.\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\twatch, ok := w.watches[name]\n\n\t// Remove it from inotify.\n\tif !ok {\n\t\treturn fmt.Errorf(\"can't remove non-existent inotify watch for: %s\", name)\n\t}\n\n\t// We successfully removed the watch if InotifyRmWatch doesn't return an\n\t// error, we need to clean up our internal state to ensure it matches\n\t// inotify's kernel state.\n\tdelete(w.paths, int(watch.wd))\n\tdelete(w.watches, name)\n\n\t// inotify_rm_watch will return EINVAL if the file has been deleted;\n\t// the inotify will already have been removed.\n\t// watches and pathes are deleted in ignoreLinux() implicitly and asynchronously\n\t// by calling inotify_rm_watch() below. e.g. readEvents() goroutine receives IN_IGNORE\n\t// so that EINVAL means that the wd is being rm_watch()ed or its file removed\n\t// by another thread and we have not received IN_IGNORE event.\n\tsuccess, errno := unix.InotifyRmWatch(w.fd, watch.wd)\n\tif success == -1 {\n\t\t// TODO: Perhaps it's not helpful to return an error here in every case.\n\t\t// the only two possible errors are:\n\t\t// EBADF, which happens when w.fd is not a valid file descriptor of any kind.\n\t\t// EINVAL, which is when fd is not an inotify descriptor or wd is not a valid watch descriptor.\n\t\t// Watch descriptors are invalidated when they are removed explicitly or implicitly;\n\t\t// explicitly by inotify_rm_watch, implicitly when the file they are watching is deleted.\n\t\treturn errno\n\t}\n\n\treturn nil\n}\n\ntype watch struct {\n\twd    uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall)\n\tflags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags)\n}\n\n// readEvents reads from the inotify file descriptor, converts the\n// received events into Event objects and sends them via the Events channel\nfunc (w *Watcher) readEvents() {\n\tvar (\n\t\tbuf   [unix.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events\n\t\tn     int                                  // Number of bytes read with read()\n\t\terrno error                                // Syscall errno\n\t\tok    bool                                 // For poller.wait\n\t)\n\n\tdefer close(w.doneResp)\n\tdefer close(w.Errors)\n\tdefer close(w.Events)\n\tdefer unix.Close(w.fd)\n\tdefer w.poller.close()\n\n\tfor {\n\t\t// See if we have been closed.\n\t\tif w.isClosed() {\n\t\t\treturn\n\t\t}\n\n\t\tok, errno = w.poller.wait()\n\t\tif errno != nil {\n\t\t\tselect {\n\t\t\tcase w.Errors <- errno:\n\t\t\tcase <-w.done:\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tn, errno = unix.Read(w.fd, buf[:])\n\t\t// If a signal interrupted execution, see if we've been asked to close, and try again.\n\t\t// http://man7.org/linux/man-pages/man7/signal.7.html :\n\t\t// \"Before Linux 3.8, reads from an inotify(7) file descriptor were not restartable\"\n\t\tif errno == unix.EINTR {\n\t\t\tcontinue\n\t\t}\n\n\t\t// unix.Read might have been woken up by Close. If so, we're done.\n\t\tif w.isClosed() {\n\t\t\treturn\n\t\t}\n\n\t\tif n < unix.SizeofInotifyEvent {\n\t\t\tvar err error\n\t\t\tif n == 0 {\n\t\t\t\t// If EOF is received. This should really never happen.\n\t\t\t\terr = io.EOF\n\t\t\t} else if n < 0 {\n\t\t\t\t// If an error occurred while reading.\n\t\t\t\terr = errno\n\t\t\t} else {\n\t\t\t\t// Read was too short.\n\t\t\t\terr = errors.New(\"notify: short read in readEvents()\")\n\t\t\t}\n\t\t\tselect {\n\t\t\tcase w.Errors <- err:\n\t\t\tcase <-w.done:\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tvar offset uint32\n\t\t// We don't know how many events we just read into the buffer\n\t\t// While the offset points to at least one whole event...\n\t\tfor offset <= uint32(n-unix.SizeofInotifyEvent) {\n\t\t\t// Point \"raw\" to the event in the buffer\n\t\t\traw := (*unix.InotifyEvent)(unsafe.Pointer(&buf[offset]))\n\n\t\t\tmask := uint32(raw.Mask)\n\t\t\tnameLen := uint32(raw.Len)\n\n\t\t\tif mask&unix.IN_Q_OVERFLOW != 0 {\n\t\t\t\tselect {\n\t\t\t\tcase w.Errors <- ErrEventOverflow:\n\t\t\t\tcase <-w.done:\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the event happened to the watched directory or the watched file, the kernel\n\t\t\t// doesn't append the filename to the event, but we would like to always fill the\n\t\t\t// the \"Name\" field with a valid filename. We retrieve the path of the watch from\n\t\t\t// the \"paths\" map.\n\t\t\tw.mu.Lock()\n\t\t\tname, ok := w.paths[int(raw.Wd)]\n\t\t\t// IN_DELETE_SELF occurs when the file/directory being watched is removed.\n\t\t\t// This is a sign to clean up the maps, otherwise we are no longer in sync\n\t\t\t// with the inotify kernel state which has already deleted the watch\n\t\t\t// automatically.\n\t\t\tif ok && mask&unix.IN_DELETE_SELF == unix.IN_DELETE_SELF {\n\t\t\t\tdelete(w.paths, int(raw.Wd))\n\t\t\t\tdelete(w.watches, name)\n\t\t\t}\n\t\t\tw.mu.Unlock()\n\n\t\t\tif nameLen > 0 {\n\t\t\t\t// Point \"bytes\" at the first byte of the filename\n\t\t\t\tbytes := (*[unix.PathMax]byte)(unsafe.Pointer(&buf[offset+unix.SizeofInotifyEvent]))\n\t\t\t\t// The filename is padded with NULL bytes. TrimRight() gets rid of those.\n\t\t\t\tname += \"/\" + strings.TrimRight(string(bytes[0:nameLen]), \"\\000\")\n\t\t\t}\n\n\t\t\tevent := newEvent(name, mask)\n\n\t\t\t// Send the events that are not ignored on the events channel\n\t\t\tif !event.ignoreLinux(mask) {\n\t\t\t\tselect {\n\t\t\t\tcase w.Events <- event:\n\t\t\t\tcase <-w.done:\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Move to the next event in the buffer\n\t\t\toffset += unix.SizeofInotifyEvent + nameLen\n\t\t}\n\t}\n}\n\n// Certain types of events can be \"ignored\" and not sent over the Events\n// channel. Such as events marked ignore by the kernel, or MODIFY events\n// against files that do not exist.\nfunc (e *Event) ignoreLinux(mask uint32) bool {\n\t// Ignore anything the inotify API says to ignore\n\tif mask&unix.IN_IGNORED == unix.IN_IGNORED {\n\t\treturn true\n\t}\n\n\t// If the event is not a DELETE or RENAME, the file must exist.\n\t// Otherwise the event is ignored.\n\t// *Note*: this was put in place because it was seen that a MODIFY\n\t// event was sent after the DELETE. This ignores that MODIFY and\n\t// assumes a DELETE will come or has come if the file doesn't exist.\n\tif !(e.Op&Remove == Remove || e.Op&Rename == Rename) {\n\t\t_, statErr := os.Lstat(e.Name)\n\t\treturn os.IsNotExist(statErr)\n\t}\n\treturn false\n}\n\n// newEvent returns an platform-independent Event based on an inotify mask.\nfunc newEvent(name string, mask uint32) Event {\n\te := Event{Name: name}\n\tif mask&unix.IN_CREATE == unix.IN_CREATE || mask&unix.IN_MOVED_TO == unix.IN_MOVED_TO {\n\t\te.Op |= Create\n\t}\n\tif mask&unix.IN_DELETE_SELF == unix.IN_DELETE_SELF || mask&unix.IN_DELETE == unix.IN_DELETE {\n\t\te.Op |= Remove\n\t}\n\tif mask&unix.IN_MODIFY == unix.IN_MODIFY {\n\t\te.Op |= Write\n\t}\n\tif mask&unix.IN_MOVE_SELF == unix.IN_MOVE_SELF || mask&unix.IN_MOVED_FROM == unix.IN_MOVED_FROM {\n\t\te.Op |= Rename\n\t}\n\tif mask&unix.IN_ATTRIB == unix.IN_ATTRIB {\n\t\te.Op |= Chmod\n\t}\n\treturn e\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/inotify_poller.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\npackage fsnotify\n\nimport (\n\t\"errors\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype fdPoller struct {\n\tfd   int    // File descriptor (as returned by the inotify_init() syscall)\n\tepfd int    // Epoll file descriptor\n\tpipe [2]int // Pipe for waking up\n}\n\nfunc emptyPoller(fd int) *fdPoller {\n\tpoller := new(fdPoller)\n\tpoller.fd = fd\n\tpoller.epfd = -1\n\tpoller.pipe[0] = -1\n\tpoller.pipe[1] = -1\n\treturn poller\n}\n\n// Create a new inotify poller.\n// This creates an inotify handler, and an epoll handler.\nfunc newFdPoller(fd int) (*fdPoller, error) {\n\tvar errno error\n\tpoller := emptyPoller(fd)\n\tdefer func() {\n\t\tif errno != nil {\n\t\t\tpoller.close()\n\t\t}\n\t}()\n\tpoller.fd = fd\n\n\t// Create epoll fd\n\tpoller.epfd, errno = unix.EpollCreate1(0)\n\tif poller.epfd == -1 {\n\t\treturn nil, errno\n\t}\n\t// Create pipe; pipe[0] is the read end, pipe[1] the write end.\n\terrno = unix.Pipe2(poller.pipe[:], unix.O_NONBLOCK)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Register inotify fd with epoll\n\tevent := unix.EpollEvent{\n\t\tFd:     int32(poller.fd),\n\t\tEvents: unix.EPOLLIN,\n\t}\n\terrno = unix.EpollCtl(poller.epfd, unix.EPOLL_CTL_ADD, poller.fd, &event)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Register pipe fd with epoll\n\tevent = unix.EpollEvent{\n\t\tFd:     int32(poller.pipe[0]),\n\t\tEvents: unix.EPOLLIN,\n\t}\n\terrno = unix.EpollCtl(poller.epfd, unix.EPOLL_CTL_ADD, poller.pipe[0], &event)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\treturn poller, nil\n}\n\n// Wait using epoll.\n// Returns true if something is ready to be read,\n// false if there is not.\nfunc (poller *fdPoller) wait() (bool, error) {\n\t// 3 possible events per fd, and 2 fds, makes a maximum of 6 events.\n\t// I don't know whether epoll_wait returns the number of events returned,\n\t// or the total number of events ready.\n\t// I decided to catch both by making the buffer one larger than the maximum.\n\tevents := make([]unix.EpollEvent, 7)\n\tfor {\n\t\tn, errno := unix.EpollWait(poller.epfd, events, -1)\n\t\tif n == -1 {\n\t\t\tif errno == unix.EINTR {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn false, errno\n\t\t}\n\t\tif n == 0 {\n\t\t\t// If there are no events, try again.\n\t\t\tcontinue\n\t\t}\n\t\tif n > 6 {\n\t\t\t// This should never happen. More events were returned than should be possible.\n\t\t\treturn false, errors.New(\"epoll_wait returned more events than I know what to do with\")\n\t\t}\n\t\tready := events[:n]\n\t\tepollhup := false\n\t\tepollerr := false\n\t\tepollin := false\n\t\tfor _, event := range ready {\n\t\t\tif event.Fd == int32(poller.fd) {\n\t\t\t\tif event.Events&unix.EPOLLHUP != 0 {\n\t\t\t\t\t// This should not happen, but if it does, treat it as a wakeup.\n\t\t\t\t\tepollhup = true\n\t\t\t\t}\n\t\t\t\tif event.Events&unix.EPOLLERR != 0 {\n\t\t\t\t\t// If an error is waiting on the file descriptor, we should pretend\n\t\t\t\t\t// something is ready to read, and let unix.Read pick up the error.\n\t\t\t\t\tepollerr = true\n\t\t\t\t}\n\t\t\t\tif event.Events&unix.EPOLLIN != 0 {\n\t\t\t\t\t// There is data to read.\n\t\t\t\t\tepollin = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif event.Fd == int32(poller.pipe[0]) {\n\t\t\t\tif event.Events&unix.EPOLLHUP != 0 {\n\t\t\t\t\t// Write pipe descriptor was closed, by us. This means we're closing down the\n\t\t\t\t\t// watcher, and we should wake up.\n\t\t\t\t}\n\t\t\t\tif event.Events&unix.EPOLLERR != 0 {\n\t\t\t\t\t// If an error is waiting on the pipe file descriptor.\n\t\t\t\t\t// This is an absolute mystery, and should never ever happen.\n\t\t\t\t\treturn false, errors.New(\"Error on the pipe descriptor.\")\n\t\t\t\t}\n\t\t\t\tif event.Events&unix.EPOLLIN != 0 {\n\t\t\t\t\t// This is a regular wakeup, so we have to clear the buffer.\n\t\t\t\t\terr := poller.clearWake()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif epollhup || epollerr || epollin {\n\t\t\treturn true, nil\n\t\t}\n\t\treturn false, nil\n\t}\n}\n\n// Close the write end of the poller.\nfunc (poller *fdPoller) wake() error {\n\tbuf := make([]byte, 1)\n\tn, errno := unix.Write(poller.pipe[1], buf)\n\tif n == -1 {\n\t\tif errno == unix.EAGAIN {\n\t\t\t// Buffer is full, poller will wake.\n\t\t\treturn nil\n\t\t}\n\t\treturn errno\n\t}\n\treturn nil\n}\n\nfunc (poller *fdPoller) clearWake() error {\n\t// You have to be woken up a LOT in order to get to 100!\n\tbuf := make([]byte, 100)\n\tn, errno := unix.Read(poller.pipe[0], buf)\n\tif n == -1 {\n\t\tif errno == unix.EAGAIN {\n\t\t\t// Buffer is empty, someone else cleared our wake.\n\t\t\treturn nil\n\t\t}\n\t\treturn errno\n\t}\n\treturn nil\n}\n\n// Close all poller file descriptors, but not the one passed to it.\nfunc (poller *fdPoller) close() {\n\tif poller.pipe[1] != -1 {\n\t\tunix.Close(poller.pipe[1])\n\t}\n\tif poller.pipe[0] != -1 {\n\t\tunix.Close(poller.pipe[0])\n\t}\n\tif poller.epfd != -1 {\n\t\tunix.Close(poller.epfd)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/kqueue.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 freebsd openbsd netbsd dragonfly darwin\n\npackage fsnotify\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Watcher watches a set of files, delivering events to a channel.\ntype Watcher struct {\n\tEvents chan Event\n\tErrors chan error\n\tdone   chan bool // Channel for sending a \"quit message\" to the reader goroutine\n\n\tkq int // File descriptor (as returned by the kqueue() syscall).\n\n\tmu              sync.Mutex        // Protects access to watcher data\n\twatches         map[string]int    // Map of watched file descriptors (key: path).\n\texternalWatches map[string]bool   // Map of watches added by user of the library.\n\tdirFlags        map[string]uint32 // Map of watched directories to fflags used in kqueue.\n\tpaths           map[int]pathInfo  // Map file descriptors to path names for processing kqueue events.\n\tfileExists      map[string]bool   // Keep track of if we know this file exists (to stop duplicate create events).\n\tisClosed        bool              // Set to true when Close() is first called\n}\n\ntype pathInfo struct {\n\tname  string\n\tisDir bool\n}\n\n// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events.\nfunc NewWatcher() (*Watcher, error) {\n\tkq, err := kqueue()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tw := &Watcher{\n\t\tkq:              kq,\n\t\twatches:         make(map[string]int),\n\t\tdirFlags:        make(map[string]uint32),\n\t\tpaths:           make(map[int]pathInfo),\n\t\tfileExists:      make(map[string]bool),\n\t\texternalWatches: make(map[string]bool),\n\t\tEvents:          make(chan Event),\n\t\tErrors:          make(chan error),\n\t\tdone:            make(chan bool),\n\t}\n\n\tgo w.readEvents()\n\treturn w, nil\n}\n\n// Close removes all watches and closes the events channel.\nfunc (w *Watcher) Close() error {\n\tw.mu.Lock()\n\tif w.isClosed {\n\t\tw.mu.Unlock()\n\t\treturn nil\n\t}\n\tw.isClosed = true\n\tw.mu.Unlock()\n\n\t// copy paths to remove while locked\n\tw.mu.Lock()\n\tvar pathsToRemove = make([]string, 0, len(w.watches))\n\tfor name := range w.watches {\n\t\tpathsToRemove = append(pathsToRemove, name)\n\t}\n\tw.mu.Unlock()\n\t// unlock before calling Remove, which also locks\n\n\tvar err error\n\tfor _, name := range pathsToRemove {\n\t\tif e := w.Remove(name); e != nil && err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\t// Send \"quit\" message to the reader goroutine:\n\tw.done <- true\n\n\treturn nil\n}\n\n// Add starts watching the named file or directory (non-recursively).\nfunc (w *Watcher) Add(name string) error {\n\tw.mu.Lock()\n\tw.externalWatches[name] = true\n\tw.mu.Unlock()\n\t_, err := w.addWatch(name, noteAllEvents)\n\treturn err\n}\n\n// Remove stops watching the the named file or directory (non-recursively).\nfunc (w *Watcher) Remove(name string) error {\n\tname = filepath.Clean(name)\n\tw.mu.Lock()\n\twatchfd, ok := w.watches[name]\n\tw.mu.Unlock()\n\tif !ok {\n\t\treturn fmt.Errorf(\"can't remove non-existent kevent watch for: %s\", name)\n\t}\n\n\tconst registerRemove = unix.EV_DELETE\n\tif err := register(w.kq, []int{watchfd}, registerRemove, 0); err != nil {\n\t\treturn err\n\t}\n\n\tunix.Close(watchfd)\n\n\tw.mu.Lock()\n\tisDir := w.paths[watchfd].isDir\n\tdelete(w.watches, name)\n\tdelete(w.paths, watchfd)\n\tdelete(w.dirFlags, name)\n\tw.mu.Unlock()\n\n\t// Find all watched paths that are in this directory that are not external.\n\tif isDir {\n\t\tvar pathsToRemove []string\n\t\tw.mu.Lock()\n\t\tfor _, path := range w.paths {\n\t\t\twdir, _ := filepath.Split(path.name)\n\t\t\tif filepath.Clean(wdir) == name {\n\t\t\t\tif !w.externalWatches[path.name] {\n\t\t\t\t\tpathsToRemove = append(pathsToRemove, path.name)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tw.mu.Unlock()\n\t\tfor _, name := range pathsToRemove {\n\t\t\t// Since these are internal, not much sense in propagating error\n\t\t\t// to the user, as that will just confuse them with an error about\n\t\t\t// a path they did not explicitly watch themselves.\n\t\t\tw.Remove(name)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Watch all events (except NOTE_EXTEND, NOTE_LINK, NOTE_REVOKE)\nconst noteAllEvents = unix.NOTE_DELETE | unix.NOTE_WRITE | unix.NOTE_ATTRIB | unix.NOTE_RENAME\n\n// keventWaitTime to block on each read from kevent\nvar keventWaitTime = durationToTimespec(100 * time.Millisecond)\n\n// addWatch adds name to the watched file set.\n// The flags are interpreted as described in kevent(2).\n// Returns the real path to the file which was added, if any, which may be different from the one passed in the case of symlinks.\nfunc (w *Watcher) addWatch(name string, flags uint32) (string, error) {\n\tvar isDir bool\n\t// Make ./name and name equivalent\n\tname = filepath.Clean(name)\n\n\tw.mu.Lock()\n\tif w.isClosed {\n\t\tw.mu.Unlock()\n\t\treturn \"\", errors.New(\"kevent instance already closed\")\n\t}\n\twatchfd, alreadyWatching := w.watches[name]\n\t// We already have a watch, but we can still override flags.\n\tif alreadyWatching {\n\t\tisDir = w.paths[watchfd].isDir\n\t}\n\tw.mu.Unlock()\n\n\tif !alreadyWatching {\n\t\tfi, err := os.Lstat(name)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\t// Don't watch sockets.\n\t\tif fi.Mode()&os.ModeSocket == os.ModeSocket {\n\t\t\treturn \"\", nil\n\t\t}\n\n\t\t// Don't watch named pipes.\n\t\tif fi.Mode()&os.ModeNamedPipe == os.ModeNamedPipe {\n\t\t\treturn \"\", nil\n\t\t}\n\n\t\t// Follow Symlinks\n\t\t// Unfortunately, Linux can add bogus symlinks to watch list without\n\t\t// issue, and Windows can't do symlinks period (AFAIK). To  maintain\n\t\t// consistency, we will act like everything is fine. There will simply\n\t\t// be no file events for broken symlinks.\n\t\t// Hence the returns of nil on errors.\n\t\tif fi.Mode()&os.ModeSymlink == os.ModeSymlink {\n\t\t\tname, err = filepath.EvalSymlinks(name)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", nil\n\t\t\t}\n\n\t\t\tw.mu.Lock()\n\t\t\t_, alreadyWatching = w.watches[name]\n\t\t\tw.mu.Unlock()\n\n\t\t\tif alreadyWatching {\n\t\t\t\treturn name, nil\n\t\t\t}\n\n\t\t\tfi, err = os.Lstat(name)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", nil\n\t\t\t}\n\t\t}\n\n\t\twatchfd, err = unix.Open(name, openMode, 0700)\n\t\tif watchfd == -1 {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tisDir = fi.IsDir()\n\t}\n\n\tconst registerAdd = unix.EV_ADD | unix.EV_CLEAR | unix.EV_ENABLE\n\tif err := register(w.kq, []int{watchfd}, registerAdd, flags); err != nil {\n\t\tunix.Close(watchfd)\n\t\treturn \"\", err\n\t}\n\n\tif !alreadyWatching {\n\t\tw.mu.Lock()\n\t\tw.watches[name] = watchfd\n\t\tw.paths[watchfd] = pathInfo{name: name, isDir: isDir}\n\t\tw.mu.Unlock()\n\t}\n\n\tif isDir {\n\t\t// Watch the directory if it has not been watched before,\n\t\t// or if it was watched before, but perhaps only a NOTE_DELETE (watchDirectoryFiles)\n\t\tw.mu.Lock()\n\n\t\twatchDir := (flags&unix.NOTE_WRITE) == unix.NOTE_WRITE &&\n\t\t\t(!alreadyWatching || (w.dirFlags[name]&unix.NOTE_WRITE) != unix.NOTE_WRITE)\n\t\t// Store flags so this watch can be updated later\n\t\tw.dirFlags[name] = flags\n\t\tw.mu.Unlock()\n\n\t\tif watchDir {\n\t\t\tif err := w.watchDirectoryFiles(name); err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t}\n\t}\n\treturn name, nil\n}\n\n// readEvents reads from kqueue and converts the received kevents into\n// Event values that it sends down the Events channel.\nfunc (w *Watcher) readEvents() {\n\teventBuffer := make([]unix.Kevent_t, 10)\n\n\tfor {\n\t\t// See if there is a message on the \"done\" channel\n\t\tselect {\n\t\tcase <-w.done:\n\t\t\terr := unix.Close(w.kq)\n\t\t\tif err != nil {\n\t\t\t\tw.Errors <- err\n\t\t\t}\n\t\t\tclose(w.Events)\n\t\t\tclose(w.Errors)\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\n\t\t// Get new events\n\t\tkevents, err := read(w.kq, eventBuffer, &keventWaitTime)\n\t\t// EINTR is okay, the syscall was interrupted before timeout expired.\n\t\tif err != nil && err != unix.EINTR {\n\t\t\tw.Errors <- err\n\t\t\tcontinue\n\t\t}\n\n\t\t// Flush the events we received to the Events channel\n\t\tfor len(kevents) > 0 {\n\t\t\tkevent := &kevents[0]\n\t\t\twatchfd := int(kevent.Ident)\n\t\t\tmask := uint32(kevent.Fflags)\n\t\t\tw.mu.Lock()\n\t\t\tpath := w.paths[watchfd]\n\t\t\tw.mu.Unlock()\n\t\t\tevent := newEvent(path.name, mask)\n\n\t\t\tif path.isDir && !(event.Op&Remove == Remove) {\n\t\t\t\t// Double check to make sure the directory exists. This can happen when\n\t\t\t\t// we do a rm -fr on a recursively watched folders and we receive a\n\t\t\t\t// modification event first but the folder has been deleted and later\n\t\t\t\t// receive the delete event\n\t\t\t\tif _, err := os.Lstat(event.Name); os.IsNotExist(err) {\n\t\t\t\t\t// mark is as delete event\n\t\t\t\t\tevent.Op |= Remove\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif event.Op&Rename == Rename || event.Op&Remove == Remove {\n\t\t\t\tw.Remove(event.Name)\n\t\t\t\tw.mu.Lock()\n\t\t\t\tdelete(w.fileExists, event.Name)\n\t\t\t\tw.mu.Unlock()\n\t\t\t}\n\n\t\t\tif path.isDir && event.Op&Write == Write && !(event.Op&Remove == Remove) {\n\t\t\t\tw.sendDirectoryChangeEvents(event.Name)\n\t\t\t} else {\n\t\t\t\t// Send the event on the Events channel\n\t\t\t\tw.Events <- event\n\t\t\t}\n\n\t\t\tif event.Op&Remove == Remove {\n\t\t\t\t// Look for a file that may have overwritten this.\n\t\t\t\t// For example, mv f1 f2 will delete f2, then create f2.\n\t\t\t\tif path.isDir {\n\t\t\t\t\tfileDir := filepath.Clean(event.Name)\n\t\t\t\t\tw.mu.Lock()\n\t\t\t\t\t_, found := w.watches[fileDir]\n\t\t\t\t\tw.mu.Unlock()\n\t\t\t\t\tif found {\n\t\t\t\t\t\t// make sure the directory exists before we watch for changes. When we\n\t\t\t\t\t\t// do a recursive watch and perform rm -fr, the parent directory might\n\t\t\t\t\t\t// have gone missing, ignore the missing directory and let the\n\t\t\t\t\t\t// upcoming delete event remove the watch from the parent directory.\n\t\t\t\t\t\tif _, err := os.Lstat(fileDir); err == nil {\n\t\t\t\t\t\t\tw.sendDirectoryChangeEvents(fileDir)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfilePath := filepath.Clean(event.Name)\n\t\t\t\t\tif fileInfo, err := os.Lstat(filePath); err == nil {\n\t\t\t\t\t\tw.sendFileCreatedEventIfNew(filePath, fileInfo)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Move to next event\n\t\t\tkevents = kevents[1:]\n\t\t}\n\t}\n}\n\n// newEvent returns an platform-independent Event based on kqueue Fflags.\nfunc newEvent(name string, mask uint32) Event {\n\te := Event{Name: name}\n\tif mask&unix.NOTE_DELETE == unix.NOTE_DELETE {\n\t\te.Op |= Remove\n\t}\n\tif mask&unix.NOTE_WRITE == unix.NOTE_WRITE {\n\t\te.Op |= Write\n\t}\n\tif mask&unix.NOTE_RENAME == unix.NOTE_RENAME {\n\t\te.Op |= Rename\n\t}\n\tif mask&unix.NOTE_ATTRIB == unix.NOTE_ATTRIB {\n\t\te.Op |= Chmod\n\t}\n\treturn e\n}\n\nfunc newCreateEvent(name string) Event {\n\treturn Event{Name: name, Op: Create}\n}\n\n// watchDirectoryFiles to mimic inotify when adding a watch on a directory\nfunc (w *Watcher) watchDirectoryFiles(dirPath string) error {\n\t// Get all files\n\tfiles, err := ioutil.ReadDir(dirPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, fileInfo := range files {\n\t\tfilePath := filepath.Join(dirPath, fileInfo.Name())\n\t\tfilePath, err = w.internalWatch(filePath, fileInfo)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tw.mu.Lock()\n\t\tw.fileExists[filePath] = true\n\t\tw.mu.Unlock()\n\t}\n\n\treturn nil\n}\n\n// sendDirectoryEvents searches the directory for newly created files\n// and sends them over the event channel. This functionality is to have\n// the BSD version of fsnotify match Linux inotify which provides a\n// create event for files created in a watched directory.\nfunc (w *Watcher) sendDirectoryChangeEvents(dirPath string) {\n\t// Get all files\n\tfiles, err := ioutil.ReadDir(dirPath)\n\tif err != nil {\n\t\tw.Errors <- err\n\t}\n\n\t// Search for new files\n\tfor _, fileInfo := range files {\n\t\tfilePath := filepath.Join(dirPath, fileInfo.Name())\n\t\terr := w.sendFileCreatedEventIfNew(filePath, fileInfo)\n\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// sendFileCreatedEvent sends a create event if the file isn't already being tracked.\nfunc (w *Watcher) sendFileCreatedEventIfNew(filePath string, fileInfo os.FileInfo) (err error) {\n\tw.mu.Lock()\n\t_, doesExist := w.fileExists[filePath]\n\tw.mu.Unlock()\n\tif !doesExist {\n\t\t// Send create event\n\t\tw.Events <- newCreateEvent(filePath)\n\t}\n\n\t// like watchDirectoryFiles (but without doing another ReadDir)\n\tfilePath, err = w.internalWatch(filePath, fileInfo)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tw.mu.Lock()\n\tw.fileExists[filePath] = true\n\tw.mu.Unlock()\n\n\treturn nil\n}\n\nfunc (w *Watcher) internalWatch(name string, fileInfo os.FileInfo) (string, error) {\n\tif fileInfo.IsDir() {\n\t\t// mimic Linux providing delete events for subdirectories\n\t\t// but preserve the flags used if currently watching subdirectory\n\t\tw.mu.Lock()\n\t\tflags := w.dirFlags[name]\n\t\tw.mu.Unlock()\n\n\t\tflags |= unix.NOTE_DELETE | unix.NOTE_RENAME\n\t\treturn w.addWatch(name, flags)\n\t}\n\n\t// watch file to mimic Linux inotify\n\treturn w.addWatch(name, noteAllEvents)\n}\n\n// kqueue creates a new kernel event queue and returns a descriptor.\nfunc kqueue() (kq int, err error) {\n\tkq, err = unix.Kqueue()\n\tif kq == -1 {\n\t\treturn kq, err\n\t}\n\treturn kq, nil\n}\n\n// register events with the queue\nfunc register(kq int, fds []int, flags int, fflags uint32) error {\n\tchanges := make([]unix.Kevent_t, len(fds))\n\n\tfor i, fd := range fds {\n\t\t// SetKevent converts int to the platform-specific types:\n\t\tunix.SetKevent(&changes[i], fd, unix.EVFILT_VNODE, flags)\n\t\tchanges[i].Fflags = fflags\n\t}\n\n\t// register the events\n\tsuccess, err := unix.Kevent(kq, changes, nil, nil)\n\tif success == -1 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// read retrieves pending events, or waits until an event occurs.\n// A timeout of nil blocks indefinitely, while 0 polls the queue.\nfunc read(kq int, events []unix.Kevent_t, timeout *unix.Timespec) ([]unix.Kevent_t, error) {\n\tn, err := unix.Kevent(kq, nil, events, timeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn events[0:n], nil\n}\n\n// durationToTimespec prepares a timeout value\nfunc durationToTimespec(d time.Duration) unix.Timespec {\n\treturn unix.NsecToTimespec(d.Nanoseconds())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/open_mode_bsd.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 freebsd openbsd netbsd dragonfly\n\npackage fsnotify\n\nimport \"golang.org/x/sys/unix\"\n\nconst openMode = unix.O_NONBLOCK | unix.O_RDONLY\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/open_mode_darwin.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 darwin\n\npackage fsnotify\n\nimport \"golang.org/x/sys/unix\"\n\n// note: this constant is not defined on BSD\nconst openMode = unix.O_EVTONLY\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/fsnotify/fsnotify/windows.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 windows\n\npackage fsnotify\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Watcher watches a set of files, delivering events to a channel.\ntype Watcher struct {\n\tEvents   chan Event\n\tErrors   chan error\n\tisClosed bool           // Set to true when Close() is first called\n\tmu       sync.Mutex     // Map access\n\tport     syscall.Handle // Handle to completion port\n\twatches  watchMap       // Map of watches (key: i-number)\n\tinput    chan *input    // Inputs to the reader are sent on this channel\n\tquit     chan chan<- error\n}\n\n// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events.\nfunc NewWatcher() (*Watcher, error) {\n\tport, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0)\n\tif e != nil {\n\t\treturn nil, os.NewSyscallError(\"CreateIoCompletionPort\", e)\n\t}\n\tw := &Watcher{\n\t\tport:    port,\n\t\twatches: make(watchMap),\n\t\tinput:   make(chan *input, 1),\n\t\tEvents:  make(chan Event, 50),\n\t\tErrors:  make(chan error),\n\t\tquit:    make(chan chan<- error, 1),\n\t}\n\tgo w.readEvents()\n\treturn w, nil\n}\n\n// Close removes all watches and closes the events channel.\nfunc (w *Watcher) Close() error {\n\tif w.isClosed {\n\t\treturn nil\n\t}\n\tw.isClosed = true\n\n\t// Send \"quit\" message to the reader goroutine\n\tch := make(chan error)\n\tw.quit <- ch\n\tif err := w.wakeupReader(); err != nil {\n\t\treturn err\n\t}\n\treturn <-ch\n}\n\n// Add starts watching the named file or directory (non-recursively).\nfunc (w *Watcher) Add(name string) error {\n\tif w.isClosed {\n\t\treturn errors.New(\"watcher already closed\")\n\t}\n\tin := &input{\n\t\top:    opAddWatch,\n\t\tpath:  filepath.Clean(name),\n\t\tflags: sysFSALLEVENTS,\n\t\treply: make(chan error),\n\t}\n\tw.input <- in\n\tif err := w.wakeupReader(); err != nil {\n\t\treturn err\n\t}\n\treturn <-in.reply\n}\n\n// Remove stops watching the the named file or directory (non-recursively).\nfunc (w *Watcher) Remove(name string) error {\n\tin := &input{\n\t\top:    opRemoveWatch,\n\t\tpath:  filepath.Clean(name),\n\t\treply: make(chan error),\n\t}\n\tw.input <- in\n\tif err := w.wakeupReader(); err != nil {\n\t\treturn err\n\t}\n\treturn <-in.reply\n}\n\nconst (\n\t// Options for AddWatch\n\tsysFSONESHOT = 0x80000000\n\tsysFSONLYDIR = 0x1000000\n\n\t// Events\n\tsysFSACCESS     = 0x1\n\tsysFSALLEVENTS  = 0xfff\n\tsysFSATTRIB     = 0x4\n\tsysFSCLOSE      = 0x18\n\tsysFSCREATE     = 0x100\n\tsysFSDELETE     = 0x200\n\tsysFSDELETESELF = 0x400\n\tsysFSMODIFY     = 0x2\n\tsysFSMOVE       = 0xc0\n\tsysFSMOVEDFROM  = 0x40\n\tsysFSMOVEDTO    = 0x80\n\tsysFSMOVESELF   = 0x800\n\n\t// Special events\n\tsysFSIGNORED   = 0x8000\n\tsysFSQOVERFLOW = 0x4000\n)\n\nfunc newEvent(name string, mask uint32) Event {\n\te := Event{Name: name}\n\tif mask&sysFSCREATE == sysFSCREATE || mask&sysFSMOVEDTO == sysFSMOVEDTO {\n\t\te.Op |= Create\n\t}\n\tif mask&sysFSDELETE == sysFSDELETE || mask&sysFSDELETESELF == sysFSDELETESELF {\n\t\te.Op |= Remove\n\t}\n\tif mask&sysFSMODIFY == sysFSMODIFY {\n\t\te.Op |= Write\n\t}\n\tif mask&sysFSMOVE == sysFSMOVE || mask&sysFSMOVESELF == sysFSMOVESELF || mask&sysFSMOVEDFROM == sysFSMOVEDFROM {\n\t\te.Op |= Rename\n\t}\n\tif mask&sysFSATTRIB == sysFSATTRIB {\n\t\te.Op |= Chmod\n\t}\n\treturn e\n}\n\nconst (\n\topAddWatch = iota\n\topRemoveWatch\n)\n\nconst (\n\tprovisional uint64 = 1 << (32 + iota)\n)\n\ntype input struct {\n\top    int\n\tpath  string\n\tflags uint32\n\treply chan error\n}\n\ntype inode struct {\n\thandle syscall.Handle\n\tvolume uint32\n\tindex  uint64\n}\n\ntype watch struct {\n\tov     syscall.Overlapped\n\tino    *inode            // i-number\n\tpath   string            // Directory path\n\tmask   uint64            // Directory itself is being watched with these notify flags\n\tnames  map[string]uint64 // Map of names being watched and their notify flags\n\trename string            // Remembers the old name while renaming a file\n\tbuf    [4096]byte\n}\n\ntype indexMap map[uint64]*watch\ntype watchMap map[uint32]indexMap\n\nfunc (w *Watcher) wakeupReader() error {\n\te := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil)\n\tif e != nil {\n\t\treturn os.NewSyscallError(\"PostQueuedCompletionStatus\", e)\n\t}\n\treturn nil\n}\n\nfunc getDir(pathname string) (dir string, err error) {\n\tattr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname))\n\tif e != nil {\n\t\treturn \"\", os.NewSyscallError(\"GetFileAttributes\", e)\n\t}\n\tif attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 {\n\t\tdir = pathname\n\t} else {\n\t\tdir, _ = filepath.Split(pathname)\n\t\tdir = filepath.Clean(dir)\n\t}\n\treturn\n}\n\nfunc getIno(path string) (ino *inode, err error) {\n\th, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path),\n\t\tsyscall.FILE_LIST_DIRECTORY,\n\t\tsyscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,\n\t\tnil, syscall.OPEN_EXISTING,\n\t\tsyscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0)\n\tif e != nil {\n\t\treturn nil, os.NewSyscallError(\"CreateFile\", e)\n\t}\n\tvar fi syscall.ByHandleFileInformation\n\tif e = syscall.GetFileInformationByHandle(h, &fi); e != nil {\n\t\tsyscall.CloseHandle(h)\n\t\treturn nil, os.NewSyscallError(\"GetFileInformationByHandle\", e)\n\t}\n\tino = &inode{\n\t\thandle: h,\n\t\tvolume: fi.VolumeSerialNumber,\n\t\tindex:  uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow),\n\t}\n\treturn ino, nil\n}\n\n// Must run within the I/O thread.\nfunc (m watchMap) get(ino *inode) *watch {\n\tif i := m[ino.volume]; i != nil {\n\t\treturn i[ino.index]\n\t}\n\treturn nil\n}\n\n// Must run within the I/O thread.\nfunc (m watchMap) set(ino *inode, watch *watch) {\n\ti := m[ino.volume]\n\tif i == nil {\n\t\ti = make(indexMap)\n\t\tm[ino.volume] = i\n\t}\n\ti[ino.index] = watch\n}\n\n// Must run within the I/O thread.\nfunc (w *Watcher) addWatch(pathname string, flags uint64) error {\n\tdir, err := getDir(pathname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif flags&sysFSONLYDIR != 0 && pathname != dir {\n\t\treturn nil\n\t}\n\tino, err := getIno(dir)\n\tif err != nil {\n\t\treturn err\n\t}\n\tw.mu.Lock()\n\twatchEntry := w.watches.get(ino)\n\tw.mu.Unlock()\n\tif watchEntry == nil {\n\t\tif _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil {\n\t\t\tsyscall.CloseHandle(ino.handle)\n\t\t\treturn os.NewSyscallError(\"CreateIoCompletionPort\", e)\n\t\t}\n\t\twatchEntry = &watch{\n\t\t\tino:   ino,\n\t\t\tpath:  dir,\n\t\t\tnames: make(map[string]uint64),\n\t\t}\n\t\tw.mu.Lock()\n\t\tw.watches.set(ino, watchEntry)\n\t\tw.mu.Unlock()\n\t\tflags |= provisional\n\t} else {\n\t\tsyscall.CloseHandle(ino.handle)\n\t}\n\tif pathname == dir {\n\t\twatchEntry.mask |= flags\n\t} else {\n\t\twatchEntry.names[filepath.Base(pathname)] |= flags\n\t}\n\tif err = w.startRead(watchEntry); err != nil {\n\t\treturn err\n\t}\n\tif pathname == dir {\n\t\twatchEntry.mask &= ^provisional\n\t} else {\n\t\twatchEntry.names[filepath.Base(pathname)] &= ^provisional\n\t}\n\treturn nil\n}\n\n// Must run within the I/O thread.\nfunc (w *Watcher) remWatch(pathname string) error {\n\tdir, err := getDir(pathname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tino, err := getIno(dir)\n\tif err != nil {\n\t\treturn err\n\t}\n\tw.mu.Lock()\n\twatch := w.watches.get(ino)\n\tw.mu.Unlock()\n\tif watch == nil {\n\t\treturn fmt.Errorf(\"can't remove non-existent watch for: %s\", pathname)\n\t}\n\tif pathname == dir {\n\t\tw.sendEvent(watch.path, watch.mask&sysFSIGNORED)\n\t\twatch.mask = 0\n\t} else {\n\t\tname := filepath.Base(pathname)\n\t\tw.sendEvent(filepath.Join(watch.path, name), watch.names[name]&sysFSIGNORED)\n\t\tdelete(watch.names, name)\n\t}\n\treturn w.startRead(watch)\n}\n\n// Must run within the I/O thread.\nfunc (w *Watcher) deleteWatch(watch *watch) {\n\tfor name, mask := range watch.names {\n\t\tif mask&provisional == 0 {\n\t\t\tw.sendEvent(filepath.Join(watch.path, name), mask&sysFSIGNORED)\n\t\t}\n\t\tdelete(watch.names, name)\n\t}\n\tif watch.mask != 0 {\n\t\tif watch.mask&provisional == 0 {\n\t\t\tw.sendEvent(watch.path, watch.mask&sysFSIGNORED)\n\t\t}\n\t\twatch.mask = 0\n\t}\n}\n\n// Must run within the I/O thread.\nfunc (w *Watcher) startRead(watch *watch) error {\n\tif e := syscall.CancelIo(watch.ino.handle); e != nil {\n\t\tw.Errors <- os.NewSyscallError(\"CancelIo\", e)\n\t\tw.deleteWatch(watch)\n\t}\n\tmask := toWindowsFlags(watch.mask)\n\tfor _, m := range watch.names {\n\t\tmask |= toWindowsFlags(m)\n\t}\n\tif mask == 0 {\n\t\tif e := syscall.CloseHandle(watch.ino.handle); e != nil {\n\t\t\tw.Errors <- os.NewSyscallError(\"CloseHandle\", e)\n\t\t}\n\t\tw.mu.Lock()\n\t\tdelete(w.watches[watch.ino.volume], watch.ino.index)\n\t\tw.mu.Unlock()\n\t\treturn nil\n\t}\n\te := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0],\n\t\tuint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0)\n\tif e != nil {\n\t\terr := os.NewSyscallError(\"ReadDirectoryChanges\", e)\n\t\tif e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 {\n\t\t\t// Watched directory was probably removed\n\t\t\tif w.sendEvent(watch.path, watch.mask&sysFSDELETESELF) {\n\t\t\t\tif watch.mask&sysFSONESHOT != 0 {\n\t\t\t\t\twatch.mask = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = nil\n\t\t}\n\t\tw.deleteWatch(watch)\n\t\tw.startRead(watch)\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// readEvents reads from the I/O completion port, converts the\n// received events into Event objects and sends them via the Events channel.\n// Entry point to the I/O thread.\nfunc (w *Watcher) readEvents() {\n\tvar (\n\t\tn, key uint32\n\t\tov     *syscall.Overlapped\n\t)\n\truntime.LockOSThread()\n\n\tfor {\n\t\te := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE)\n\t\twatch := (*watch)(unsafe.Pointer(ov))\n\n\t\tif watch == nil {\n\t\t\tselect {\n\t\t\tcase ch := <-w.quit:\n\t\t\t\tw.mu.Lock()\n\t\t\t\tvar indexes []indexMap\n\t\t\t\tfor _, index := range w.watches {\n\t\t\t\t\tindexes = append(indexes, index)\n\t\t\t\t}\n\t\t\t\tw.mu.Unlock()\n\t\t\t\tfor _, index := range indexes {\n\t\t\t\t\tfor _, watch := range index {\n\t\t\t\t\t\tw.deleteWatch(watch)\n\t\t\t\t\t\tw.startRead(watch)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar err error\n\t\t\t\tif e := syscall.CloseHandle(w.port); e != nil {\n\t\t\t\t\terr = os.NewSyscallError(\"CloseHandle\", e)\n\t\t\t\t}\n\t\t\t\tclose(w.Events)\n\t\t\t\tclose(w.Errors)\n\t\t\t\tch <- err\n\t\t\t\treturn\n\t\t\tcase in := <-w.input:\n\t\t\t\tswitch in.op {\n\t\t\t\tcase opAddWatch:\n\t\t\t\t\tin.reply <- w.addWatch(in.path, uint64(in.flags))\n\t\t\t\tcase opRemoveWatch:\n\t\t\t\t\tin.reply <- w.remWatch(in.path)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch e {\n\t\tcase syscall.ERROR_MORE_DATA:\n\t\t\tif watch == nil {\n\t\t\t\tw.Errors <- errors.New(\"ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer\")\n\t\t\t} else {\n\t\t\t\t// The i/o succeeded but the buffer is full.\n\t\t\t\t// In theory we should be building up a full packet.\n\t\t\t\t// In practice we can get away with just carrying on.\n\t\t\t\tn = uint32(unsafe.Sizeof(watch.buf))\n\t\t\t}\n\t\tcase syscall.ERROR_ACCESS_DENIED:\n\t\t\t// Watched directory was probably removed\n\t\t\tw.sendEvent(watch.path, watch.mask&sysFSDELETESELF)\n\t\t\tw.deleteWatch(watch)\n\t\t\tw.startRead(watch)\n\t\t\tcontinue\n\t\tcase syscall.ERROR_OPERATION_ABORTED:\n\t\t\t// CancelIo was called on this handle\n\t\t\tcontinue\n\t\tdefault:\n\t\t\tw.Errors <- os.NewSyscallError(\"GetQueuedCompletionPort\", e)\n\t\t\tcontinue\n\t\tcase nil:\n\t\t}\n\n\t\tvar offset uint32\n\t\tfor {\n\t\t\tif n == 0 {\n\t\t\t\tw.Events <- newEvent(\"\", sysFSQOVERFLOW)\n\t\t\t\tw.Errors <- errors.New(\"short read in readEvents()\")\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Point \"raw\" to the event in the buffer\n\t\t\traw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset]))\n\t\t\tbuf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName))\n\t\t\tname := syscall.UTF16ToString(buf[:raw.FileNameLength/2])\n\t\t\tfullname := filepath.Join(watch.path, name)\n\n\t\t\tvar mask uint64\n\t\t\tswitch raw.Action {\n\t\t\tcase syscall.FILE_ACTION_REMOVED:\n\t\t\t\tmask = sysFSDELETESELF\n\t\t\tcase syscall.FILE_ACTION_MODIFIED:\n\t\t\t\tmask = sysFSMODIFY\n\t\t\tcase syscall.FILE_ACTION_RENAMED_OLD_NAME:\n\t\t\t\twatch.rename = name\n\t\t\tcase syscall.FILE_ACTION_RENAMED_NEW_NAME:\n\t\t\t\tif watch.names[watch.rename] != 0 {\n\t\t\t\t\twatch.names[name] |= watch.names[watch.rename]\n\t\t\t\t\tdelete(watch.names, watch.rename)\n\t\t\t\t\tmask = sysFSMOVESELF\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsendNameEvent := func() {\n\t\t\t\tif w.sendEvent(fullname, watch.names[name]&mask) {\n\t\t\t\t\tif watch.names[name]&sysFSONESHOT != 0 {\n\t\t\t\t\t\tdelete(watch.names, name)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME {\n\t\t\t\tsendNameEvent()\n\t\t\t}\n\t\t\tif raw.Action == syscall.FILE_ACTION_REMOVED {\n\t\t\t\tw.sendEvent(fullname, watch.names[name]&sysFSIGNORED)\n\t\t\t\tdelete(watch.names, name)\n\t\t\t}\n\t\t\tif w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) {\n\t\t\t\tif watch.mask&sysFSONESHOT != 0 {\n\t\t\t\t\twatch.mask = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tif raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME {\n\t\t\t\tfullname = filepath.Join(watch.path, watch.rename)\n\t\t\t\tsendNameEvent()\n\t\t\t}\n\n\t\t\t// Move to the next event in the buffer\n\t\t\tif raw.NextEntryOffset == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\toffset += raw.NextEntryOffset\n\n\t\t\t// Error!\n\t\t\tif offset >= n {\n\t\t\t\tw.Errors <- errors.New(\"Windows system assumed buffer larger than it is, events have likely been missed.\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif err := w.startRead(watch); err != nil {\n\t\t\tw.Errors <- err\n\t\t}\n\t}\n}\n\nfunc (w *Watcher) sendEvent(name string, mask uint64) bool {\n\tif mask == 0 {\n\t\treturn false\n\t}\n\tevent := newEvent(name, uint32(mask))\n\tselect {\n\tcase ch := <-w.quit:\n\t\tw.quit <- ch\n\tcase w.Events <- event:\n\t}\n\treturn true\n}\n\nfunc toWindowsFlags(mask uint64) uint32 {\n\tvar m uint32\n\tif mask&sysFSACCESS != 0 {\n\t\tm |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS\n\t}\n\tif mask&sysFSMODIFY != 0 {\n\t\tm |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE\n\t}\n\tif mask&sysFSATTRIB != 0 {\n\t\tm |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES\n\t}\n\tif mask&(sysFSMOVE|sysFSCREATE|sysFSDELETE) != 0 {\n\t\tm |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME\n\t}\n\treturn m\n}\n\nfunc toFSnotifyFlags(action uint32) uint64 {\n\tswitch action {\n\tcase syscall.FILE_ACTION_ADDED:\n\t\treturn sysFSCREATE\n\tcase syscall.FILE_ACTION_REMOVED:\n\t\treturn sysFSDELETE\n\tcase syscall.FILE_ACTION_MODIFIED:\n\t\treturn sysFSMODIFY\n\tcase syscall.FILE_ACTION_RENAMED_OLD_NAME:\n\t\treturn sysFSMOVEDFROM\n\tcase syscall.FILE_ACTION_RENAMED_NEW_NAME:\n\t\treturn sysFSMOVEDTO\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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.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\tif n.Token.Type == token.BOOL {\n\t\t\tv, err := strconv.ParseBool(n.Token.Text)\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))\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\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))\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// 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&ast.ObjectKey{\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\tfields := make(map[*reflect.StructField]reflect.Value)\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[&fieldType] = structVal.Field(i)\n\t\t}\n\t}\n\n\tusedKeys := make(map[string]struct{})\n\tdecodedFields := make([]string, 0, len(fields))\n\tdecodedFieldsVal := make([]reflect.Value, 0)\n\tunusedKeysVal := make([]reflect.Value, 0)\n\tfor fieldType, field := range fields {\n\t\tif !field.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 !field.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tfieldName := fieldType.Name\n\n\t\ttagValue := fieldType.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, field)\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\tfield.SetString(item.Keys[0].Token.Value().(string))\n\t\t\t\tcontinue\n\t\t\tcase \"unusedKeys\":\n\t\t\t\tunusedKeysVal = append(unusedKeysVal, field)\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 key\n\t\tusedKeys[fieldName] = struct{}{}\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, field); 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, field); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tdecodedFields = append(decodedFields, fieldType.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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/hashicorp/hcl/hcl/fmtcmd/fmtcmd.go",
    "content": "// Derivative work from:\n//\t- https://golang.org/src/cmd/gofmt/gofmt.go\n//\t- https://github.com/fatih/hclfmt\n\npackage fmtcmd\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl/hcl/printer\"\n)\n\nvar (\n\tErrWriteStdin = errors.New(\"cannot use write option with standard input\")\n)\n\ntype Options struct {\n\tList  bool // list files whose formatting differs\n\tWrite bool // write result to (source) file instead of stdout\n\tDiff  bool // display diffs of formatting changes\n}\n\nfunc isValidFile(f os.FileInfo, extensions []string) bool {\n\tif !f.IsDir() && !strings.HasPrefix(f.Name(), \".\") {\n\t\tfor _, ext := range extensions {\n\t\t\tif strings.HasSuffix(f.Name(), \".\"+ext) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\n// If in == nil, the source is the contents of the file with the given filename.\nfunc processFile(filename string, in io.Reader, out io.Writer, stdin bool, opts Options) error {\n\tif in == nil {\n\t\tf, err := os.Open(filename)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer f.Close()\n\t\tin = f\n\t}\n\n\tsrc, err := ioutil.ReadAll(in)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tres, err := printer.Format(src)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"In %s: %s\", filename, err)\n\t}\n\n\tif !bytes.Equal(src, res) {\n\t\t// formatting has changed\n\t\tif opts.List {\n\t\t\tfmt.Fprintln(out, filename)\n\t\t}\n\t\tif opts.Write {\n\t\t\terr = ioutil.WriteFile(filename, res, 0644)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif opts.Diff {\n\t\t\tdata, err := diff(src, res)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"computing diff: %s\", err)\n\t\t\t}\n\t\t\tfmt.Fprintf(out, \"diff a/%s b/%s\\n\", filename, filename)\n\t\t\tout.Write(data)\n\t\t}\n\t}\n\n\tif !opts.List && !opts.Write && !opts.Diff {\n\t\t_, err = out.Write(res)\n\t}\n\n\treturn err\n}\n\nfunc walkDir(path string, extensions []string, stdout io.Writer, opts Options) error {\n\tvisitFile := func(path string, f os.FileInfo, err error) error {\n\t\tif err == nil && isValidFile(f, extensions) {\n\t\t\terr = processFile(path, nil, stdout, false, opts)\n\t\t}\n\t\treturn err\n\t}\n\n\treturn filepath.Walk(path, visitFile)\n}\n\nfunc Run(\n\tpaths, extensions []string,\n\tstdin io.Reader,\n\tstdout io.Writer,\n\topts Options,\n) error {\n\tif len(paths) == 0 {\n\t\tif opts.Write {\n\t\t\treturn ErrWriteStdin\n\t\t}\n\t\tif err := processFile(\"<standard input>\", stdin, stdout, true, opts); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\tfor _, path := range paths {\n\t\tswitch dir, err := os.Stat(path); {\n\t\tcase err != nil:\n\t\t\treturn err\n\t\tcase dir.IsDir():\n\t\t\tif err := walkDir(path, extensions, stdout, opts); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\tif err := processFile(path, nil, stdout, false, opts); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc diff(b1, b2 []byte) (data []byte, err error) {\n\tf1, err := ioutil.TempFile(\"\", \"\")\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer os.Remove(f1.Name())\n\tdefer f1.Close()\n\n\tf2, err := ioutil.TempFile(\"\", \"\")\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer os.Remove(f2.Name())\n\tdefer f2.Close()\n\n\tf1.Write(b1)\n\tf2.Write(b2)\n\n\tdata, err = exec.Command(\"diff\", \"-u\", f1.Name(), f2.Name()).CombinedOutput()\n\tif len(data) > 0 {\n\t\t// diff exits with a non-zero status when the files don't match.\n\t\t// Ignore that failure as long as we get output.\n\t\terr = nil\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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\"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\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, fmt.Errorf(\n\t\t\t\"key '%s' expected start of object ('{') or assignment ('=')\",\n\t\t\tstrings.Join(keyStr, \" \"))\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, fmt.Errorf(\"object expected closing RBRACE got: %s\", tok.Type)\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/hashicorp/hcl/hcl/printer/nodes.go",
    "content": "package printer\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\nconst (\n\tblank    = byte(' ')\n\tnewline  = byte('\\n')\n\ttab      = byte('\\t')\n\tinfinity = 1 << 30 // offset or line\n)\n\nvar (\n\tunindent = []byte(\"\\uE123\") // in the private use space\n)\n\ntype printer struct {\n\tcfg  Config\n\tprev token.Pos\n\n\tcomments           []*ast.CommentGroup // may be nil, contains all comments\n\tstandaloneComments []*ast.CommentGroup // contains all standalone comments (not assigned to any node)\n\n\tenableTrace bool\n\tindentTrace int\n}\n\ntype ByPosition []*ast.CommentGroup\n\nfunc (b ByPosition) Len() int           { return len(b) }\nfunc (b ByPosition) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }\nfunc (b ByPosition) Less(i, j int) bool { return b[i].Pos().Before(b[j].Pos()) }\n\n// collectComments comments all standalone comments which are not lead or line\n// comment\nfunc (p *printer) collectComments(node ast.Node) {\n\t// first collect all comments. This is already stored in\n\t// ast.File.(comments)\n\tast.Walk(node, func(nn ast.Node) (ast.Node, bool) {\n\t\tswitch t := nn.(type) {\n\t\tcase *ast.File:\n\t\t\tp.comments = t.Comments\n\t\t\treturn nn, false\n\t\t}\n\t\treturn nn, true\n\t})\n\n\tstandaloneComments := make(map[token.Pos]*ast.CommentGroup, 0)\n\tfor _, c := range p.comments {\n\t\tstandaloneComments[c.Pos()] = c\n\t}\n\n\t// next remove all lead and line comments from the overall comment map.\n\t// This will give us comments which are standalone, comments which are not\n\t// assigned to any kind of node.\n\tast.Walk(node, func(nn ast.Node) (ast.Node, bool) {\n\t\tswitch t := nn.(type) {\n\t\tcase *ast.LiteralType:\n\t\t\tif t.LeadComment != nil {\n\t\t\t\tfor _, comment := range t.LeadComment.List {\n\t\t\t\t\tif _, ok := standaloneComments[comment.Pos()]; ok {\n\t\t\t\t\t\tdelete(standaloneComments, comment.Pos())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif t.LineComment != nil {\n\t\t\t\tfor _, comment := range t.LineComment.List {\n\t\t\t\t\tif _, ok := standaloneComments[comment.Pos()]; ok {\n\t\t\t\t\t\tdelete(standaloneComments, comment.Pos())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase *ast.ObjectItem:\n\t\t\tif t.LeadComment != nil {\n\t\t\t\tfor _, comment := range t.LeadComment.List {\n\t\t\t\t\tif _, ok := standaloneComments[comment.Pos()]; ok {\n\t\t\t\t\t\tdelete(standaloneComments, comment.Pos())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif t.LineComment != nil {\n\t\t\t\tfor _, comment := range t.LineComment.List {\n\t\t\t\t\tif _, ok := standaloneComments[comment.Pos()]; ok {\n\t\t\t\t\t\tdelete(standaloneComments, comment.Pos())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nn, true\n\t})\n\n\tfor _, c := range standaloneComments {\n\t\tp.standaloneComments = append(p.standaloneComments, c)\n\t}\n\n\tsort.Sort(ByPosition(p.standaloneComments))\n}\n\n// output prints creates b printable HCL output and returns it.\nfunc (p *printer) output(n interface{}) []byte {\n\tvar buf bytes.Buffer\n\n\tswitch t := n.(type) {\n\tcase *ast.File:\n\t\t// File doesn't trace so we add the tracing here\n\t\tdefer un(trace(p, \"File\"))\n\t\treturn p.output(t.Node)\n\tcase *ast.ObjectList:\n\t\tdefer un(trace(p, \"ObjectList\"))\n\n\t\tvar index int\n\t\tfor {\n\t\t\t// Determine the location of the next actual non-comment\n\t\t\t// item. If we're at the end, the next item is at \"infinity\"\n\t\t\tvar nextItem token.Pos\n\t\t\tif index != len(t.Items) {\n\t\t\t\tnextItem = t.Items[index].Pos()\n\t\t\t} else {\n\t\t\t\tnextItem = token.Pos{Offset: infinity, Line: infinity}\n\t\t\t}\n\n\t\t\t// Go through the standalone comments in the file and print out\n\t\t\t// the comments that we should be for this object item.\n\t\t\tfor _, c := range p.standaloneComments {\n\t\t\t\t// Go through all the comments in the group. The group\n\t\t\t\t// should be printed together, not separated by double newlines.\n\t\t\t\tprinted := false\n\t\t\t\tnewlinePrinted := false\n\t\t\t\tfor _, comment := range c.List {\n\t\t\t\t\t// We only care about comments after the previous item\n\t\t\t\t\t// we've printed so that comments are printed in the\n\t\t\t\t\t// correct locations (between two objects for example).\n\t\t\t\t\t// And before the next item.\n\t\t\t\t\tif comment.Pos().After(p.prev) && comment.Pos().Before(nextItem) {\n\t\t\t\t\t\t// if we hit the end add newlines so we can print the comment\n\t\t\t\t\t\t// we don't do this if prev is invalid which means the\n\t\t\t\t\t\t// beginning of the file since the first comment should\n\t\t\t\t\t\t// be at the first line.\n\t\t\t\t\t\tif !newlinePrinted && p.prev.IsValid() && index == len(t.Items) {\n\t\t\t\t\t\t\tbuf.Write([]byte{newline, newline})\n\t\t\t\t\t\t\tnewlinePrinted = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Write the actual comment.\n\t\t\t\t\t\tbuf.WriteString(comment.Text)\n\t\t\t\t\t\tbuf.WriteByte(newline)\n\n\t\t\t\t\t\t// Set printed to true to note that we printed something\n\t\t\t\t\t\tprinted = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're not at the last item, write a new line so\n\t\t\t\t// that there is a newline separating this comment from\n\t\t\t\t// the next object.\n\t\t\t\tif printed && index != len(t.Items) {\n\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif index == len(t.Items) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tbuf.Write(p.output(t.Items[index]))\n\t\t\tif index != len(t.Items)-1 {\n\t\t\t\t// Always write a newline to separate us from the next item\n\t\t\t\tbuf.WriteByte(newline)\n\n\t\t\t\t// Need to determine if we're going to separate the next item\n\t\t\t\t// with a blank line. The logic here is simple, though there\n\t\t\t\t// are a few conditions:\n\t\t\t\t//\n\t\t\t\t//   1. The next object is more than one line away anyways,\n\t\t\t\t//      so we need an empty line.\n\t\t\t\t//\n\t\t\t\t//   2. The next object is not a \"single line\" object, so\n\t\t\t\t//      we need an empty line.\n\t\t\t\t//\n\t\t\t\t//   3. This current object is not a single line object,\n\t\t\t\t//      so we need an empty line.\n\t\t\t\tcurrent := t.Items[index]\n\t\t\t\tnext := t.Items[index+1]\n\t\t\t\tif next.Pos().Line != t.Items[index].Pos().Line+1 ||\n\t\t\t\t\t!p.isSingleLineObject(next) ||\n\t\t\t\t\t!p.isSingleLineObject(current) {\n\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t}\n\t\t\t}\n\t\t\tindex++\n\t\t}\n\tcase *ast.ObjectKey:\n\t\tbuf.WriteString(t.Token.Text)\n\tcase *ast.ObjectItem:\n\t\tp.prev = t.Pos()\n\t\tbuf.Write(p.objectItem(t))\n\tcase *ast.LiteralType:\n\t\tbuf.Write(p.literalType(t))\n\tcase *ast.ListType:\n\t\tbuf.Write(p.list(t))\n\tcase *ast.ObjectType:\n\t\tbuf.Write(p.objectType(t))\n\tdefault:\n\t\tfmt.Printf(\" unknown type: %T\\n\", n)\n\t}\n\n\treturn buf.Bytes()\n}\n\nfunc (p *printer) literalType(lit *ast.LiteralType) []byte {\n\tresult := []byte(lit.Token.Text)\n\tswitch lit.Token.Type {\n\tcase token.HEREDOC:\n\t\t// Clear the trailing newline from heredocs\n\t\tif result[len(result)-1] == '\\n' {\n\t\t\tresult = result[:len(result)-1]\n\t\t}\n\n\t\t// Poison lines 2+ so that we don't indent them\n\t\tresult = p.heredocIndent(result)\n\tcase token.STRING:\n\t\t// If this is a multiline string, poison lines 2+ so we don't\n\t\t// indent them.\n\t\tif bytes.IndexRune(result, '\\n') >= 0 {\n\t\t\tresult = p.heredocIndent(result)\n\t\t}\n\t}\n\n\treturn result\n}\n\n// objectItem returns the printable HCL form of an object item. An object type\n// starts with one/multiple keys and has a value. The value might be of any\n// type.\nfunc (p *printer) objectItem(o *ast.ObjectItem) []byte {\n\tdefer un(trace(p, fmt.Sprintf(\"ObjectItem: %s\", o.Keys[0].Token.Text)))\n\tvar buf bytes.Buffer\n\n\tif o.LeadComment != nil {\n\t\tfor _, comment := range o.LeadComment.List {\n\t\t\tbuf.WriteString(comment.Text)\n\t\t\tbuf.WriteByte(newline)\n\t\t}\n\t}\n\n\tfor i, k := range o.Keys {\n\t\tbuf.WriteString(k.Token.Text)\n\t\tbuf.WriteByte(blank)\n\n\t\t// reach end of key\n\t\tif o.Assign.IsValid() && i == len(o.Keys)-1 && len(o.Keys) == 1 {\n\t\t\tbuf.WriteString(\"=\")\n\t\t\tbuf.WriteByte(blank)\n\t\t}\n\t}\n\n\tbuf.Write(p.output(o.Val))\n\n\tif o.Val.Pos().Line == o.Keys[0].Pos().Line && o.LineComment != nil {\n\t\tbuf.WriteByte(blank)\n\t\tfor _, comment := range o.LineComment.List {\n\t\t\tbuf.WriteString(comment.Text)\n\t\t}\n\t}\n\n\treturn buf.Bytes()\n}\n\n// objectType returns the printable HCL form of an object type. An object type\n// begins with a brace and ends with a brace.\nfunc (p *printer) objectType(o *ast.ObjectType) []byte {\n\tdefer un(trace(p, \"ObjectType\"))\n\tvar buf bytes.Buffer\n\tbuf.WriteString(\"{\")\n\n\tvar index int\n\tvar nextItem token.Pos\n\tvar commented, newlinePrinted bool\n\tfor {\n\t\t// Determine the location of the next actual non-comment\n\t\t// item. If we're at the end, the next item is the closing brace\n\t\tif index != len(o.List.Items) {\n\t\t\tnextItem = o.List.Items[index].Pos()\n\t\t} else {\n\t\t\tnextItem = o.Rbrace\n\t\t}\n\n\t\t// Go through the standalone comments in the file and print out\n\t\t// the comments that we should be for this object item.\n\t\tfor _, c := range p.standaloneComments {\n\t\t\tprinted := false\n\t\t\tvar lastCommentPos token.Pos\n\t\t\tfor _, comment := range c.List {\n\t\t\t\t// We only care about comments after the previous item\n\t\t\t\t// we've printed so that comments are printed in the\n\t\t\t\t// correct locations (between two objects for example).\n\t\t\t\t// And before the next item.\n\t\t\t\tif comment.Pos().After(p.prev) && comment.Pos().Before(nextItem) {\n\t\t\t\t\t// If there are standalone comments and the initial newline has not\n\t\t\t\t\t// been printed yet, do it now.\n\t\t\t\t\tif !newlinePrinted {\n\t\t\t\t\t\tnewlinePrinted = true\n\t\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t\t}\n\n\t\t\t\t\t// add newline if it's between other printed nodes\n\t\t\t\t\tif index > 0 {\n\t\t\t\t\t\tcommented = true\n\t\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store this position\n\t\t\t\t\tlastCommentPos = comment.Pos()\n\n\t\t\t\t\t// output the comment itself\n\t\t\t\t\tbuf.Write(p.indent(p.heredocIndent([]byte(comment.Text))))\n\n\t\t\t\t\t// Set printed to true to note that we printed something\n\t\t\t\t\tprinted = true\n\n\t\t\t\t\t/*\n\t\t\t\t\t\tif index != len(o.List.Items) {\n\t\t\t\t\t\t\tbuf.WriteByte(newline) // do not print on the end\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\t// Stuff to do if we had comments\n\t\t\tif printed {\n\t\t\t\t// Always write a newline\n\t\t\t\tbuf.WriteByte(newline)\n\n\t\t\t\t// If there is another item in the object and our comment\n\t\t\t\t// didn't hug it directly, then make sure there is a blank\n\t\t\t\t// line separating them.\n\t\t\t\tif nextItem != o.Rbrace && nextItem.Line != lastCommentPos.Line+1 {\n\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif index == len(o.List.Items) {\n\t\t\tp.prev = o.Rbrace\n\t\t\tbreak\n\t\t}\n\n\t\t// At this point we are sure that it's not a totally empty block: print\n\t\t// the initial newline if it hasn't been printed yet by the previous\n\t\t// block about standalone comments.\n\t\tif !newlinePrinted {\n\t\t\tbuf.WriteByte(newline)\n\t\t\tnewlinePrinted = true\n\t\t}\n\n\t\t// check if we have adjacent one liner items. If yes we'll going to align\n\t\t// the comments.\n\t\tvar aligned []*ast.ObjectItem\n\t\tfor _, item := range o.List.Items[index:] {\n\t\t\t// we don't group one line lists\n\t\t\tif len(o.List.Items) == 1 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// one means a oneliner with out any lead comment\n\t\t\t// two means a oneliner with lead comment\n\t\t\t// anything else might be something else\n\t\t\tcur := lines(string(p.objectItem(item)))\n\t\t\tif cur > 2 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcurPos := item.Pos()\n\n\t\t\tnextPos := token.Pos{}\n\t\t\tif index != len(o.List.Items)-1 {\n\t\t\t\tnextPos = o.List.Items[index+1].Pos()\n\t\t\t}\n\n\t\t\tprevPos := token.Pos{}\n\t\t\tif index != 0 {\n\t\t\t\tprevPos = o.List.Items[index-1].Pos()\n\t\t\t}\n\n\t\t\t// fmt.Println(\"DEBUG ----------------\")\n\t\t\t// fmt.Printf(\"prev = %+v prevPos: %s\\n\", prev, prevPos)\n\t\t\t// fmt.Printf(\"cur = %+v curPos: %s\\n\", cur, curPos)\n\t\t\t// fmt.Printf(\"next = %+v nextPos: %s\\n\", next, nextPos)\n\n\t\t\tif curPos.Line+1 == nextPos.Line {\n\t\t\t\taligned = append(aligned, item)\n\t\t\t\tindex++\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif curPos.Line-1 == prevPos.Line {\n\t\t\t\taligned = append(aligned, item)\n\t\t\t\tindex++\n\n\t\t\t\t// finish if we have a new line or comment next. This happens\n\t\t\t\t// if the next item is not adjacent\n\t\t\t\tif curPos.Line+1 != nextPos.Line {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\n\t\t// put newlines if the items are between other non aligned items.\n\t\t// newlines are also added if there is a standalone comment already, so\n\t\t// check it too\n\t\tif !commented && index != len(aligned) {\n\t\t\tbuf.WriteByte(newline)\n\t\t}\n\n\t\tif len(aligned) >= 1 {\n\t\t\tp.prev = aligned[len(aligned)-1].Pos()\n\n\t\t\titems := p.alignedItems(aligned)\n\t\t\tbuf.Write(p.indent(items))\n\t\t} else {\n\t\t\tp.prev = o.List.Items[index].Pos()\n\n\t\t\tbuf.Write(p.indent(p.objectItem(o.List.Items[index])))\n\t\t\tindex++\n\t\t}\n\n\t\tbuf.WriteByte(newline)\n\t}\n\n\tbuf.WriteString(\"}\")\n\treturn buf.Bytes()\n}\n\nfunc (p *printer) alignedItems(items []*ast.ObjectItem) []byte {\n\tvar buf bytes.Buffer\n\n\t// find the longest key and value length, needed for alignment\n\tvar longestKeyLen int // longest key length\n\tvar longestValLen int // longest value length\n\tfor _, item := range items {\n\t\tkey := len(item.Keys[0].Token.Text)\n\t\tval := len(p.output(item.Val))\n\n\t\tif key > longestKeyLen {\n\t\t\tlongestKeyLen = key\n\t\t}\n\n\t\tif val > longestValLen {\n\t\t\tlongestValLen = val\n\t\t}\n\t}\n\n\tfor i, item := range items {\n\t\tif item.LeadComment != nil {\n\t\t\tfor _, comment := range item.LeadComment.List {\n\t\t\t\tbuf.WriteString(comment.Text)\n\t\t\t\tbuf.WriteByte(newline)\n\t\t\t}\n\t\t}\n\n\t\tfor i, k := range item.Keys {\n\t\t\tkeyLen := len(k.Token.Text)\n\t\t\tbuf.WriteString(k.Token.Text)\n\t\t\tfor i := 0; i < longestKeyLen-keyLen+1; i++ {\n\t\t\t\tbuf.WriteByte(blank)\n\t\t\t}\n\n\t\t\t// reach end of key\n\t\t\tif i == len(item.Keys)-1 && len(item.Keys) == 1 {\n\t\t\t\tbuf.WriteString(\"=\")\n\t\t\t\tbuf.WriteByte(blank)\n\t\t\t}\n\t\t}\n\n\t\tval := p.output(item.Val)\n\t\tvalLen := len(val)\n\t\tbuf.Write(val)\n\n\t\tif item.Val.Pos().Line == item.Keys[0].Pos().Line && item.LineComment != nil {\n\t\t\tfor i := 0; i < longestValLen-valLen+1; i++ {\n\t\t\t\tbuf.WriteByte(blank)\n\t\t\t}\n\n\t\t\tfor _, comment := range item.LineComment.List {\n\t\t\t\tbuf.WriteString(comment.Text)\n\t\t\t}\n\t\t}\n\n\t\t// do not print for the last item\n\t\tif i != len(items)-1 {\n\t\t\tbuf.WriteByte(newline)\n\t\t}\n\t}\n\n\treturn buf.Bytes()\n}\n\n// list returns the printable HCL form of an list type.\nfunc (p *printer) list(l *ast.ListType) []byte {\n\tvar buf bytes.Buffer\n\tbuf.WriteString(\"[\")\n\n\tvar longestLine int\n\tfor _, item := range l.List {\n\t\t// for now we assume that the list only contains literal types\n\t\tif lit, ok := item.(*ast.LiteralType); ok {\n\t\t\tlineLen := len(lit.Token.Text)\n\t\t\tif lineLen > longestLine {\n\t\t\t\tlongestLine = lineLen\n\t\t\t}\n\t\t}\n\t}\n\n\tinsertSpaceBeforeItem := false\n\tlastHadLeadComment := false\n\tfor i, item := range l.List {\n\t\t// Keep track of whether this item is a heredoc since that has\n\t\t// unique behavior.\n\t\theredoc := false\n\t\tif lit, ok := item.(*ast.LiteralType); ok && lit.Token.Type == token.HEREDOC {\n\t\t\theredoc = true\n\t\t}\n\n\t\tif item.Pos().Line != l.Lbrack.Line {\n\t\t\t// multiline list, add newline before we add each item\n\t\t\tbuf.WriteByte(newline)\n\t\t\tinsertSpaceBeforeItem = false\n\n\t\t\t// If we have a lead comment, then we want to write that first\n\t\t\tleadComment := false\n\t\t\tif lit, ok := item.(*ast.LiteralType); ok && lit.LeadComment != nil {\n\t\t\t\tleadComment = true\n\n\t\t\t\t// If this isn't the first item and the previous element\n\t\t\t\t// didn't have a lead comment, then we need to add an extra\n\t\t\t\t// newline to properly space things out. If it did have a\n\t\t\t\t// lead comment previously then this would be done\n\t\t\t\t// automatically.\n\t\t\t\tif i > 0 && !lastHadLeadComment {\n\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t}\n\n\t\t\t\tfor _, comment := range lit.LeadComment.List {\n\t\t\t\t\tbuf.Write(p.indent([]byte(comment.Text)))\n\t\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// also indent each line\n\t\t\tval := p.output(item)\n\t\t\tcurLen := len(val)\n\t\t\tbuf.Write(p.indent(val))\n\n\t\t\t// if this item is a heredoc, then we output the comma on\n\t\t\t// the next line. This is the only case this happens.\n\t\t\tcomma := []byte{','}\n\t\t\tif heredoc {\n\t\t\t\tbuf.WriteByte(newline)\n\t\t\t\tcomma = p.indent(comma)\n\t\t\t}\n\n\t\t\tbuf.Write(comma)\n\n\t\t\tif lit, ok := item.(*ast.LiteralType); ok && lit.LineComment != nil {\n\t\t\t\t// if the next item doesn't have any comments, do not align\n\t\t\t\tbuf.WriteByte(blank) // align one space\n\t\t\t\tfor i := 0; i < longestLine-curLen; i++ {\n\t\t\t\t\tbuf.WriteByte(blank)\n\t\t\t\t}\n\n\t\t\t\tfor _, comment := range lit.LineComment.List {\n\t\t\t\t\tbuf.WriteString(comment.Text)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlastItem := i == len(l.List)-1\n\t\t\tif lastItem {\n\t\t\t\tbuf.WriteByte(newline)\n\t\t\t}\n\n\t\t\tif leadComment && !lastItem {\n\t\t\t\tbuf.WriteByte(newline)\n\t\t\t}\n\n\t\t\tlastHadLeadComment = leadComment\n\t\t} else {\n\t\t\tif insertSpaceBeforeItem {\n\t\t\t\tbuf.WriteByte(blank)\n\t\t\t\tinsertSpaceBeforeItem = false\n\t\t\t}\n\n\t\t\t// Output the item itself\n\t\t\t// also indent each line\n\t\t\tval := p.output(item)\n\t\t\tcurLen := len(val)\n\t\t\tbuf.Write(val)\n\n\t\t\t// If this is a heredoc item we always have to output a newline\n\t\t\t// so that it parses properly.\n\t\t\tif heredoc {\n\t\t\t\tbuf.WriteByte(newline)\n\t\t\t}\n\n\t\t\t// If this isn't the last element, write a comma.\n\t\t\tif i != len(l.List)-1 {\n\t\t\t\tbuf.WriteString(\",\")\n\t\t\t\tinsertSpaceBeforeItem = true\n\t\t\t}\n\n\t\t\tif lit, ok := item.(*ast.LiteralType); ok && lit.LineComment != nil {\n\t\t\t\t// if the next item doesn't have any comments, do not align\n\t\t\t\tbuf.WriteByte(blank) // align one space\n\t\t\t\tfor i := 0; i < longestLine-curLen; i++ {\n\t\t\t\t\tbuf.WriteByte(blank)\n\t\t\t\t}\n\n\t\t\t\tfor _, comment := range lit.LineComment.List {\n\t\t\t\t\tbuf.WriteString(comment.Text)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\tbuf.WriteString(\"]\")\n\treturn buf.Bytes()\n}\n\n// indent indents the lines of the given buffer for each non-empty line\nfunc (p *printer) indent(buf []byte) []byte {\n\tvar prefix []byte\n\tif p.cfg.SpacesWidth != 0 {\n\t\tfor i := 0; i < p.cfg.SpacesWidth; i++ {\n\t\t\tprefix = append(prefix, blank)\n\t\t}\n\t} else {\n\t\tprefix = []byte{tab}\n\t}\n\n\tvar res []byte\n\tbol := true\n\tfor _, c := range buf {\n\t\tif bol && c != '\\n' {\n\t\t\tres = append(res, prefix...)\n\t\t}\n\n\t\tres = append(res, c)\n\t\tbol = c == '\\n'\n\t}\n\treturn res\n}\n\n// unindent removes all the indentation from the tombstoned lines\nfunc (p *printer) unindent(buf []byte) []byte {\n\tvar res []byte\n\tfor i := 0; i < len(buf); i++ {\n\t\tskip := len(buf)-i <= len(unindent)\n\t\tif !skip {\n\t\t\tskip = !bytes.Equal(unindent, buf[i:i+len(unindent)])\n\t\t}\n\t\tif skip {\n\t\t\tres = append(res, buf[i])\n\t\t\tcontinue\n\t\t}\n\n\t\t// We have a marker. we have to backtrace here and clean out\n\t\t// any whitespace ahead of our tombstone up to a \\n\n\t\tfor j := len(res) - 1; j >= 0; j-- {\n\t\t\tif res[j] == '\\n' {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tres = res[:j]\n\t\t}\n\n\t\t// Skip the entire unindent marker\n\t\ti += len(unindent) - 1\n\t}\n\n\treturn res\n}\n\n// heredocIndent marks all the 2nd and further lines as unindentable\nfunc (p *printer) heredocIndent(buf []byte) []byte {\n\tvar res []byte\n\tbol := false\n\tfor _, c := range buf {\n\t\tif bol && c != '\\n' {\n\t\t\tres = append(res, unindent...)\n\t\t}\n\t\tres = append(res, c)\n\t\tbol = c == '\\n'\n\t}\n\treturn res\n}\n\n// isSingleLineObject tells whether the given object item is a single\n// line object such as \"obj {}\".\n//\n// A single line object:\n//\n//   * has no lead comments (hence multi-line)\n//   * has no assignment\n//   * has no values in the stanza (within {})\n//\nfunc (p *printer) isSingleLineObject(val *ast.ObjectItem) bool {\n\t// If there is a lead comment, can't be one line\n\tif val.LeadComment != nil {\n\t\treturn false\n\t}\n\n\t// If there is assignment, we always break by line\n\tif val.Assign.IsValid() {\n\t\treturn false\n\t}\n\n\t// If it isn't an object type, then its not a single line object\n\tot, ok := val.Val.(*ast.ObjectType)\n\tif !ok {\n\t\treturn false\n\t}\n\n\t// If the object has no items, it is single line!\n\treturn len(ot.List.Items) == 0\n}\n\nfunc lines(txt string) int {\n\tendline := 1\n\tfor i := 0; i < len(txt); i++ {\n\t\tif txt[i] == '\\n' {\n\t\t\tendline++\n\t\t}\n\t}\n\treturn endline\n}\n\n// ----------------------------------------------------------------------------\n// Tracing support\n\nfunc (p *printer) printTrace(a ...interface{}) {\n\tif !p.enableTrace {\n\t\treturn\n\t}\n\n\tconst dots = \". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \"\n\tconst n = len(dots)\n\ti := 2 * p.indentTrace\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 *printer, msg string) *printer {\n\tp.printTrace(msg, \"(\")\n\tp.indentTrace++\n\treturn p\n}\n\n// Usage pattern: defer un(trace(p, \"...\"))\nfunc un(p *printer) {\n\tp.indentTrace--\n\tp.printTrace(\")\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/hashicorp/hcl/hcl/printer/printer.go",
    "content": "// Package printer implements printing of AST nodes to HCL format.\npackage printer\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"text/tabwriter\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/hashicorp/hcl/hcl/parser\"\n)\n\nvar DefaultConfig = Config{\n\tSpacesWidth: 2,\n}\n\n// A Config node controls the output of Fprint.\ntype Config struct {\n\tSpacesWidth int // if set, it will use spaces instead of tabs for alignment\n}\n\nfunc (c *Config) Fprint(output io.Writer, node ast.Node) error {\n\tp := &printer{\n\t\tcfg:                *c,\n\t\tcomments:           make([]*ast.CommentGroup, 0),\n\t\tstandaloneComments: make([]*ast.CommentGroup, 0),\n\t\t// enableTrace:        true,\n\t}\n\n\tp.collectComments(node)\n\n\tif _, err := output.Write(p.unindent(p.output(node))); err != nil {\n\t\treturn err\n\t}\n\n\t// flush tabwriter, if any\n\tvar err error\n\tif tw, _ := output.(*tabwriter.Writer); tw != nil {\n\t\terr = tw.Flush()\n\t}\n\n\treturn err\n}\n\n// Fprint \"pretty-prints\" an HCL node to output\n// It calls Config.Fprint with default settings.\nfunc Fprint(output io.Writer, node ast.Node) error {\n\treturn DefaultConfig.Fprint(output, node)\n}\n\n// Format formats src HCL and returns the result.\nfunc Format(src []byte) ([]byte, error) {\n\tnode, err := parser.Parse(src)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar buf bytes.Buffer\n\tif err := DefaultConfig.Fprint(&buf, node); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Add trailing newline to result\n\tbuf.WriteString(\"\\n\")\n\n\treturn buf.Bytes(), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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// If we see a null character with data left, then that is an error\n\tif ch == '\\x00' && s.buf.Len() > 0 {\n\t\ts.err(\"unexpected null character (0x00)\")\n\t\treturn eof\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 begining 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 {\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\\z`, identBytes[1:]))\n\t} else {\n\t\tidentRegexp = regexp.MustCompile(fmt.Sprintf(`[[:space:]]*%s\\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 {\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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\tfmt.Println(\"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": "12fa-docker-golang/chapter3/viper/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 begining 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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/hashicorp/hcl/testhelper/unix2dos.go",
    "content": "package testhelper\n\nimport (\n\t\"runtime\"\n\t\"strings\"\n)\n\n// Converts the line endings when on Windows\nfunc Unix2dos(unix string) string {\n\tif runtime.GOOS != \"windows\" {\n\t\treturn unix\n\t}\n\n\treturn strings.Replace(unix, \"\\n\", \"\\r\\n\", -1)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/kr/fs/LICENSE",
    "content": "Copyright (c) 2012 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": "12fa-docker-golang/chapter3/viper/vendor/github.com/kr/fs/filesystem.go",
    "content": "package fs\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// FileSystem defines the methods of an abstract filesystem.\ntype FileSystem interface {\n\n\t// ReadDir reads the directory named by dirname and returns a\n\t// list of directory entries.\n\tReadDir(dirname string) ([]os.FileInfo, error)\n\n\t// Lstat returns a FileInfo describing the named file. If the file is a\n\t// symbolic link, the returned FileInfo describes the symbolic link. Lstat\n\t// makes no attempt to follow the link.\n\tLstat(name string) (os.FileInfo, error)\n\n\t// Join joins any number of path elements into a single path, adding a\n\t// separator if necessary. The result is Cleaned; in particular, all\n\t// empty strings are ignored.\n\t//\n\t// The separator is FileSystem specific.\n\tJoin(elem ...string) string\n}\n\n// fs represents a FileSystem provided by the os package.\ntype fs struct{}\n\nfunc (f *fs) ReadDir(dirname string) ([]os.FileInfo, error) { return ioutil.ReadDir(dirname) }\n\nfunc (f *fs) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) }\n\nfunc (f *fs) Join(elem ...string) string { return filepath.Join(elem...) }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/kr/fs/walk.go",
    "content": "// Package fs provides filesystem-related functions.\npackage fs\n\nimport (\n\t\"os\"\n)\n\n// Walker provides a convenient interface for iterating over the\n// descendants of a filesystem path.\n// Successive calls to the Step method will step through each\n// file or directory in the tree, including the root. The files\n// are walked in lexical order, which makes the output deterministic\n// but means that for very large directories Walker can be inefficient.\n// Walker does not follow symbolic links.\ntype Walker struct {\n\tfs      FileSystem\n\tcur     item\n\tstack   []item\n\tdescend bool\n}\n\ntype item struct {\n\tpath string\n\tinfo os.FileInfo\n\terr  error\n}\n\n// Walk returns a new Walker rooted at root.\nfunc Walk(root string) *Walker {\n\treturn WalkFS(root, new(fs))\n}\n\n// WalkFS returns a new Walker rooted at root on the FileSystem fs.\nfunc WalkFS(root string, fs FileSystem) *Walker {\n\tinfo, err := fs.Lstat(root)\n\treturn &Walker{\n\t\tfs:    fs,\n\t\tstack: []item{{root, info, err}},\n\t}\n}\n\n// Step advances the Walker to the next file or directory,\n// which will then be available through the Path, Stat,\n// and Err methods.\n// It returns false when the walk stops at the end of the tree.\nfunc (w *Walker) Step() bool {\n\tif w.descend && w.cur.err == nil && w.cur.info.IsDir() {\n\t\tlist, err := w.fs.ReadDir(w.cur.path)\n\t\tif err != nil {\n\t\t\tw.cur.err = err\n\t\t\tw.stack = append(w.stack, w.cur)\n\t\t} else {\n\t\t\tfor i := len(list) - 1; i >= 0; i-- {\n\t\t\t\tpath := w.fs.Join(w.cur.path, list[i].Name())\n\t\t\t\tw.stack = append(w.stack, item{path, list[i], nil})\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(w.stack) == 0 {\n\t\treturn false\n\t}\n\ti := len(w.stack) - 1\n\tw.cur = w.stack[i]\n\tw.stack = w.stack[:i]\n\tw.descend = true\n\treturn true\n}\n\n// Path returns the path to the most recent file or directory\n// visited by a call to Step. It contains the argument to Walk\n// as a prefix; that is, if Walk is called with \"dir\", which is\n// a directory containing the file \"a\", Path will return \"dir/a\".\nfunc (w *Walker) Path() string {\n\treturn w.cur.path\n}\n\n// Stat returns info for the most recent file or directory\n// visited by a call to Step.\nfunc (w *Walker) Stat() os.FileInfo {\n\treturn w.cur.info\n}\n\n// Err returns the error, if any, for the most recent attempt\n// by Step to visit a file or directory. If a directory has\n// an error, w will not descend into that directory.\nfunc (w *Walker) Err() error {\n\treturn w.cur.err\n}\n\n// SkipDir causes the currently visited directory to be skipped.\n// If w is not on a directory, SkipDir has no effect.\nfunc (w *Walker) SkipDir() {\n\tw.descend = false\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/LICENSE",
    "content": "goproperties - properties file decoder for Go\n\nCopyright (c) 2013-2014 - Frank Schroeder\n\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\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. 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\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/assert/assert.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 assert provides helper functions for testing.\npackage assert\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n)\n\n// skip defines the default call depth\nconst skip = 2\n\n// Equal asserts that got and want are equal as defined by\n// reflect.DeepEqual. The test fails with msg if they are not equal.\nfunc Equal(t *testing.T, got, want interface{}, msg ...string) {\n\tif x := equal(2, got, want, msg...); x != \"\" {\n\t\tfmt.Println(x)\n\t\tt.Fail()\n\t}\n}\n\nfunc equal(skip int, got, want interface{}, msg ...string) string {\n\tif !reflect.DeepEqual(got, want) {\n\t\treturn fail(skip, \"got %v want %v %s\", got, want, strings.Join(msg, \" \"))\n\t}\n\treturn \"\"\n}\n\n// Panic asserts that function fn() panics.\n// It assumes that recover() either returns a string or\n// an error and fails if the message does not match\n// the regular expression in 'matches'.\nfunc Panic(t *testing.T, fn func(), matches string) {\n\tif x := doesPanic(2, fn, matches); x != \"\" {\n\t\tfmt.Println(x)\n\t\tt.Fail()\n\t}\n}\n\nfunc doesPanic(skip int, fn func(), expr string) (err string) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\terr = fail(skip, \"did not panic\")\n\t\t\treturn\n\t\t}\n\t\tvar v string\n\t\tswitch r.(type) {\n\t\tcase error:\n\t\t\tv = r.(error).Error()\n\t\tcase string:\n\t\t\tv = r.(string)\n\t\t}\n\t\terr = matches(skip, v, expr)\n\t}()\n\tfn()\n\treturn \"\"\n}\n\n// Matches asserts that a value matches a given regular expression.\nfunc Matches(t *testing.T, value, expr string) {\n\tif x := matches(2, value, expr); x != \"\" {\n\t\tfmt.Println(x)\n\t\tt.Fail()\n\t}\n}\n\nfunc matches(skip int, value, expr string) string {\n\tok, err := regexp.MatchString(expr, value)\n\tif err != nil {\n\t\treturn fail(skip, \"invalid pattern %q. %s\", expr, err)\n\t}\n\tif !ok {\n\t\treturn fail(skip, \"got %s which does not match %s\", value, expr)\n\t}\n\treturn \"\"\n}\n\nfunc fail(skip int, format string, args ...interface{}) string {\n\t_, file, line, _ := runtime.Caller(skip)\n\treturn fmt.Sprintf(\"\\t%s:%d: %s\\n\", filepath.Base(file), line, fmt.Sprintf(format, args...))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/decode.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Decode assigns property values to exported fields of a struct.\n//\n// Decode traverses v recursively and returns an error if a value cannot be\n// converted to the field type or a required value is missing for a field.\n//\n// The following type dependent decodings are used:\n//\n// String, boolean, numeric fields have the value of the property key assigned.\n// The property key name is the name of the field. A different key and a default\n// value can be set in the field's tag. Fields without default value are\n// required. If the value cannot be converted to the field type an error is\n// returned.\n//\n// time.Duration fields have the result of time.ParseDuration() assigned.\n//\n// time.Time fields have the vaule of time.Parse() assigned. The default layout\n// is time.RFC3339 but can be set in the field's tag.\n//\n// Arrays and slices of string, boolean, numeric, time.Duration and time.Time\n// fields have the value interpreted as a comma separated list of values. The\n// individual values are trimmed of whitespace and empty values are ignored. A\n// default value can be provided as a semicolon separated list in the field's\n// tag.\n//\n// Struct fields are decoded recursively using the field name plus \".\" as\n// prefix. The prefix (without dot) can be overridden in the field's tag.\n// Default values are not supported in the field's tag. Specify them on the\n// fields of the inner struct instead.\n//\n// Map fields must have a key of type string and are decoded recursively by\n// using the field's name plus \".' as prefix and the next element of the key\n// name as map key. The prefix (without dot) can be overridden in the field's\n// tag. Default values are not supported.\n//\n// Examples:\n//\n//     // Field is ignored.\n//     Field int `properties:\"-\"`\n//\n//     // Field is assigned value of 'Field'.\n//     Field int\n//\n//     // Field is assigned value of 'myName'.\n//     Field int `properties:\"myName\"`\n//\n//     // Field is assigned value of key 'myName' and has a default\n//     // value 15 if the key does not exist.\n//     Field int `properties:\"myName,default=15\"`\n//\n//     // Field is assigned value of key 'Field' and has a default\n//     // value 15 if the key does not exist.\n//     Field int `properties:\",default=15\"`\n//\n//     // Field is assigned value of key 'date' and the date\n//     // is in format 2006-01-02\n//     Field time.Time `properties:\"date,layout=2006-01-02\"`\n//\n//     // Field is assigned the non-empty and whitespace trimmed\n//     // values of key 'Field' split by commas.\n//     Field []string\n//\n//     // Field is assigned the non-empty and whitespace trimmed\n//     // values of key 'Field' split by commas and has a default\n//     // value [\"a\", \"b\", \"c\"] if the key does not exist.\n//     Field []string `properties:\",default=a;b;c\"`\n//\n//     // Field is decoded recursively with \"Field.\" as key prefix.\n//     Field SomeStruct\n//\n//     // Field is decoded recursively with \"myName.\" as key prefix.\n//     Field SomeStruct `properties:\"myName\"`\n//\n//     // Field is decoded recursively with \"Field.\" as key prefix\n//     // and the next dotted element of the key as map key.\n//     Field map[string]string\n//\n//     // Field is decoded recursively with \"myName.\" as key prefix\n//     // and the next dotted element of the key as map key.\n//     Field map[string]string `properties:\"myName\"`\nfunc (p *Properties) Decode(x interface{}) error {\n\tt, v := reflect.TypeOf(x), reflect.ValueOf(x)\n\tif t.Kind() != reflect.Ptr || v.Elem().Type().Kind() != reflect.Struct {\n\t\treturn fmt.Errorf(\"not a pointer to struct: %s\", t)\n\t}\n\tif err := dec(p, \"\", nil, nil, v); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc dec(p *Properties, key string, def *string, opts map[string]string, v reflect.Value) error {\n\tt := v.Type()\n\n\t// value returns the property value for key or the default if provided.\n\tvalue := func() (string, error) {\n\t\tif val, ok := p.Get(key); ok {\n\t\t\treturn val, nil\n\t\t}\n\t\tif def != nil {\n\t\t\treturn *def, nil\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"missing required key %s\", key)\n\t}\n\n\t// conv converts a string to a value of the given type.\n\tconv := func(s string, t reflect.Type) (val reflect.Value, err error) {\n\t\tvar v interface{}\n\n\t\tswitch {\n\t\tcase isDuration(t):\n\t\t\tv, err = time.ParseDuration(s)\n\n\t\tcase isTime(t):\n\t\t\tlayout := opts[\"layout\"]\n\t\t\tif layout == \"\" {\n\t\t\t\tlayout = time.RFC3339\n\t\t\t}\n\t\t\tv, err = time.Parse(layout, s)\n\n\t\tcase isBool(t):\n\t\t\tv, err = boolVal(s), nil\n\n\t\tcase isString(t):\n\t\t\tv, err = s, nil\n\n\t\tcase isFloat(t):\n\t\t\tv, err = strconv.ParseFloat(s, 64)\n\n\t\tcase isInt(t):\n\t\t\tv, err = strconv.ParseInt(s, 10, 64)\n\n\t\tcase isUint(t):\n\t\t\tv, err = strconv.ParseUint(s, 10, 64)\n\n\t\tdefault:\n\t\t\treturn reflect.Zero(t), fmt.Errorf(\"unsupported type %s\", t)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn reflect.Zero(t), err\n\t\t}\n\t\treturn reflect.ValueOf(v).Convert(t), nil\n\t}\n\n\t// keydef returns the property key and the default value based on the\n\t// name of the struct field and the options in the tag.\n\tkeydef := func(f reflect.StructField) (string, *string, map[string]string) {\n\t\t_key, _opts := parseTag(f.Tag.Get(\"properties\"))\n\n\t\tvar _def *string\n\t\tif d, ok := _opts[\"default\"]; ok {\n\t\t\t_def = &d\n\t\t}\n\t\tif _key != \"\" {\n\t\t\treturn _key, _def, _opts\n\t\t}\n\t\treturn f.Name, _def, _opts\n\t}\n\n\tswitch {\n\tcase isDuration(t) || isTime(t) || isBool(t) || isString(t) || isFloat(t) || isInt(t) || isUint(t):\n\t\ts, err := value()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tval, err := conv(s, t)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(val)\n\n\tcase isPtr(t):\n\t\treturn dec(p, key, def, opts, v.Elem())\n\n\tcase isStruct(t):\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tfv := v.Field(i)\n\t\t\tfk, def, opts := keydef(t.Field(i))\n\t\t\tif !fv.CanSet() {\n\t\t\t\treturn fmt.Errorf(\"cannot set %s\", t.Field(i).Name)\n\t\t\t}\n\t\t\tif fk == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif key != \"\" {\n\t\t\t\tfk = key + \".\" + fk\n\t\t\t}\n\t\t\tif err := dec(p, fk, def, opts, fv); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase isArray(t):\n\t\tval, err := value()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvals := split(val, \";\")\n\t\ta := reflect.MakeSlice(t, 0, len(vals))\n\t\tfor _, s := range vals {\n\t\t\tval, err := conv(s, t.Elem())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ta = reflect.Append(a, val)\n\t\t}\n\t\tv.Set(a)\n\n\tcase isMap(t):\n\t\tvalT := t.Elem()\n\t\tm := reflect.MakeMap(t)\n\t\tfor postfix := range p.FilterStripPrefix(key + \".\").m {\n\t\t\tpp := strings.SplitN(postfix, \".\", 2)\n\t\t\tmk, mv := pp[0], reflect.New(valT)\n\t\t\tif err := dec(p, key+\".\"+mk, nil, nil, mv); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tm.SetMapIndex(reflect.ValueOf(mk), mv.Elem())\n\t\t}\n\t\tv.Set(m)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %s\", t)\n\t}\n\treturn nil\n}\n\n// split splits a string on sep, trims whitespace of elements\n// and omits empty elements\nfunc split(s string, sep string) []string {\n\tvar a []string\n\tfor _, v := range strings.Split(s, sep) {\n\t\tif v = strings.TrimSpace(v); v != \"\" {\n\t\t\ta = append(a, v)\n\t\t}\n\t}\n\treturn a\n}\n\n// parseTag parses a \"key,k=v,k=v,...\"\nfunc parseTag(tag string) (key string, opts map[string]string) {\n\topts = map[string]string{}\n\tfor i, s := range strings.Split(tag, \",\") {\n\t\tif i == 0 {\n\t\t\tkey = s\n\t\t\tcontinue\n\t\t}\n\n\t\tpp := strings.SplitN(s, \"=\", 2)\n\t\tif len(pp) == 1 {\n\t\t\topts[pp[0]] = \"\"\n\t\t} else {\n\t\t\topts[pp[0]] = pp[1]\n\t\t}\n\t}\n\treturn key, opts\n}\n\nfunc isArray(t reflect.Type) bool    { return t.Kind() == reflect.Array || t.Kind() == reflect.Slice }\nfunc isBool(t reflect.Type) bool     { return t.Kind() == reflect.Bool }\nfunc isDuration(t reflect.Type) bool { return t == reflect.TypeOf(time.Second) }\nfunc isMap(t reflect.Type) bool      { return t.Kind() == reflect.Map }\nfunc isPtr(t reflect.Type) bool      { return t.Kind() == reflect.Ptr }\nfunc isString(t reflect.Type) bool   { return t.Kind() == reflect.String }\nfunc isStruct(t reflect.Type) bool   { return t.Kind() == reflect.Struct }\nfunc isTime(t reflect.Type) bool     { return t == reflect.TypeOf(time.Time{}) }\nfunc isFloat(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Float32 || t.Kind() == reflect.Float64\n}\nfunc isInt(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Int || t.Kind() == reflect.Int8 || t.Kind() == reflect.Int16 || t.Kind() == reflect.Int32 || t.Kind() == reflect.Int64\n}\nfunc isUint(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Uint || t.Kind() == reflect.Uint8 || t.Kind() == reflect.Uint16 || t.Kind() == reflect.Uint32 || t.Kind() == reflect.Uint64\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/doc.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties provides functions for reading and writing\n// ISO-8859-1 and UTF-8 encoded .properties files and has\n// support for recursive property expansion.\n//\n// Java properties files are ISO-8859-1 encoded and use Unicode\n// literals for characters outside the ISO character set. Unicode\n// literals can be used in UTF-8 encoded properties files but\n// aren't necessary.\n//\n// To load a single properties file use MustLoadFile():\n//\n//   p := properties.MustLoadFile(filename, properties.UTF8)\n//\n// To load multiple properties files use MustLoadFiles()\n// which loads the files in the given order and merges the\n// result. Missing properties files can be ignored if the\n// 'ignoreMissing' flag is set to true.\n//\n// Filenames can contain environment variables which are expanded\n// before loading.\n//\n//   f1 := \"/etc/myapp/myapp.conf\"\n//   f2 := \"/home/${USER}/myapp.conf\"\n//   p := MustLoadFiles([]string{f1, f2}, properties.UTF8, true)\n//\n// All of the different key/value delimiters ' ', ':' and '=' are\n// supported as well as the comment characters '!' and '#' and\n// multi-line values.\n//\n//   ! this is a comment\n//   # and so is this\n//\n//   # the following expressions are equal\n//   key value\n//   key=value\n//   key:value\n//   key = value\n//   key : value\n//   key = val\\\n//         ue\n//\n// Properties stores all comments preceding a key and provides\n// GetComments() and SetComments() methods to retrieve and\n// update them. The convenience functions GetComment() and\n// SetComment() allow access to the last comment. The\n// WriteComment() method writes properties files including\n// the comments and with the keys in the original order.\n// This can be used for sanitizing properties files.\n//\n// Property expansion is recursive and circular references\n// and malformed expressions are not allowed and cause an\n// error. Expansion of environment variables is supported.\n//\n//   # standard property\n//   key = value\n//\n//   # property expansion: key2 = value\n//   key2 = ${key}\n//\n//   # recursive expansion: key3 = value\n//   key3 = ${key2}\n//\n//   # circular reference (error)\n//   key = ${key}\n//\n//   # malformed expression (error)\n//   key = ${ke\n//\n//   # refers to the users' home dir\n//   home = ${HOME}\n//\n//   # local key takes precendence over env var: u = foo\n//   USER = foo\n//   u = ${USER}\n//\n// The default property expansion format is ${key} but can be\n// changed by setting different pre- and postfix values on the\n// Properties object.\n//\n//   p := properties.NewProperties()\n//   p.Prefix = \"#[\"\n//   p.Postfix = \"]#\"\n//\n// Properties provides convenience functions for getting typed\n// values with default values if the key does not exist or the\n// type conversion failed.\n//\n//   # Returns true if the value is either \"1\", \"on\", \"yes\" or \"true\"\n//   # Returns false for every other value and the default value if\n//   # the key does not exist.\n//   v = p.GetBool(\"key\", false)\n//\n//   # Returns the value if the key exists and the format conversion\n//   # was successful. Otherwise, the default value is returned.\n//   v = p.GetInt64(\"key\", 999)\n//   v = p.GetUint64(\"key\", 999)\n//   v = p.GetFloat64(\"key\", 123.0)\n//   v = p.GetString(\"key\", \"def\")\n//   v = p.GetDuration(\"key\", 999)\n//\n// As an alterantive properties may be applied with the standard\n// library's flag implementation at any time.\n//\n//   # Standard configuration\n//   v = flag.Int(\"key\", 999, \"help message\")\n//   flag.Parse()\n//\n//   # Merge p into the flag set\n//   p.MustFlag(flag.CommandLine)\n//\n// Properties provides several MustXXX() convenience functions\n// which will terminate the app if an error occurs. The behavior\n// of the failure is configurable and the default is to call\n// log.Fatal(err). To have the MustXXX() functions panic instead\n// of logging the error set a different ErrorHandler before\n// you use the Properties package.\n//\n//   properties.ErrorHandler = properties.PanicHandler\n//\n//   # Will panic instead of logging an error\n//   p := properties.MustLoadFile(\"config.properties\")\n//\n// You can also provide your own ErrorHandler function. The only requirement\n// is that the error handler function must exit after handling the error.\n//\n//   properties.ErrorHandler = func(err error) {\n//\t     fmt.Println(err)\n//       os.Exit(1)\n//   }\n//\n//   # Will write to stdout and then exit\n//   p := properties.MustLoadFile(\"config.properties\")\n//\n// Properties can also be loaded into a struct via the `Decode`\n// method, e.g.\n//\n//   type S struct {\n//       A string        `properties:\"a,default=foo\"`\n//       D time.Duration `properties:\"timeout,default=5s\"`\n//       E time.Time     `properties:\"expires,layout=2006-01-02,default=2015-01-01\"`\n//   }\n//\n// See `Decode()` method for the full documentation.\n//\n// The following documents provide a description of the properties\n// file format.\n//\n// http://en.wikipedia.org/wiki/.properties\n//\n// http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load%28java.io.Reader%29\n//\npackage properties\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/integrate.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\nimport \"flag\"\n\n// MustFlag sets flags that are skipped by dst.Parse when p contains\n// the respective key for flag.Flag.Name.\n//\n// It's use is recommended with command line arguments as in:\n// \tflag.Parse()\n// \tp.MustFlag(flag.CommandLine)\nfunc (p *Properties) MustFlag(dst *flag.FlagSet) {\n\tm := make(map[string]*flag.Flag)\n\tdst.VisitAll(func(f *flag.Flag) {\n\t\tm[f.Name] = f\n\t})\n\tdst.Visit(func(f *flag.Flag) {\n\t\tdelete(m, f.Name) // overridden\n\t})\n\n\tfor name, f := range m {\n\t\tv, ok := p.Get(name)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := f.Value.Set(v); err != nil {\n\t\t\tErrorHandler(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/lex.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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// Parts of the lexer are from the template/text/parser package\n// For these parts the following applies:\n//\n// 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 of the go 1.2\n// distribution.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// item represents a token or text string returned from the scanner.\ntype item struct {\n\ttyp itemType // The type of this item.\n\tpos int      // The starting position, in bytes, of this item in the input string.\n\tval string   // The value of this item.\n}\n\nfunc (i item) String() string {\n\tswitch {\n\tcase i.typ == itemEOF:\n\t\treturn \"EOF\"\n\tcase i.typ == itemError:\n\t\treturn i.val\n\tcase len(i.val) > 10:\n\t\treturn fmt.Sprintf(\"%.10q...\", i.val)\n\t}\n\treturn fmt.Sprintf(\"%q\", i.val)\n}\n\n// itemType identifies the type of lex items.\ntype itemType int\n\nconst (\n\titemError itemType = iota // error occurred; value is text of error\n\titemEOF\n\titemKey     // a key\n\titemValue   // a value\n\titemComment // a comment\n)\n\n// defines a constant for EOF\nconst eof = -1\n\n// permitted whitespace characters space, FF and TAB\nconst whitespace = \" \\f\\t\"\n\n// stateFn represents the state of the scanner as a function that returns the next state.\ntype stateFn func(*lexer) stateFn\n\n// lexer holds the state of the scanner.\ntype lexer struct {\n\tinput   string    // the string being scanned\n\tstate   stateFn   // the next lexing function to enter\n\tpos     int       // current position in the input\n\tstart   int       // start position of this item\n\twidth   int       // width of last rune read from input\n\tlastPos int       // position of most recent item returned by nextItem\n\trunes   []rune    // scanned runes for this item\n\titems   chan item // channel of scanned items\n}\n\n// next returns the next rune in the input.\nfunc (l *lexer) next() rune {\n\tif l.pos >= len(l.input) {\n\t\tl.width = 0\n\t\treturn eof\n\t}\n\tr, w := utf8.DecodeRuneInString(l.input[l.pos:])\n\tl.width = w\n\tl.pos += l.width\n\treturn r\n}\n\n// peek returns but does not consume the next rune in the input.\nfunc (l *lexer) peek() rune {\n\tr := l.next()\n\tl.backup()\n\treturn r\n}\n\n// backup steps back one rune. Can only be called once per call of next.\nfunc (l *lexer) backup() {\n\tl.pos -= l.width\n}\n\n// emit passes an item back to the client.\nfunc (l *lexer) emit(t itemType) {\n\ti := item{t, l.start, string(l.runes)}\n\tl.items <- i\n\tl.start = l.pos\n\tl.runes = l.runes[:0]\n}\n\n// ignore skips over the pending input before this point.\nfunc (l *lexer) ignore() {\n\tl.start = l.pos\n}\n\n// appends the rune to the current value\nfunc (l *lexer) appendRune(r rune) {\n\tl.runes = append(l.runes, r)\n}\n\n// accept consumes the next rune if it's from the valid set.\nfunc (l *lexer) accept(valid string) bool {\n\tif strings.ContainsRune(valid, l.next()) {\n\t\treturn true\n\t}\n\tl.backup()\n\treturn false\n}\n\n// acceptRun consumes a run of runes from the valid set.\nfunc (l *lexer) acceptRun(valid string) {\n\tfor strings.ContainsRune(valid, l.next()) {\n\t}\n\tl.backup()\n}\n\n// acceptRunUntil consumes a run of runes up to a terminator.\nfunc (l *lexer) acceptRunUntil(term rune) {\n\tfor term != l.next() {\n\t}\n\tl.backup()\n}\n\n// hasText returns true if the current parsed text is not empty.\nfunc (l *lexer) isNotEmpty() bool {\n\treturn l.pos > l.start\n}\n\n// lineNumber reports which line we're on, based on the position of\n// the previous item returned by nextItem. Doing it this way\n// means we don't have to worry about peek double counting.\nfunc (l *lexer) lineNumber() int {\n\treturn 1 + strings.Count(l.input[:l.lastPos], \"\\n\")\n}\n\n// errorf returns an error token and terminates the scan by passing\n// back a nil pointer that will be the next state, terminating l.nextItem.\nfunc (l *lexer) errorf(format string, args ...interface{}) stateFn {\n\tl.items <- item{itemError, l.start, fmt.Sprintf(format, args...)}\n\treturn nil\n}\n\n// nextItem returns the next item from the input.\nfunc (l *lexer) nextItem() item {\n\ti := <-l.items\n\tl.lastPos = i.pos\n\treturn i\n}\n\n// lex creates a new scanner for the input string.\nfunc lex(input string) *lexer {\n\tl := &lexer{\n\t\tinput: input,\n\t\titems: make(chan item),\n\t\trunes: make([]rune, 0, 32),\n\t}\n\tgo l.run()\n\treturn l\n}\n\n// run runs the state machine for the lexer.\nfunc (l *lexer) run() {\n\tfor l.state = lexBeforeKey(l); l.state != nil; {\n\t\tl.state = l.state(l)\n\t}\n}\n\n// state functions\n\n// lexBeforeKey scans until a key begins.\nfunc lexBeforeKey(l *lexer) stateFn {\n\tswitch r := l.next(); {\n\tcase isEOF(r):\n\t\tl.emit(itemEOF)\n\t\treturn nil\n\n\tcase isEOL(r):\n\t\tl.ignore()\n\t\treturn lexBeforeKey\n\n\tcase isComment(r):\n\t\treturn lexComment\n\n\tcase isWhitespace(r):\n\t\tl.acceptRun(whitespace)\n\t\tl.ignore()\n\t\treturn lexKey\n\n\tdefault:\n\t\tl.backup()\n\t\treturn lexKey\n\t}\n}\n\n// lexComment scans a comment line. The comment character has already been scanned.\nfunc lexComment(l *lexer) stateFn {\n\tl.acceptRun(whitespace)\n\tl.ignore()\n\tfor {\n\t\tswitch r := l.next(); {\n\t\tcase isEOF(r):\n\t\t\tl.ignore()\n\t\t\tl.emit(itemEOF)\n\t\t\treturn nil\n\t\tcase isEOL(r):\n\t\t\tl.emit(itemComment)\n\t\t\treturn lexBeforeKey\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n}\n\n// lexKey scans the key up to a delimiter\nfunc lexKey(l *lexer) stateFn {\n\tvar r rune\n\nLoop:\n\tfor {\n\t\tswitch r = l.next(); {\n\n\t\tcase isEscape(r):\n\t\t\terr := l.scanEscapeSequence()\n\t\t\tif err != nil {\n\t\t\t\treturn l.errorf(err.Error())\n\t\t\t}\n\n\t\tcase isEndOfKey(r):\n\t\t\tl.backup()\n\t\t\tbreak Loop\n\n\t\tcase isEOF(r):\n\t\t\tbreak Loop\n\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n\n\tif len(l.runes) > 0 {\n\t\tl.emit(itemKey)\n\t}\n\n\tif isEOF(r) {\n\t\tl.emit(itemEOF)\n\t\treturn nil\n\t}\n\n\treturn lexBeforeValue\n}\n\n// lexBeforeValue scans the delimiter between key and value.\n// Leading and trailing whitespace is ignored.\n// We expect to be just after the key.\nfunc lexBeforeValue(l *lexer) stateFn {\n\tl.acceptRun(whitespace)\n\tl.accept(\":=\")\n\tl.acceptRun(whitespace)\n\tl.ignore()\n\treturn lexValue\n}\n\n// lexValue scans text until the end of the line. We expect to be just after the delimiter.\nfunc lexValue(l *lexer) stateFn {\n\tfor {\n\t\tswitch r := l.next(); {\n\t\tcase isEscape(r):\n\t\t\tif isEOL(l.peek()) {\n\t\t\t\tl.next()\n\t\t\t\tl.acceptRun(whitespace)\n\t\t\t} else {\n\t\t\t\terr := l.scanEscapeSequence()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn l.errorf(err.Error())\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase isEOL(r):\n\t\t\tl.emit(itemValue)\n\t\t\tl.ignore()\n\t\t\treturn lexBeforeKey\n\n\t\tcase isEOF(r):\n\t\t\tl.emit(itemValue)\n\t\t\tl.emit(itemEOF)\n\t\t\treturn nil\n\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n}\n\n// scanEscapeSequence scans either one of the escaped characters\n// or a unicode literal. We expect to be after the escape character.\nfunc (l *lexer) scanEscapeSequence() error {\n\tswitch r := l.next(); {\n\n\tcase isEscapedCharacter(r):\n\t\tl.appendRune(decodeEscapedCharacter(r))\n\t\treturn nil\n\n\tcase atUnicodeLiteral(r):\n\t\treturn l.scanUnicodeLiteral()\n\n\tcase isEOF(r):\n\t\treturn fmt.Errorf(\"premature EOF\")\n\n\t// silently drop the escape character and append the rune as is\n\tdefault:\n\t\tl.appendRune(r)\n\t\treturn nil\n\t}\n}\n\n// scans a unicode literal in the form \\uXXXX. We expect to be after the \\u.\nfunc (l *lexer) scanUnicodeLiteral() error {\n\t// scan the digits\n\td := make([]rune, 4)\n\tfor i := 0; i < 4; i++ {\n\t\td[i] = l.next()\n\t\tif d[i] == eof || !strings.ContainsRune(\"0123456789abcdefABCDEF\", d[i]) {\n\t\t\treturn fmt.Errorf(\"invalid unicode literal\")\n\t\t}\n\t}\n\n\t// decode the digits into a rune\n\tr, err := strconv.ParseInt(string(d), 16, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tl.appendRune(rune(r))\n\treturn nil\n}\n\n// decodeEscapedCharacter returns the unescaped rune. We expect to be after the escape character.\nfunc decodeEscapedCharacter(r rune) rune {\n\tswitch r {\n\tcase 'f':\n\t\treturn '\\f'\n\tcase 'n':\n\t\treturn '\\n'\n\tcase 'r':\n\t\treturn '\\r'\n\tcase 't':\n\t\treturn '\\t'\n\tdefault:\n\t\treturn r\n\t}\n}\n\n// atUnicodeLiteral reports whether we are at a unicode literal.\n// The escape character has already been consumed.\nfunc atUnicodeLiteral(r rune) bool {\n\treturn r == 'u'\n}\n\n// isComment reports whether we are at the start of a comment.\nfunc isComment(r rune) bool {\n\treturn r == '#' || r == '!'\n}\n\n// isEndOfKey reports whether the rune terminates the current key.\nfunc isEndOfKey(r rune) bool {\n\treturn strings.ContainsRune(\" \\f\\t\\r\\n:=\", r)\n}\n\n// isEOF reports whether we are at EOF.\nfunc isEOF(r rune) bool {\n\treturn r == eof\n}\n\n// isEOL reports whether we are at a new line character.\nfunc isEOL(r rune) bool {\n\treturn r == '\\n' || r == '\\r'\n}\n\n// isEscape reports whether the rune is the escape character which\n// prefixes unicode literals and other escaped characters.\nfunc isEscape(r rune) bool {\n\treturn r == '\\\\'\n}\n\n// isEscapedCharacter reports whether we are at one of the characters that need escaping.\n// The escape character has already been consumed.\nfunc isEscapedCharacter(r rune) bool {\n\treturn strings.ContainsRune(\" :=fnrt\", r)\n}\n\n// isWhitespace reports whether the rune is a whitespace character.\nfunc isWhitespace(r rune) bool {\n\treturn strings.ContainsRune(whitespace, r)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/load.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n)\n\n// Encoding specifies encoding of the input data.\ntype Encoding uint\n\nconst (\n\t// UTF8 interprets the input data as UTF-8.\n\tUTF8 Encoding = 1 << iota\n\n\t// ISO_8859_1 interprets the input data as ISO-8859-1.\n\tISO_8859_1\n)\n\n// Load reads a buffer into a Properties struct.\nfunc Load(buf []byte, enc Encoding) (*Properties, error) {\n\treturn loadBuf(buf, enc)\n}\n\n// LoadString reads an UTF8 string into a properties struct.\nfunc LoadString(s string) (*Properties, error) {\n\treturn loadBuf([]byte(s), UTF8)\n}\n\n// LoadMap creates a new Properties struct from a string map.\nfunc LoadMap(m map[string]string) *Properties {\n\tp := NewProperties()\n\tfor k, v := range m {\n\t\tp.Set(k, v)\n\t}\n\treturn p\n}\n\n// LoadFile reads a file into a Properties struct.\nfunc LoadFile(filename string, enc Encoding) (*Properties, error) {\n\treturn loadAll([]string{filename}, enc, false)\n}\n\n// LoadFiles reads multiple files in the given order into\n// a Properties struct. If 'ignoreMissing' is true then\n// non-existent files will not be reported as error.\nfunc LoadFiles(filenames []string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\treturn loadAll(filenames, enc, ignoreMissing)\n}\n\n// LoadURL reads the content of the URL into a Properties struct.\n//\n// The encoding is determined via the Content-Type header which\n// should be set to 'text/plain'. If the 'charset' parameter is\n// missing, 'iso-8859-1' or 'latin1' the encoding is set to\n// ISO-8859-1. If the 'charset' parameter is set to 'utf-8' the\n// encoding is set to UTF-8. A missing content type header is\n// interpreted as 'text/plain; charset=utf-8'.\nfunc LoadURL(url string) (*Properties, error) {\n\treturn loadAll([]string{url}, UTF8, false)\n}\n\n// LoadURLs reads the content of multiple URLs in the given order into a\n// Properties struct. If 'ignoreMissing' is true then a 404 status code will\n// not be reported as error. See LoadURL for the Content-Type header\n// and the encoding.\nfunc LoadURLs(urls []string, ignoreMissing bool) (*Properties, error) {\n\treturn loadAll(urls, UTF8, ignoreMissing)\n}\n\n// LoadAll reads the content of multiple URLs or files in the given order into a\n// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will\n// not be reported as error. Encoding sets the encoding for files. For the URLs please see\n// LoadURL for the Content-Type header and the encoding.\nfunc LoadAll(names []string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\treturn loadAll(names, enc, ignoreMissing)\n}\n\n// MustLoadString reads an UTF8 string into a Properties struct and\n// panics on error.\nfunc MustLoadString(s string) *Properties {\n\treturn must(LoadString(s))\n}\n\n// MustLoadFile reads a file into a Properties struct and\n// panics on error.\nfunc MustLoadFile(filename string, enc Encoding) *Properties {\n\treturn must(LoadFile(filename, enc))\n}\n\n// MustLoadFiles reads multiple files in the given order into\n// a Properties struct and panics on error. If 'ignoreMissing'\n// is true then non-existent files will not be reported as error.\nfunc MustLoadFiles(filenames []string, enc Encoding, ignoreMissing bool) *Properties {\n\treturn must(LoadFiles(filenames, enc, ignoreMissing))\n}\n\n// MustLoadURL reads the content of a URL into a Properties struct and\n// panics on error.\nfunc MustLoadURL(url string) *Properties {\n\treturn must(LoadURL(url))\n}\n\n// MustLoadURLs reads the content of multiple URLs in the given order into a\n// Properties struct and panics on error. If 'ignoreMissing' is true then a 404\n// status code will not be reported as error.\nfunc MustLoadURLs(urls []string, ignoreMissing bool) *Properties {\n\treturn must(LoadURLs(urls, ignoreMissing))\n}\n\n// MustLoadAll reads the content of multiple URLs or files in the given order into a\n// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will\n// not be reported as error. Encoding sets the encoding for files. For the URLs please see\n// LoadURL for the Content-Type header and the encoding. It panics on error.\nfunc MustLoadAll(names []string, enc Encoding, ignoreMissing bool) *Properties {\n\treturn must(LoadAll(names, enc, ignoreMissing))\n}\n\nfunc loadBuf(buf []byte, enc Encoding) (*Properties, error) {\n\tp, err := parse(convert(buf, enc))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, p.check()\n}\n\nfunc loadAll(names []string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\tresult := NewProperties()\n\tfor _, name := range names {\n\t\tn, err := expandName(name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvar p *Properties\n\t\tif strings.HasPrefix(n, \"http://\") || strings.HasPrefix(n, \"https://\") {\n\t\t\tp, err = loadURL(n, ignoreMissing)\n\t\t} else {\n\t\t\tp, err = loadFile(n, enc, ignoreMissing)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult.Merge(p)\n\n\t}\n\treturn result, result.check()\n}\n\nfunc loadFile(filename string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\tdata, err := ioutil.ReadFile(filename)\n\tif err != nil {\n\t\tif ignoreMissing && os.IsNotExist(err) {\n\t\t\tLogPrintf(\"properties: %s not found. skipping\", filename)\n\t\t\treturn NewProperties(), nil\n\t\t}\n\t\treturn nil, err\n\t}\n\tp, err := parse(convert(data, enc))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, nil\n}\n\nfunc loadURL(url string, ignoreMissing bool) (*Properties, error) {\n\tresp, err := http.Get(url)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"properties: error fetching %q. %s\", url, err)\n\t}\n\tif resp.StatusCode == 404 && ignoreMissing {\n\t\tLogPrintf(\"properties: %s returned %d. skipping\", url, resp.StatusCode)\n\t\treturn NewProperties(), nil\n\t}\n\tif resp.StatusCode != 200 {\n\t\treturn nil, fmt.Errorf(\"properties: %s returned %d\", url, resp.StatusCode)\n\t}\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"properties: %s error reading response. %s\", url, err)\n\t}\n\tif err = resp.Body.Close(); err != nil {\n\t\treturn nil, fmt.Errorf(\"properties: %s error reading response. %s\", url, err)\n\t}\n\n\tct := resp.Header.Get(\"Content-Type\")\n\tvar enc Encoding\n\tswitch strings.ToLower(ct) {\n\tcase \"text/plain\", \"text/plain; charset=iso-8859-1\", \"text/plain; charset=latin1\":\n\t\tenc = ISO_8859_1\n\tcase \"\", \"text/plain; charset=utf-8\":\n\t\tenc = UTF8\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"properties: invalid content type %s\", ct)\n\t}\n\n\tp, err := parse(convert(body, enc))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, nil\n}\n\nfunc must(p *Properties, err error) *Properties {\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn p\n}\n\n// expandName expands ${ENV_VAR} expressions in a name.\n// If the environment variable does not exist then it will be replaced\n// with an empty string. Malformed expressions like \"${ENV_VAR\" will\n// be reported as error.\nfunc expandName(name string) (string, error) {\n\treturn expand(name, make(map[string]bool), \"${\", \"}\", make(map[string]string))\n}\n\n// Interprets a byte buffer either as an ISO-8859-1 or UTF-8 encoded string.\n// For ISO-8859-1 we can convert each byte straight into a rune since the\n// first 256 unicode code points cover ISO-8859-1.\nfunc convert(buf []byte, enc Encoding) string {\n\tswitch enc {\n\tcase UTF8:\n\t\treturn string(buf)\n\tcase ISO_8859_1:\n\t\trunes := make([]rune, len(buf))\n\t\tfor i, b := range buf {\n\t\t\trunes[i] = rune(b)\n\t\t}\n\t\treturn string(runes)\n\tdefault:\n\t\tErrorHandler(fmt.Errorf(\"unsupported encoding %v\", enc))\n\t}\n\tpanic(\"ErrorHandler should exit\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/parser.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype parser struct {\n\tlex *lexer\n}\n\nfunc parse(input string) (properties *Properties, err error) {\n\tp := &parser{lex: lex(input)}\n\tdefer p.recover(&err)\n\n\tproperties = NewProperties()\n\tkey := \"\"\n\tcomments := []string{}\n\n\tfor {\n\t\ttoken := p.expectOneOf(itemComment, itemKey, itemEOF)\n\t\tswitch token.typ {\n\t\tcase itemEOF:\n\t\t\tgoto done\n\t\tcase itemComment:\n\t\t\tcomments = append(comments, token.val)\n\t\t\tcontinue\n\t\tcase itemKey:\n\t\t\tkey = token.val\n\t\t\tif _, ok := properties.m[key]; !ok {\n\t\t\t\tproperties.k = append(properties.k, key)\n\t\t\t}\n\t\t}\n\n\t\ttoken = p.expectOneOf(itemValue, itemEOF)\n\t\tif len(comments) > 0 {\n\t\t\tproperties.c[key] = comments\n\t\t\tcomments = []string{}\n\t\t}\n\t\tswitch token.typ {\n\t\tcase itemEOF:\n\t\t\tproperties.m[key] = \"\"\n\t\t\tgoto done\n\t\tcase itemValue:\n\t\t\tproperties.m[key] = token.val\n\t\t}\n\t}\n\ndone:\n\treturn properties, nil\n}\n\nfunc (p *parser) errorf(format string, args ...interface{}) {\n\tformat = fmt.Sprintf(\"properties: Line %d: %s\", p.lex.lineNumber(), format)\n\tpanic(fmt.Errorf(format, args...))\n}\n\nfunc (p *parser) expect(expected itemType) (token item) {\n\ttoken = p.lex.nextItem()\n\tif token.typ != expected {\n\t\tp.unexpected(token)\n\t}\n\treturn token\n}\n\nfunc (p *parser) expectOneOf(expected ...itemType) (token item) {\n\ttoken = p.lex.nextItem()\n\tfor _, v := range expected {\n\t\tif token.typ == v {\n\t\t\treturn token\n\t\t}\n\t}\n\tp.unexpected(token)\n\tpanic(\"unexpected token\")\n}\n\nfunc (p *parser) unexpected(token item) {\n\tp.errorf(token.String())\n}\n\n// recover is the handler that turns panics into returns from the top level of Parse.\nfunc (p *parser) recover(errp *error) {\n\te := recover()\n\tif e != nil {\n\t\tif _, ok := e.(runtime.Error); ok {\n\t\t\tpanic(e)\n\t\t}\n\t\t*errp = e.(error)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/properties.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\n// BUG(frank): Set() does not check for invalid unicode literals since this is currently handled by the lexer.\n// BUG(frank): Write() does not allow to configure the newline character. Therefore, on Windows LF is used.\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n)\n\n// ErrorHandlerFunc defines the type of function which handles failures\n// of the MustXXX() functions. An error handler function must exit\n// the application after handling the error.\ntype ErrorHandlerFunc func(error)\n\n// ErrorHandler is the function which handles failures of the MustXXX()\n// functions. The default is LogFatalHandler.\nvar ErrorHandler ErrorHandlerFunc = LogFatalHandler\n\n// LogHandlerFunc defines the function prototype for logging errors.\ntype LogHandlerFunc func(fmt string, args ...interface{})\n\n// LogPrintf defines a log handler which uses log.Printf.\nvar LogPrintf LogHandlerFunc = log.Printf\n\n// LogFatalHandler handles the error by logging a fatal error and exiting.\nfunc LogFatalHandler(err error) {\n\tlog.Fatal(err)\n}\n\n// PanicHandler handles the error by panicking.\nfunc PanicHandler(err error) {\n\tpanic(err)\n}\n\n// -----------------------------------------------------------------------------\n\n// A Properties contains the key/value pairs from the properties input.\n// All values are stored in unexpanded form and are expanded at runtime\ntype Properties struct {\n\t// Pre-/Postfix for property expansion.\n\tPrefix  string\n\tPostfix string\n\n\t// DisableExpansion controls the expansion of properties on Get()\n\t// and the check for circular references on Set(). When set to\n\t// true Properties behaves like a simple key/value store and does\n\t// not check for circular references on Get() or on Set().\n\tDisableExpansion bool\n\n\t// Stores the key/value pairs\n\tm map[string]string\n\n\t// Stores the comments per key.\n\tc map[string][]string\n\n\t// Stores the keys in order of appearance.\n\tk []string\n}\n\n// NewProperties creates a new Properties struct with the default\n// configuration for \"${key}\" expressions.\nfunc NewProperties() *Properties {\n\treturn &Properties{\n\t\tPrefix:  \"${\",\n\t\tPostfix: \"}\",\n\t\tm:       map[string]string{},\n\t\tc:       map[string][]string{},\n\t\tk:       []string{},\n\t}\n}\n\n// Get returns the expanded value for the given key if exists.\n// Otherwise, ok is false.\nfunc (p *Properties) Get(key string) (value string, ok bool) {\n\tv, ok := p.m[key]\n\tif p.DisableExpansion {\n\t\treturn v, ok\n\t}\n\tif !ok {\n\t\treturn \"\", false\n\t}\n\n\texpanded, err := p.expand(v)\n\n\t// we guarantee that the expanded value is free of\n\t// circular references and malformed expressions\n\t// so we panic if we still get an error here.\n\tif err != nil {\n\t\tErrorHandler(fmt.Errorf(\"%s in %q\", err, key+\" = \"+v))\n\t}\n\n\treturn expanded, true\n}\n\n// MustGet returns the expanded value for the given key if exists.\n// Otherwise, it panics.\nfunc (p *Properties) MustGet(key string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\tErrorHandler(invalidKeyError(key))\n\tpanic(\"ErrorHandler should exit\")\n}\n\n// ----------------------------------------------------------------------------\n\n// ClearComments removes the comments for all keys.\nfunc (p *Properties) ClearComments() {\n\tp.c = map[string][]string{}\n}\n\n// ----------------------------------------------------------------------------\n\n// GetComment returns the last comment before the given key or an empty string.\nfunc (p *Properties) GetComment(key string) string {\n\tcomments, ok := p.c[key]\n\tif !ok || len(comments) == 0 {\n\t\treturn \"\"\n\t}\n\treturn comments[len(comments)-1]\n}\n\n// ----------------------------------------------------------------------------\n\n// GetComments returns all comments that appeared before the given key or nil.\nfunc (p *Properties) GetComments(key string) []string {\n\tif comments, ok := p.c[key]; ok {\n\t\treturn comments\n\t}\n\treturn nil\n}\n\n// ----------------------------------------------------------------------------\n\n// SetComment sets the comment for the key.\nfunc (p *Properties) SetComment(key, comment string) {\n\tp.c[key] = []string{comment}\n}\n\n// ----------------------------------------------------------------------------\n\n// SetComments sets the comments for the key. If the comments are nil then\n// all comments for this key are deleted.\nfunc (p *Properties) SetComments(key string, comments []string) {\n\tif comments == nil {\n\t\tdelete(p.c, key)\n\t\treturn\n\t}\n\tp.c[key] = comments\n}\n\n// ----------------------------------------------------------------------------\n\n// GetBool checks if the expanded value is one of '1', 'yes',\n// 'true' or 'on' if the key exists. The comparison is case-insensitive.\n// If the key does not exist the default value is returned.\nfunc (p *Properties) GetBool(key string, def bool) bool {\n\tv, err := p.getBool(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetBool checks if the expanded value is one of '1', 'yes',\n// 'true' or 'on' if the key exists. The comparison is case-insensitive.\n// If the key does not exist the function panics.\nfunc (p *Properties) MustGetBool(key string) bool {\n\tv, err := p.getBool(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getBool(key string) (value bool, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\treturn boolVal(v), nil\n\t}\n\treturn false, invalidKeyError(key)\n}\n\nfunc boolVal(v string) bool {\n\tv = strings.ToLower(v)\n\treturn v == \"1\" || v == \"true\" || v == \"yes\" || v == \"on\"\n}\n\n// ----------------------------------------------------------------------------\n\n// GetDuration parses the expanded value as an time.Duration (in ns) if the\n// key exists. If key does not exist or the value cannot be parsed the default\n// value is returned. In almost all cases you want to use GetParsedDuration().\nfunc (p *Properties) GetDuration(key string, def time.Duration) time.Duration {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn time.Duration(v)\n}\n\n// MustGetDuration parses the expanded value as an time.Duration (in ns) if\n// the key exists. If key does not exist or the value cannot be parsed the\n// function panics. In almost all cases you want to use MustGetParsedDuration().\nfunc (p *Properties) MustGetDuration(key string) time.Duration {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn time.Duration(v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetParsedDuration(key string, def time.Duration) time.Duration {\n\ts, ok := p.Get(key)\n\tif !ok {\n\t\treturn def\n\t}\n\tv, err := time.ParseDuration(s)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetParsedDuration(key string) time.Duration {\n\ts, ok := p.Get(key)\n\tif !ok {\n\t\tErrorHandler(invalidKeyError(key))\n\t}\n\tv, err := time.ParseDuration(s)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\n// ----------------------------------------------------------------------------\n\n// GetFloat64 parses the expanded value as a float64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetFloat64(key string, def float64) float64 {\n\tv, err := p.getFloat64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetFloat64 parses the expanded value as a float64 if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetFloat64(key string) float64 {\n\tv, err := p.getFloat64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getFloat64(key string) (value float64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseFloat(v, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetInt parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned. If the value does not fit into an int the\n// function panics with an out of range error.\nfunc (p *Properties) GetInt(key string, def int) int {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn intRangeCheck(key, v)\n}\n\n// MustGetInt parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\n// If the value does not fit into an int the function panics with\n// an out of range error.\nfunc (p *Properties) MustGetInt(key string) int {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn intRangeCheck(key, v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetInt64 parses the expanded value as an int64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetInt64(key string, def int64) int64 {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetInt64 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetInt64(key string) int64 {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getInt64(key string) (value int64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseInt(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetUint parses the expanded value as an uint if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned. If the value does not fit into an int the\n// function panics with an out of range error.\nfunc (p *Properties) GetUint(key string, def uint) uint {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn uintRangeCheck(key, v)\n}\n\n// MustGetUint parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\n// If the value does not fit into an int the function panics with\n// an out of range error.\nfunc (p *Properties) MustGetUint(key string) uint {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn uintRangeCheck(key, v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetUint64 parses the expanded value as an uint64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetUint64(key string, def uint64) uint64 {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetUint64 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetUint64(key string) uint64 {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getUint64(key string) (value uint64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseUint(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetString returns the expanded value for the given key if exists or\n// the default value otherwise.\nfunc (p *Properties) GetString(key, def string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\treturn def\n}\n\n// MustGetString returns the expanded value for the given key if exists or\n// panics otherwise.\nfunc (p *Properties) MustGetString(key string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\tErrorHandler(invalidKeyError(key))\n\tpanic(\"ErrorHandler should exit\")\n}\n\n// ----------------------------------------------------------------------------\n\n// Filter returns a new properties object which contains all properties\n// for which the key matches the pattern.\nfunc (p *Properties) Filter(pattern string) (*Properties, error) {\n\tre, err := regexp.Compile(pattern)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn p.FilterRegexp(re), nil\n}\n\n// FilterRegexp returns a new properties object which contains all properties\n// for which the key matches the regular expression.\nfunc (p *Properties) FilterRegexp(re *regexp.Regexp) *Properties {\n\tpp := NewProperties()\n\tfor _, k := range p.k {\n\t\tif re.MatchString(k) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)\n\t\t\tpp.Set(k, p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// FilterPrefix returns a new properties object with a subset of all keys\n// with the given prefix.\nfunc (p *Properties) FilterPrefix(prefix string) *Properties {\n\tpp := NewProperties()\n\tfor _, k := range p.k {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)\n\t\t\tpp.Set(k, p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// FilterStripPrefix returns a new properties object with a subset of all keys\n// with the given prefix and the prefix removed from the keys.\nfunc (p *Properties) FilterStripPrefix(prefix string) *Properties {\n\tpp := NewProperties()\n\tn := len(prefix)\n\tfor _, k := range p.k {\n\t\tif len(k) > len(prefix) && strings.HasPrefix(k, prefix) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are modifying keys I am not entirely sure whether we can create a circular reference\n\t\t\t// TODO(fs): this function should probably return an error but the signature is fixed\n\t\t\tpp.Set(k[n:], p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// Len returns the number of keys.\nfunc (p *Properties) Len() int {\n\treturn len(p.m)\n}\n\n// Keys returns all keys in the same order as in the input.\nfunc (p *Properties) Keys() []string {\n\tkeys := make([]string, len(p.k))\n\tcopy(keys, p.k)\n\treturn keys\n}\n\n// Set sets the property key to the corresponding value.\n// If a value for key existed before then ok is true and prev\n// contains the previous value. If the value contains a\n// circular reference or a malformed expression then\n// an error is returned.\n// An empty key is silently ignored.\nfunc (p *Properties) Set(key, value string) (prev string, ok bool, err error) {\n\tif key == \"\" {\n\t\treturn \"\", false, nil\n\t}\n\n\t// if expansion is disabled we allow circular references\n\tif p.DisableExpansion {\n\t\tprev, ok = p.Get(key)\n\t\tp.m[key] = value\n\t\treturn prev, ok, nil\n\t}\n\n\t// to check for a circular reference we temporarily need\n\t// to set the new value. If there is an error then revert\n\t// to the previous state. Only if all tests are successful\n\t// then we add the key to the p.k list.\n\tprev, ok = p.Get(key)\n\tp.m[key] = value\n\n\t// now check for a circular reference\n\t_, err = p.expand(value)\n\tif err != nil {\n\n\t\t// revert to the previous state\n\t\tif ok {\n\t\t\tp.m[key] = prev\n\t\t} else {\n\t\t\tdelete(p.m, key)\n\t\t}\n\n\t\treturn \"\", false, err\n\t}\n\n\tif !ok {\n\t\tp.k = append(p.k, key)\n\t}\n\n\treturn prev, ok, nil\n}\n\n// SetValue sets property key to the default string value\n// as defined by fmt.Sprintf(\"%v\").\nfunc (p *Properties) SetValue(key string, value interface{}) error {\n\t_, _, err := p.Set(key, fmt.Sprintf(\"%v\", value))\n\treturn err\n}\n\n// MustSet sets the property key to the corresponding value.\n// If a value for key existed before then ok is true and prev\n// contains the previous value. An empty key is silently ignored.\nfunc (p *Properties) MustSet(key, value string) (prev string, ok bool) {\n\tprev, ok, err := p.Set(key, value)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn prev, ok\n}\n\n// String returns a string of all expanded 'key = value' pairs.\nfunc (p *Properties) String() string {\n\tvar s string\n\tfor _, key := range p.k {\n\t\tvalue, _ := p.Get(key)\n\t\ts = fmt.Sprintf(\"%s%s = %s\\n\", s, key, value)\n\t}\n\treturn s\n}\n\n// Write writes all unexpanded 'key = value' pairs to the given writer.\n// Write returns the number of bytes written and any write error encountered.\nfunc (p *Properties) Write(w io.Writer, enc Encoding) (n int, err error) {\n\treturn p.WriteComment(w, \"\", enc)\n}\n\n// WriteComment writes all unexpanced 'key = value' pairs to the given writer.\n// If prefix is not empty then comments are written with a blank line and the\n// given prefix. The prefix should be either \"# \" or \"! \" to be compatible with\n// the properties file format. Otherwise, the properties parser will not be\n// able to read the file back in. It returns the number of bytes written and\n// any write error encountered.\nfunc (p *Properties) WriteComment(w io.Writer, prefix string, enc Encoding) (n int, err error) {\n\tvar x int\n\n\tfor _, key := range p.k {\n\t\tvalue := p.m[key]\n\n\t\tif prefix != \"\" {\n\t\t\tif comments, ok := p.c[key]; ok {\n\t\t\t\t// don't print comments if they are all empty\n\t\t\t\tallEmpty := true\n\t\t\t\tfor _, c := range comments {\n\t\t\t\t\tif c != \"\" {\n\t\t\t\t\t\tallEmpty = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !allEmpty {\n\t\t\t\t\t// add a blank line between entries but not at the top\n\t\t\t\t\tif len(comments) > 0 && n > 0 {\n\t\t\t\t\t\tx, err = fmt.Fprintln(w)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += x\n\t\t\t\t\t}\n\n\t\t\t\t\tfor _, c := range comments {\n\t\t\t\t\t\tx, err = fmt.Fprintf(w, \"%s%s\\n\", prefix, encode(c, \"\", enc))\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += x\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tx, err = fmt.Fprintf(w, \"%s = %s\\n\", encode(key, \" :\", enc), encode(value, \"\", enc))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tn += x\n\t}\n\treturn\n}\n\n// Map returns a copy of the properties as a map.\nfunc (p *Properties) Map() map[string]string {\n\tm := make(map[string]string)\n\tfor k, v := range p.m {\n\t\tm[k] = v\n\t}\n\treturn m\n}\n\n// FilterFunc returns a copy of the properties which includes the values which passed all filters.\nfunc (p *Properties) FilterFunc(filters ...func(k, v string) bool) *Properties {\n\tpp := NewProperties()\nouter:\n\tfor k, v := range p.m {\n\t\tfor _, f := range filters {\n\t\t\tif !f(k, v) {\n\t\t\t\tcontinue outer\n\t\t\t}\n\t\t\tpp.Set(k, v)\n\t\t}\n\t}\n\treturn pp\n}\n\n// ----------------------------------------------------------------------------\n\n// Delete removes the key and its comments.\nfunc (p *Properties) Delete(key string) {\n\tdelete(p.m, key)\n\tdelete(p.c, key)\n\tnewKeys := []string{}\n\tfor _, k := range p.k {\n\t\tif k != key {\n\t\t\tnewKeys = append(newKeys, k)\n\t\t}\n\t}\n\tp.k = newKeys\n}\n\n// Merge merges properties, comments and keys from other *Properties into p\nfunc (p *Properties) Merge(other *Properties) {\n\tfor k, v := range other.m {\n\t\tp.m[k] = v\n\t}\n\tfor k, v := range other.c {\n\t\tp.c[k] = v\n\t}\n\nouter:\n\tfor _, otherKey := range other.k {\n\t\tfor _, key := range p.k {\n\t\t\tif otherKey == key {\n\t\t\t\tcontinue outer\n\t\t\t}\n\t\t}\n\t\tp.k = append(p.k, otherKey)\n\t}\n}\n\n// ----------------------------------------------------------------------------\n\n// check expands all values and returns an error if a circular reference or\n// a malformed expression was found.\nfunc (p *Properties) check() error {\n\tfor _, value := range p.m {\n\t\tif _, err := p.expand(value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *Properties) expand(input string) (string, error) {\n\t// no pre/postfix -> nothing to expand\n\tif p.Prefix == \"\" && p.Postfix == \"\" {\n\t\treturn input, nil\n\t}\n\n\treturn expand(input, make(map[string]bool), p.Prefix, p.Postfix, p.m)\n}\n\n// expand recursively expands expressions of '(prefix)key(postfix)' to their corresponding values.\n// The function keeps track of the keys that were already expanded and stops if it\n// detects a circular reference or a malformed expression of the form '(prefix)key'.\nfunc expand(s string, keys map[string]bool, prefix, postfix string, values map[string]string) (string, error) {\n\tstart := strings.Index(s, prefix)\n\tif start == -1 {\n\t\treturn s, nil\n\t}\n\n\tkeyStart := start + len(prefix)\n\tkeyLen := strings.Index(s[keyStart:], postfix)\n\tif keyLen == -1 {\n\t\treturn \"\", fmt.Errorf(\"malformed expression\")\n\t}\n\n\tend := keyStart + keyLen + len(postfix) - 1\n\tkey := s[keyStart : keyStart+keyLen]\n\n\t// fmt.Printf(\"s:%q pp:%q start:%d end:%d keyStart:%d keyLen:%d key:%q\\n\", s, prefix + \"...\" + postfix, start, end, keyStart, keyLen, key)\n\n\tif _, ok := keys[key]; ok {\n\t\treturn \"\", fmt.Errorf(\"circular reference\")\n\t}\n\n\tval, ok := values[key]\n\tif !ok {\n\t\tval = os.Getenv(key)\n\t}\n\n\t// remember that we've seen the key\n\tkeys[key] = true\n\n\treturn expand(s[:start]+val+s[end+1:], keys, prefix, postfix, values)\n}\n\n// encode encodes a UTF-8 string to ISO-8859-1 and escapes some characters.\nfunc encode(s string, special string, enc Encoding) string {\n\tswitch enc {\n\tcase UTF8:\n\t\treturn encodeUtf8(s, special)\n\tcase ISO_8859_1:\n\t\treturn encodeIso(s, special)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported encoding %v\", enc))\n\t}\n}\n\nfunc encodeUtf8(s string, special string) string {\n\tv := \"\"\n\tfor pos := 0; pos < len(s); {\n\t\tr, w := utf8.DecodeRuneInString(s[pos:])\n\t\tpos += w\n\t\tv += escape(r, special)\n\t}\n\treturn v\n}\n\nfunc encodeIso(s string, special string) string {\n\tvar r rune\n\tvar w int\n\tvar v string\n\tfor pos := 0; pos < len(s); {\n\t\tswitch r, w = utf8.DecodeRuneInString(s[pos:]); {\n\t\tcase r < 1<<8: // single byte rune -> escape special chars only\n\t\t\tv += escape(r, special)\n\t\tcase r < 1<<16: // two byte rune -> unicode literal\n\t\t\tv += fmt.Sprintf(\"\\\\u%04x\", r)\n\t\tdefault: // more than two bytes per rune -> can't encode\n\t\t\tv += \"?\"\n\t\t}\n\t\tpos += w\n\t}\n\treturn v\n}\n\nfunc escape(r rune, special string) string {\n\tswitch r {\n\tcase '\\f':\n\t\treturn \"\\\\f\"\n\tcase '\\n':\n\t\treturn \"\\\\n\"\n\tcase '\\r':\n\t\treturn \"\\\\r\"\n\tcase '\\t':\n\t\treturn \"\\\\t\"\n\tdefault:\n\t\tif strings.ContainsRune(special, r) {\n\t\t\treturn \"\\\\\" + string(r)\n\t\t}\n\t\treturn string(r)\n\t}\n}\n\nfunc invalidKeyError(key string) error {\n\treturn fmt.Errorf(\"unknown property: %s\", key)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/magiconair/properties/rangecheck.go",
    "content": "// Copyright 2017 Frank Schroeder. All rights 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 properties\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\n// make this a var to overwrite it in a test\nvar is32Bit = ^uint(0) == math.MaxUint32\n\n// intRangeCheck checks if the value fits into the int type and\n// panics if it does not.\nfunc intRangeCheck(key string, v int64) int {\n\tif is32Bit && (v < math.MinInt32 || v > math.MaxInt32) {\n\t\tpanic(fmt.Sprintf(\"Value %d for key %s out of range\", v, key))\n\t}\n\treturn int(v)\n}\n\n// uintRangeCheck checks if the value fits into the uint type and\n// panics if it does not.\nfunc uintRangeCheck(key string, v uint64) uint {\n\tif is32Bit && v > math.MaxUint32 {\n\t\tpanic(fmt.Sprintf(\"Value %d for key %s out of range\", v, key))\n\t}\n\treturn uint(v)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/mitchellh/mapstructure/decode_hooks.go",
    "content": "package mapstructure\n\nimport (\n\t\"errors\"\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\t// Build our arguments that reflect expects\n\targVals := make([]reflect.Value, 3)\n\targVals[0] = reflect.ValueOf(from)\n\targVals[1] = reflect.ValueOf(to)\n\targVals[2] = reflect.ValueOf(data)\n\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\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} else {\n\t\t\t\treturn \"0\", nil\n\t\t\t}\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/mitchellh/mapstructure/mapstructure.go",
    "content": "// The mapstructure package exposes functionality to convert an\n// arbitrary 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\ntype DecodeHookFuncType func(reflect.Type, reflect.Type, interface{}) (interface{}, error)\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 a map and uses reflection to convert it into the\n// given Go native structure. val must be a pointer to a struct.\nfunc Decode(m interface{}, rawVal interface{}) error {\n\tconfig := &DecoderConfig{\n\t\tMetadata: nil,\n\t\tResult:   rawVal,\n\t}\n\n\tdecoder, err := NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(m)\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// 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(raw interface{}) error {\n\treturn d.decode(\"\", raw, 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, data interface{}, val reflect.Value) error {\n\tif data == nil {\n\t\t// If the data is nil, then we don't set anything.\n\t\treturn nil\n\t}\n\n\tdataVal := reflect.ValueOf(data)\n\tif !dataVal.IsValid() {\n\t\t// If the data value is invalid, then we just set the value\n\t\t// to be the zero value.\n\t\tval.Set(reflect.Zero(val.Type()))\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 data.\n\t\tvar err error\n\t\tdata, err = DecodeHookExec(\n\t\t\td.config.DecodeHook,\n\t\t\tdataVal.Type(), val.Type(), data)\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\tdataKind := getKind(val)\n\tswitch dataKind {\n\tcase reflect.Bool:\n\t\terr = d.decodeBool(name, data, val)\n\tcase reflect.Interface:\n\t\terr = d.decodeBasic(name, data, val)\n\tcase reflect.String:\n\t\terr = d.decodeString(name, data, val)\n\tcase reflect.Int:\n\t\terr = d.decodeInt(name, data, val)\n\tcase reflect.Uint:\n\t\terr = d.decodeUint(name, data, val)\n\tcase reflect.Float32:\n\t\terr = d.decodeFloat(name, data, val)\n\tcase reflect.Struct:\n\t\terr = d.decodeStruct(name, data, val)\n\tcase reflect.Map:\n\t\terr = d.decodeMap(name, data, val)\n\tcase reflect.Ptr:\n\t\terr = d.decodePtr(name, data, val)\n\tcase reflect.Slice:\n\t\terr = d.decodeSlice(name, data, val)\n\tcase reflect.Func:\n\t\terr = d.decodeFunc(name, data, val)\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, dataKind)\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 metadata.\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\tdataVal := reflect.ValueOf(data)\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.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\tdataType := dataVal.Type()\n\t\telemKind := dataType.Elem().Kind()\n\t\tswitch {\n\t\tcase elemKind == reflect.Uint8:\n\t\t\tval.SetString(string(dataVal.Interface().([]uint8)))\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.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.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.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.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(float64(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\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tif dataVal.Kind() != reflect.Map {\n\t\t// In weak mode, we accept a slice of maps as an input...\n\t\tif d.config.WeaklyTypedInput {\n\t\t\tswitch dataVal.Kind() {\n\t\t\tcase reflect.Array, reflect.Slice:\n\t\t\t\t// Special case for BC reasons (covered by tests)\n\t\t\t\tif dataVal.Len() == 0 {\n\t\t\t\t\tval.Set(valMap)\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\tfor i := 0; i < dataVal.Len(); i++ {\n\t\t\t\t\terr := d.decode(\n\t\t\t\t\t\tfmt.Sprintf(\"%s[%d]\", name, i),\n\t\t\t\t\t\tdataVal.Index(i).Interface(), val)\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\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\treturn fmt.Errorf(\"'%s' expected a map, got '%s'\", name, dataVal.Kind())\n\t}\n\n\t// Accumulate errors\n\terrors := make([]string, 0)\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) decodePtr(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\tvalType := val.Type()\n\tvalElemType := valType.Elem()\n\n\trealVal := val\n\tif realVal.IsNil() || d.config.ZeroFields {\n\t\trealVal = reflect.New(valElemType)\n\t}\n\n\tif err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {\n\t\treturn err\n\t}\n\n\tval.Set(realVal)\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\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 slices\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.MakeSlice(sliceType, 0, 0))\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 slice type\n\t\t\t\t// and \"lift\" it into it. i.e. a string becomes a string slice.\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.decodeSlice(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\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) 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\tif dataValKind != reflect.Map {\n\t\treturn fmt.Errorf(\"'%s' expected a map, got '%s'\", name, dataValKind)\n\t}\n\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\tfields := make(map[*reflect.StructField]reflect.Value)\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, val.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[&fieldType] = structVal.Field(i)\n\t\t}\n\t}\n\n\tfor fieldType, field := range fields {\n\t\tfieldName := fieldType.Name\n\n\t\ttagValue := fieldType.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 !field.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 !field.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(), field); 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": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-buffruneio/buffruneio.go",
    "content": "// Package buffruneio is a wrapper around bufio to provide buffered runes access with unlimited unreads.\npackage buffruneio\n\nimport (\n\t\"bufio\"\n\t\"container/list\"\n\t\"errors\"\n\t\"io\"\n)\n\n// Rune to indicate end of file.\nconst (\n\tEOF = -(iota + 1)\n)\n\n// ErrNoRuneToUnread is returned by UnreadRune() when the read index is already at the beginning of the buffer.\nvar ErrNoRuneToUnread = errors.New(\"no rune to unwind\")\n\n// Reader implements runes buffering for an io.Reader object.\ntype Reader struct {\n\tbuffer  *list.List\n\tcurrent *list.Element\n\tinput   *bufio.Reader\n}\n\n// NewReader returns a new Reader.\nfunc NewReader(rd io.Reader) *Reader {\n\treturn &Reader{\n\t\tbuffer: list.New(),\n\t\tinput:  bufio.NewReader(rd),\n\t}\n}\n\ntype runeWithSize struct {\n\tr    rune\n\tsize int\n}\n\nfunc (rd *Reader) feedBuffer() error {\n\tr, size, err := rd.input.ReadRune()\n\n\tif err != nil {\n\t\tif err != io.EOF {\n\t\t\treturn err\n\t\t}\n\t\tr = EOF\n\t}\n\n\tnewRuneWithSize := runeWithSize{r, size}\n\n\trd.buffer.PushBack(newRuneWithSize)\n\tif rd.current == nil {\n\t\trd.current = rd.buffer.Back()\n\t}\n\treturn nil\n}\n\n// ReadRune reads the next rune from buffer, or from the underlying reader if needed.\nfunc (rd *Reader) ReadRune() (rune, int, error) {\n\tif rd.current == rd.buffer.Back() || rd.current == nil {\n\t\terr := rd.feedBuffer()\n\t\tif err != nil {\n\t\t\treturn EOF, 0, err\n\t\t}\n\t}\n\n\truneWithSize := rd.current.Value.(runeWithSize)\n\trd.current = rd.current.Next()\n\treturn runeWithSize.r, runeWithSize.size, nil\n}\n\n// UnreadRune pushes back the previously read rune in the buffer, extending it if needed.\nfunc (rd *Reader) UnreadRune() error {\n\tif rd.current == rd.buffer.Front() {\n\t\treturn ErrNoRuneToUnread\n\t}\n\tif rd.current == nil {\n\t\trd.current = rd.buffer.Back()\n\t} else {\n\t\trd.current = rd.current.Prev()\n\t}\n\treturn nil\n}\n\n// Forget removes runes stored before the current stream position index.\nfunc (rd *Reader) Forget() {\n\tif rd.current == nil {\n\t\trd.current = rd.buffer.Back()\n\t}\n\tfor ; rd.current != rd.buffer.Front(); rd.buffer.Remove(rd.current.Prev()) {\n\t}\n}\n\n// PeekRune returns at most the next n runes, reading from the uderlying source if\n// needed. Does not move the current index. It includes EOF if reached.\nfunc (rd *Reader) PeekRunes(n int) []rune {\n\tres := make([]rune, 0, n)\n\tcursor := rd.current\n\tfor i := 0; i < n; i++ {\n\t\tif cursor == nil {\n\t\t\terr := rd.feedBuffer()\n\t\t\tif err != nil {\n\t\t\t\treturn res\n\t\t\t}\n\t\t\tcursor = rd.buffer.Back()\n\t\t}\n\t\tif cursor != nil {\n\t\t\tr := cursor.Value.(runeWithSize).r\n\t\t\tres = append(res, r)\n\t\t\tif r == EOF {\n\t\t\t\treturn res\n\t\t\t}\n\t\t\tcursor = cursor.Next()\n\t\t}\n\t}\n\treturn res\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/cmd/test_program.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/pelletier/go-toml\"\n)\n\nfunc main() {\n\tbytes, err := ioutil.ReadAll(os.Stdin)\n\tif err != nil {\n\t\tlog.Fatalf(\"Error during TOML read: %s\", err)\n\t\tos.Exit(2)\n\t}\n\ttree, err := toml.Load(string(bytes))\n\tif err != nil {\n\t\tlog.Fatalf(\"Error during TOML load: %s\", err)\n\t\tos.Exit(1)\n\t}\n\n\ttypedTree := translate(*tree)\n\n\tif err := json.NewEncoder(os.Stdout).Encode(typedTree); err != nil {\n\t\tlog.Fatalf(\"Error encoding JSON: %s\", err)\n\t\tos.Exit(3)\n\t}\n\n\tos.Exit(0)\n}\n\nfunc translate(tomlData interface{}) interface{} {\n\tswitch orig := tomlData.(type) {\n\tcase map[string]interface{}:\n\t\ttyped := make(map[string]interface{}, len(orig))\n\t\tfor k, v := range orig {\n\t\t\ttyped[k] = translate(v)\n\t\t}\n\t\treturn typed\n\tcase *toml.TomlTree:\n\t\treturn translate(*orig)\n\tcase toml.TomlTree:\n\t\tkeys := orig.Keys()\n\t\ttyped := make(map[string]interface{}, len(keys))\n\t\tfor _, k := range keys {\n\t\t\ttyped[k] = translate(orig.GetPath([]string{k}))\n\t\t}\n\t\treturn typed\n\tcase []*toml.TomlTree:\n\t\ttyped := make([]map[string]interface{}, len(orig))\n\t\tfor i, v := range orig {\n\t\t\ttyped[i] = translate(v).(map[string]interface{})\n\t\t}\n\t\treturn typed\n\tcase []map[string]interface{}:\n\t\ttyped := make([]map[string]interface{}, len(orig))\n\t\tfor i, v := range orig {\n\t\t\ttyped[i] = translate(v).(map[string]interface{})\n\t\t}\n\t\treturn typed\n\tcase []interface{}:\n\t\ttyped := make([]interface{}, len(orig))\n\t\tfor i, v := range orig {\n\t\t\ttyped[i] = translate(v)\n\t\t}\n\t\treturn tag(\"array\", typed)\n\tcase time.Time:\n\t\treturn tag(\"datetime\", orig.Format(\"2006-01-02T15:04:05Z\"))\n\tcase bool:\n\t\treturn tag(\"bool\", fmt.Sprintf(\"%v\", orig))\n\tcase int64:\n\t\treturn tag(\"integer\", fmt.Sprintf(\"%d\", orig))\n\tcase float64:\n\t\treturn tag(\"float\", fmt.Sprintf(\"%v\", orig))\n\tcase string:\n\t\treturn tag(\"string\", orig)\n\t}\n\n\tpanic(fmt.Sprintf(\"Unknown type: %T\", tomlData))\n}\n\nfunc tag(typeName string, data interface{}) map[string]interface{} {\n\treturn map[string]interface{}{\n\t\t\"type\":  typeName,\n\t\t\"value\": data,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/cmd/tomljson/main.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/pelletier/go-toml\"\n)\n\nfunc main() {\n\tflag.Usage = func() {\n\t\tfmt.Fprintln(os.Stderr, `tomljson can be used in two ways:\nWriting to STDIN and reading from STDOUT:\n  cat file.toml | tomljson > file.json\n\nReading from a file name:\n  tomljson file.toml\n`)\n\t}\n\tflag.Parse()\n\tos.Exit(processMain(flag.Args(), os.Stdin, os.Stdout, os.Stderr))\n}\n\nfunc processMain(files []string, defaultInput io.Reader, output io.Writer, errorOutput io.Writer) int {\n\t// read from stdin and print to stdout\n\tinputReader := defaultInput\n\n\tif len(files) > 0 {\n\t\tvar err error\n\t\tinputReader, err = os.Open(files[0])\n\t\tif err != nil {\n\t\t\tprintError(err, errorOutput)\n\t\t\treturn -1\n\t\t}\n\t}\n\ts, err := reader(inputReader)\n\tif err != nil {\n\t\tprintError(err, errorOutput)\n\t\treturn -1\n\t}\n\tio.WriteString(output, s+\"\\n\")\n\treturn 0\n}\n\nfunc printError(err error, output io.Writer) {\n\tio.WriteString(output, err.Error()+\"\\n\")\n}\n\nfunc reader(r io.Reader) (string, error) {\n\ttree, err := toml.LoadReader(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn mapToJSON(tree)\n}\n\nfunc mapToJSON(tree *toml.TomlTree) (string, error) {\n\ttreeMap := tree.ToMap()\n\tbytes, err := json.MarshalIndent(treeMap, \"\", \"  \")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(bytes[:]), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/cmd/tomll/main.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\n\t\"github.com/pelletier/go-toml\"\n)\n\nfunc main() {\n\tflag.Usage = func() {\n\t\tfmt.Fprintln(os.Stderr, `tomll can be used in two ways:\nWriting to STDIN and reading from STDOUT:\n  cat file.toml | tomll > file.toml\n\nReading and updating a list of files:\n  tomll a.toml b.toml c.toml\n\nWhen given a list of files, tomll will modify all files in place without asking.\n`)\n\t}\n\tflag.Parse()\n\t// read from stdin and print to stdout\n\tif flag.NArg() == 0 {\n\t\ts, err := lintReader(os.Stdin)\n\t\tif err != nil {\n\t\t\tio.WriteString(os.Stderr, err.Error())\n\t\t\tos.Exit(-1)\n\t\t}\n\t\tio.WriteString(os.Stdout, s)\n\t} else {\n\t\t// otherwise modify a list of files\n\t\tfor _, filename := range flag.Args() {\n\t\t\ts, err := lintFile(filename)\n\t\t\tif err != nil {\n\t\t\t\tio.WriteString(os.Stderr, err.Error())\n\t\t\t\tos.Exit(-1)\n\t\t\t}\n\t\t\tioutil.WriteFile(filename, []byte(s), 0644)\n\t\t}\n\t}\n}\n\nfunc lintFile(filename string) (string, error) {\n\ttree, err := toml.LoadFile(filename)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn tree.String(), nil\n}\n\nfunc lintReader(r io.Reader) (string, error) {\n\ttree, err := toml.LoadReader(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn tree.String(), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/doc.go",
    "content": "// Package toml is a TOML markup language parser.\n//\n// This version supports the specification as described in\n// https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md\n//\n// TOML Parsing\n//\n// TOML data may be parsed in two ways: by file, or by string.\n//\n//   // load TOML data by filename\n//   tree, err := toml.LoadFile(\"filename.toml\")\n//\n//   // load TOML data stored in a string\n//   tree, err := toml.Load(stringContainingTomlData)\n//\n// Either way, the result is a TomlTree object that can be used to navigate the\n// structure and data within the original document.\n//\n//\n// Getting data from the TomlTree\n//\n// After parsing TOML data with Load() or LoadFile(), use the Has() and Get()\n// methods on the returned TomlTree, to find your way through the document data.\n//\n//   if tree.Has(\"foo\") {\n//     fmt.Println(\"foo is:\", tree.Get(\"foo\"))\n//   }\n//\n// Working with Paths\n//\n// Go-toml has support for basic dot-separated key paths on the Has(), Get(), Set()\n// and GetDefault() methods.  These are the same kind of key paths used within the\n// TOML specification for struct tames.\n//\n//   // looks for a key named 'baz', within struct 'bar', within struct 'foo'\n//   tree.Has(\"foo.bar.baz\")\n//\n//   // returns the key at this path, if it is there\n//   tree.Get(\"foo.bar.baz\")\n//\n// TOML allows keys to contain '.', which can cause this syntax to be problematic\n// for some documents.  In such cases, use the GetPath(), HasPath(), and SetPath(),\n// methods to explicitly define the path.  This form is also faster, since\n// it avoids having to parse the passed key for '.' delimiters.\n//\n//   // looks for a key named 'baz', within struct 'bar', within struct 'foo'\n//   tree.HasPath([]string{\"foo\",\"bar\",\"baz\"})\n//\n//   // returns the key at this path, if it is there\n//   tree.GetPath([]string{\"foo\",\"bar\",\"baz\"})\n//\n// Note that this is distinct from the heavyweight query syntax supported by\n// TomlTree.Query() and the Query() struct (see below).\n//\n// Position Support\n//\n// Each element within the TomlTree is stored with position metadata, which is\n// invaluable for providing semantic feedback to a user.  This helps in\n// situations where the TOML file parses correctly, but contains data that is\n// not correct for the application.  In such cases, an error message can be\n// generated that indicates the problem line and column number in the source\n// TOML document.\n//\n//   // load TOML data\n//   tree, _ := toml.Load(\"filename.toml\")\n//\n//   // get an entry and report an error if it's the wrong type\n//   element := tree.Get(\"foo\")\n//   if value, ok := element.(int64); !ok {\n//       return fmt.Errorf(\"%v: Element 'foo' must be an integer\", tree.GetPosition(\"foo\"))\n//   }\n//\n//   // report an error if an expected element is missing\n//   if !tree.Has(\"bar\") {\n//      return fmt.Errorf(\"%v: Expected 'bar' element\", tree.GetPosition(\"\"))\n//   }\n//\n// Query Support\n//\n// The TOML query path implementation is based loosely on the JSONPath specification:\n// http://goessner.net/articles/JsonPath/\n//\n// The idea behind a query path is to allow quick access to any element, or set\n// of elements within TOML document, with a single expression.\n//\n//   result, err := tree.Query(\"$.foo.bar.baz\")\n//\n// This is roughly equivalent to:\n//\n//   next := tree.Get(\"foo\")\n//   if next != nil {\n//     next = next.Get(\"bar\")\n//     if next != nil {\n//       next = next.Get(\"baz\")\n//     }\n//   }\n//   result := next\n//\n// err is nil if any parsing exception occurs.\n//\n// If no node in the tree matches the query, result will simply contain an empty list of\n// items.\n//\n// As illustrated above, the query path is much more efficient, especially since\n// the structure of the TOML file can vary.  Rather than making assumptions about\n// a document's structure, a query allows the programmer to make structured\n// requests into the document, and get zero or more values as a result.\n//\n// The syntax of a query begins with a root token, followed by any number\n// sub-expressions:\n//\n//   $\n//                    Root of the TOML tree.  This must always come first.\n//   .name\n//                    Selects child of this node, where 'name' is a TOML key\n//                    name.\n//   ['name']\n//                    Selects child of this node, where 'name' is a string\n//                    containing a TOML key name.\n//   [index]\n//                    Selcts child array element at 'index'.\n//   ..expr\n//                    Recursively selects all children, filtered by an a union,\n//                    index, or slice expression.\n//   ..*\n//                    Recursive selection of all nodes at this point in the\n//                    tree.\n//   .*\n//                    Selects all children of the current node.\n//   [expr,expr]\n//                    Union operator - a logical 'or' grouping of two or more\n//                    sub-expressions: index, key name, or filter.\n//   [start:end:step]\n//                    Slice operator - selects array elements from start to\n//                    end-1, at the given step.  All three arguments are\n//                    optional.\n//   [?(filter)]\n//                    Named filter expression - the function 'filter' is\n//                    used to filter children at this node.\n//\n// Query Indexes And Slices\n//\n// Index expressions perform no bounds checking, and will contribute no\n// values to the result set if the provided index or index range is invalid.\n// Negative indexes represent values from the end of the array, counting backwards.\n//\n//   // select the last index of the array named 'foo'\n//   tree.Query(\"$.foo[-1]\")\n//\n// Slice expressions are supported, by using ':' to separate a start/end index pair.\n//\n//   // select up to the first five elements in the array\n//   tree.Query(\"$.foo[0:5]\")\n//\n// Slice expressions also allow negative indexes for the start and stop\n// arguments.\n//\n//   // select all array elements.\n//   tree.Query(\"$.foo[0:-1]\")\n//\n// Slice expressions may have an optional stride/step parameter:\n//\n//   // select every other element\n//   tree.Query(\"$.foo[0:-1:2]\")\n//\n// Slice start and end parameters are also optional:\n//\n//   // these are all equivalent and select all the values in the array\n//   tree.Query(\"$.foo[:]\")\n//   tree.Query(\"$.foo[0:]\")\n//   tree.Query(\"$.foo[:-1]\")\n//   tree.Query(\"$.foo[0:-1:]\")\n//   tree.Query(\"$.foo[::1]\")\n//   tree.Query(\"$.foo[0::1]\")\n//   tree.Query(\"$.foo[:-1:1]\")\n//   tree.Query(\"$.foo[0:-1:1]\")\n//\n// Query Filters\n//\n// Query filters are used within a Union [,] or single Filter [] expression.\n// A filter only allows nodes that qualify through to the next expression,\n// and/or into the result set.\n//\n//   // returns children of foo that are permitted by the 'bar' filter.\n//   tree.Query(\"$.foo[?(bar)]\")\n//\n// There are several filters provided with the library:\n//\n//   tree\n//          Allows nodes of type TomlTree.\n//   int\n//          Allows nodes of type int64.\n//   float\n//          Allows nodes of type float64.\n//   string\n//          Allows nodes of type string.\n//   time\n//          Allows nodes of type time.Time.\n//   bool\n//          Allows nodes of type bool.\n//\n// Query Results\n//\n// An executed query returns a QueryResult object.  This contains the nodes\n// in the TOML tree that qualify the query expression.  Position information\n// is also available for each value in the set.\n//\n//   // display the results of a query\n//   results := tree.Query(\"$.foo.bar.baz\")\n//   for idx, value := results.Values() {\n//       fmt.Println(\"%v: %v\", results.Positions()[idx], value)\n//   }\n//\n// Compiled Queries\n//\n// Queries may be executed directly on a TomlTree object, or compiled ahead\n// of time and executed discretely.  The former is more convienent, but has the\n// penalty of having to recompile the query expression each time.\n//\n//   // basic query\n//   results := tree.Query(\"$.foo.bar.baz\")\n//\n//   // compiled query\n//   query := toml.CompileQuery(\"$.foo.bar.baz\")\n//   results := query.Execute(tree)\n//\n//   // run the compiled query again on a different tree\n//   moreResults := query.Execute(anotherTree)\n//\n// User Defined Query Filters\n//\n// Filter expressions may also be user defined by using the SetFilter()\n// function on the Query object.  The function must return true/false, which\n// signifies if the passed node is kept or discarded, respectively.\n//\n//   // create a query that references a user-defined filter\n//   query, _ := CompileQuery(\"$[?(bazOnly)]\")\n//\n//   // define the filter, and assign it to the query\n//   query.SetFilter(\"bazOnly\", func(node interface{}) bool{\n//       if tree, ok := node.(*TomlTree); ok {\n//           return tree.Has(\"baz\")\n//       }\n//       return false  // reject all other node types\n//   })\n//\n//   // run the query\n//   query.Execute(tree)\n//\npackage toml\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/keysparsing.go",
    "content": "// Parsing keys handling both bare and quoted keys.\n\npackage toml\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"unicode\"\n)\n\nfunc parseKey(key string) ([]string, error) {\n\tgroups := []string{}\n\tvar buffer bytes.Buffer\n\tinQuotes := false\n\twasInQuotes := false\n\tescapeNext := false\n\tignoreSpace := true\n\texpectDot := false\n\n\tfor _, char := range key {\n\t\tif ignoreSpace {\n\t\t\tif char == ' ' {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tignoreSpace = false\n\t\t}\n\t\tif escapeNext {\n\t\t\tbuffer.WriteRune(char)\n\t\t\tescapeNext = false\n\t\t\tcontinue\n\t\t}\n\t\tswitch char {\n\t\tcase '\\\\':\n\t\t\tescapeNext = true\n\t\t\tcontinue\n\t\tcase '\"':\n\t\t\tif inQuotes {\n\t\t\t\tgroups = append(groups, buffer.String())\n\t\t\t\tbuffer.Reset()\n\t\t\t\twasInQuotes = true\n\t\t\t}\n\t\t\tinQuotes = !inQuotes\n\t\t\texpectDot = false\n\t\tcase '.':\n\t\t\tif inQuotes {\n\t\t\t\tbuffer.WriteRune(char)\n\t\t\t} else {\n\t\t\t\tif !wasInQuotes {\n\t\t\t\t\tif buffer.Len() == 0 {\n\t\t\t\t\t\treturn nil, errors.New(\"empty table key\")\n\t\t\t\t\t}\n\t\t\t\t\tgroups = append(groups, buffer.String())\n\t\t\t\t\tbuffer.Reset()\n\t\t\t\t}\n\t\t\t\tignoreSpace = true\n\t\t\t\texpectDot = false\n\t\t\t\twasInQuotes = false\n\t\t\t}\n\t\tcase ' ':\n\t\t\tif inQuotes {\n\t\t\t\tbuffer.WriteRune(char)\n\t\t\t} else {\n\t\t\t\texpectDot = true\n\t\t\t}\n\t\tdefault:\n\t\t\tif !inQuotes && !isValidBareChar(char) {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid bare character: %c\", char)\n\t\t\t}\n\t\t\tif !inQuotes && expectDot {\n\t\t\t\treturn nil, errors.New(\"what?\")\n\t\t\t}\n\t\t\tbuffer.WriteRune(char)\n\t\t\texpectDot = false\n\t\t}\n\t}\n\tif inQuotes {\n\t\treturn nil, errors.New(\"mismatched quotes\")\n\t}\n\tif escapeNext {\n\t\treturn nil, errors.New(\"unfinished escape sequence\")\n\t}\n\tif buffer.Len() > 0 {\n\t\tgroups = append(groups, buffer.String())\n\t}\n\tif len(groups) == 0 {\n\t\treturn nil, errors.New(\"empty key\")\n\t}\n\treturn groups, nil\n}\n\nfunc isValidBareChar(r rune) bool {\n\treturn isAlphanumeric(r) || r == '-' || unicode.IsNumber(r)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/lexer.go",
    "content": "// TOML lexer.\n//\n// Written using the principles developed by Rob Pike in\n// http://www.youtube.com/watch?v=HxaD_trXwRE\n\npackage toml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/pelletier/go-buffruneio\"\n)\n\nvar dateRegexp *regexp.Regexp\n\n// Define state functions\ntype tomlLexStateFn func() tomlLexStateFn\n\n// Define lexer\ntype tomlLexer struct {\n\tinput         *buffruneio.Reader // Textual source\n\tbuffer        []rune             // Runes composing the current token\n\ttokens        chan token\n\tdepth         int\n\tline          int\n\tcol           int\n\tendbufferLine int\n\tendbufferCol  int\n}\n\n// Basic read operations on input\n\nfunc (l *tomlLexer) read() rune {\n\tr, _, err := l.input.ReadRune()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif r == '\\n' {\n\t\tl.endbufferLine++\n\t\tl.endbufferCol = 1\n\t} else {\n\t\tl.endbufferCol++\n\t}\n\treturn r\n}\n\nfunc (l *tomlLexer) next() rune {\n\tr := l.read()\n\n\tif r != eof {\n\t\tl.buffer = append(l.buffer, r)\n\t}\n\treturn r\n}\n\nfunc (l *tomlLexer) ignore() {\n\tl.buffer = make([]rune, 0)\n\tl.line = l.endbufferLine\n\tl.col = l.endbufferCol\n}\n\nfunc (l *tomlLexer) skip() {\n\tl.next()\n\tl.ignore()\n}\n\nfunc (l *tomlLexer) fastForward(n int) {\n\tfor i := 0; i < n; i++ {\n\t\tl.next()\n\t}\n}\n\nfunc (l *tomlLexer) emitWithValue(t tokenType, value string) {\n\tl.tokens <- token{\n\t\tPosition: Position{l.line, l.col},\n\t\ttyp:      t,\n\t\tval:      value,\n\t}\n\tl.ignore()\n}\n\nfunc (l *tomlLexer) emit(t tokenType) {\n\tl.emitWithValue(t, string(l.buffer))\n}\n\nfunc (l *tomlLexer) peek() rune {\n\tr, _, err := l.input.ReadRune()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tl.input.UnreadRune()\n\treturn r\n}\n\nfunc (l *tomlLexer) follow(next string) bool {\n\tfor _, expectedRune := range next {\n\t\tr, _, err := l.input.ReadRune()\n\t\tdefer l.input.UnreadRune()\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif expectedRune != r {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Error management\n\nfunc (l *tomlLexer) errorf(format string, args ...interface{}) tomlLexStateFn {\n\tl.tokens <- token{\n\t\tPosition: Position{l.line, l.col},\n\t\ttyp:      tokenError,\n\t\tval:      fmt.Sprintf(format, args...),\n\t}\n\treturn nil\n}\n\n// State functions\n\nfunc (l *tomlLexer) lexVoid() tomlLexStateFn {\n\tfor {\n\t\tnext := l.peek()\n\t\tswitch next {\n\t\tcase '[':\n\t\t\treturn l.lexTableKey\n\t\tcase '#':\n\t\t\treturn l.lexComment(l.lexVoid)\n\t\tcase '=':\n\t\t\treturn l.lexEqual\n\t\tcase '\\r':\n\t\t\tfallthrough\n\t\tcase '\\n':\n\t\t\tl.skip()\n\t\t\tcontinue\n\t\t}\n\n\t\tif isSpace(next) {\n\t\t\tl.skip()\n\t\t}\n\n\t\tif l.depth > 0 {\n\t\t\treturn l.lexRvalue\n\t\t}\n\n\t\tif isKeyStartChar(next) {\n\t\t\treturn l.lexKey\n\t\t}\n\n\t\tif next == eof {\n\t\t\tl.next()\n\t\t\tbreak\n\t\t}\n\t}\n\n\tl.emit(tokenEOF)\n\treturn nil\n}\n\nfunc (l *tomlLexer) lexRvalue() tomlLexStateFn {\n\tfor {\n\t\tnext := l.peek()\n\t\tswitch next {\n\t\tcase '.':\n\t\t\treturn l.errorf(\"cannot start float with a dot\")\n\t\tcase '=':\n\t\t\treturn l.lexEqual\n\t\tcase '[':\n\t\t\tl.depth++\n\t\t\treturn l.lexLeftBracket\n\t\tcase ']':\n\t\t\tl.depth--\n\t\t\treturn l.lexRightBracket\n\t\tcase '{':\n\t\t\treturn l.lexLeftCurlyBrace\n\t\tcase '}':\n\t\t\treturn l.lexRightCurlyBrace\n\t\tcase '#':\n\t\t\treturn l.lexComment(l.lexRvalue)\n\t\tcase '\"':\n\t\t\treturn l.lexString\n\t\tcase '\\'':\n\t\t\treturn l.lexLiteralString\n\t\tcase ',':\n\t\t\treturn l.lexComma\n\t\tcase '\\r':\n\t\t\tfallthrough\n\t\tcase '\\n':\n\t\t\tl.skip()\n\t\t\tif l.depth == 0 {\n\t\t\t\treturn l.lexVoid\n\t\t\t}\n\t\t\treturn l.lexRvalue\n\t\tcase '_':\n\t\t\treturn l.errorf(\"cannot start number with underscore\")\n\t\t}\n\n\t\tif l.follow(\"true\") {\n\t\t\treturn l.lexTrue\n\t\t}\n\n\t\tif l.follow(\"false\") {\n\t\t\treturn l.lexFalse\n\t\t}\n\n\t\tif isSpace(next) {\n\t\t\tl.skip()\n\t\t\tcontinue\n\t\t}\n\n\t\tif next == eof {\n\t\t\tl.next()\n\t\t\tbreak\n\t\t}\n\n\t\tpossibleDate := string(l.input.PeekRunes(35))\n\t\tdateMatch := dateRegexp.FindString(possibleDate)\n\t\tif dateMatch != \"\" {\n\t\t\tl.fastForward(len(dateMatch))\n\t\t\treturn l.lexDate\n\t\t}\n\n\t\tif next == '+' || next == '-' || isDigit(next) {\n\t\t\treturn l.lexNumber\n\t\t}\n\n\t\tif isAlphanumeric(next) {\n\t\t\treturn l.lexKey\n\t\t}\n\n\t\treturn l.errorf(\"no value can start with %c\", next)\n\t}\n\n\tl.emit(tokenEOF)\n\treturn nil\n}\n\nfunc (l *tomlLexer) lexLeftCurlyBrace() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenLeftCurlyBrace)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexRightCurlyBrace() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenRightCurlyBrace)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexDate() tomlLexStateFn {\n\tl.emit(tokenDate)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexTrue() tomlLexStateFn {\n\tl.fastForward(4)\n\tl.emit(tokenTrue)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexFalse() tomlLexStateFn {\n\tl.fastForward(5)\n\tl.emit(tokenFalse)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexEqual() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenEqual)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexComma() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenComma)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexKey() tomlLexStateFn {\n\tgrowingString := \"\"\n\n\tfor r := l.peek(); isKeyChar(r) || r == '\\n' || r == '\\r'; r = l.peek() {\n\t\tif r == '\"' {\n\t\t\tl.next()\n\t\t\tstr, err := l.lexStringAsString(`\"`, false, true)\n\t\t\tif err != nil {\n\t\t\t\treturn l.errorf(err.Error())\n\t\t\t}\n\t\t\tgrowingString += `\"` + str + `\"`\n\t\t\tl.next()\n\t\t\tcontinue\n\t\t} else if r == '\\n' {\n\t\t\treturn l.errorf(\"keys cannot contain new lines\")\n\t\t} else if isSpace(r) {\n\t\t\tbreak\n\t\t} else if !isValidBareChar(r) {\n\t\t\treturn l.errorf(\"keys cannot contain %c character\", r)\n\t\t}\n\t\tgrowingString += string(r)\n\t\tl.next()\n\t}\n\tl.emitWithValue(tokenKey, growingString)\n\treturn l.lexVoid\n}\n\nfunc (l *tomlLexer) lexComment(previousState tomlLexStateFn) tomlLexStateFn {\n\treturn func() tomlLexStateFn {\n\t\tfor next := l.peek(); next != '\\n' && next != eof; next = l.peek() {\n\t\t\tif next == '\\r' && l.follow(\"\\r\\n\") {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tl.next()\n\t\t}\n\t\tl.ignore()\n\t\treturn previousState\n\t}\n}\n\nfunc (l *tomlLexer) lexLeftBracket() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenLeftBracket)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexLiteralStringAsString(terminator string, discardLeadingNewLine bool) (string, error) {\n\tgrowingString := \"\"\n\n\tif discardLeadingNewLine {\n\t\tif l.follow(\"\\r\\n\") {\n\t\t\tl.skip()\n\t\t\tl.skip()\n\t\t} else if l.peek() == '\\n' {\n\t\t\tl.skip()\n\t\t}\n\t}\n\n\t// find end of string\n\tfor {\n\t\tif l.follow(terminator) {\n\t\t\treturn growingString, nil\n\t\t}\n\n\t\tnext := l.peek()\n\t\tif next == eof {\n\t\t\tbreak\n\t\t}\n\t\tgrowingString += string(l.next())\n\t}\n\n\treturn \"\", errors.New(\"unclosed string\")\n}\n\nfunc (l *tomlLexer) lexLiteralString() tomlLexStateFn {\n\tl.skip()\n\n\t// handle special case for triple-quote\n\tterminator := \"'\"\n\tdiscardLeadingNewLine := false\n\tif l.follow(\"''\") {\n\t\tl.skip()\n\t\tl.skip()\n\t\tterminator = \"'''\"\n\t\tdiscardLeadingNewLine = true\n\t}\n\n\tstr, err := l.lexLiteralStringAsString(terminator, discardLeadingNewLine)\n\tif err != nil {\n\t\treturn l.errorf(err.Error())\n\t}\n\n\tl.emitWithValue(tokenString, str)\n\tl.fastForward(len(terminator))\n\tl.ignore()\n\treturn l.lexRvalue\n}\n\n// Lex a string and return the results as a string.\n// Terminator is the substring indicating the end of the token.\n// The resulting string does not include the terminator.\nfunc (l *tomlLexer) lexStringAsString(terminator string, discardLeadingNewLine, acceptNewLines bool) (string, error) {\n\tgrowingString := \"\"\n\n\tif discardLeadingNewLine {\n\t\tif l.follow(\"\\r\\n\") {\n\t\t\tl.skip()\n\t\t\tl.skip()\n\t\t} else if l.peek() == '\\n' {\n\t\t\tl.skip()\n\t\t}\n\t}\n\n\tfor {\n\t\tif l.follow(terminator) {\n\t\t\treturn growingString, nil\n\t\t}\n\n\t\tif l.follow(\"\\\\\") {\n\t\t\tl.next()\n\t\t\tswitch l.peek() {\n\t\t\tcase '\\r':\n\t\t\t\tfallthrough\n\t\t\tcase '\\n':\n\t\t\t\tfallthrough\n\t\t\tcase '\\t':\n\t\t\t\tfallthrough\n\t\t\tcase ' ':\n\t\t\t\t// skip all whitespace chars following backslash\n\t\t\t\tfor strings.ContainsRune(\"\\r\\n\\t \", l.peek()) {\n\t\t\t\t\tl.next()\n\t\t\t\t}\n\t\t\tcase '\"':\n\t\t\t\tgrowingString += \"\\\"\"\n\t\t\t\tl.next()\n\t\t\tcase 'n':\n\t\t\t\tgrowingString += \"\\n\"\n\t\t\t\tl.next()\n\t\t\tcase 'b':\n\t\t\t\tgrowingString += \"\\b\"\n\t\t\t\tl.next()\n\t\t\tcase 'f':\n\t\t\t\tgrowingString += \"\\f\"\n\t\t\t\tl.next()\n\t\t\tcase '/':\n\t\t\t\tgrowingString += \"/\"\n\t\t\t\tl.next()\n\t\t\tcase 't':\n\t\t\t\tgrowingString += \"\\t\"\n\t\t\t\tl.next()\n\t\t\tcase 'r':\n\t\t\t\tgrowingString += \"\\r\"\n\t\t\t\tl.next()\n\t\t\tcase '\\\\':\n\t\t\t\tgrowingString += \"\\\\\"\n\t\t\t\tl.next()\n\t\t\tcase 'u':\n\t\t\t\tl.next()\n\t\t\t\tcode := \"\"\n\t\t\t\tfor i := 0; i < 4; i++ {\n\t\t\t\t\tc := l.peek()\n\t\t\t\t\tif !isHexDigit(c) {\n\t\t\t\t\t\treturn \"\", errors.New(\"unfinished unicode escape\")\n\t\t\t\t\t}\n\t\t\t\t\tl.next()\n\t\t\t\t\tcode = code + string(c)\n\t\t\t\t}\n\t\t\t\tintcode, err := strconv.ParseInt(code, 16, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", errors.New(\"invalid unicode escape: \\\\u\" + code)\n\t\t\t\t}\n\t\t\t\tgrowingString += string(rune(intcode))\n\t\t\tcase 'U':\n\t\t\t\tl.next()\n\t\t\t\tcode := \"\"\n\t\t\t\tfor i := 0; i < 8; i++ {\n\t\t\t\t\tc := l.peek()\n\t\t\t\t\tif !isHexDigit(c) {\n\t\t\t\t\t\treturn \"\", errors.New(\"unfinished unicode escape\")\n\t\t\t\t\t}\n\t\t\t\t\tl.next()\n\t\t\t\t\tcode = code + string(c)\n\t\t\t\t}\n\t\t\t\tintcode, err := strconv.ParseInt(code, 16, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", errors.New(\"invalid unicode escape: \\\\U\" + code)\n\t\t\t\t}\n\t\t\t\tgrowingString += string(rune(intcode))\n\t\t\tdefault:\n\t\t\t\treturn \"\", errors.New(\"invalid escape sequence: \\\\\" + string(l.peek()))\n\t\t\t}\n\t\t} else {\n\t\t\tr := l.peek()\n\n\t\t\tif 0x00 <= r && r <= 0x1F && !(acceptNewLines && (r == '\\n' || r == '\\r')) {\n\t\t\t\treturn \"\", fmt.Errorf(\"unescaped control character %U\", r)\n\t\t\t}\n\t\t\tl.next()\n\t\t\tgrowingString += string(r)\n\t\t}\n\n\t\tif l.peek() == eof {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn \"\", errors.New(\"unclosed string\")\n}\n\nfunc (l *tomlLexer) lexString() tomlLexStateFn {\n\tl.skip()\n\n\t// handle special case for triple-quote\n\tterminator := `\"`\n\tdiscardLeadingNewLine := false\n\tacceptNewLines := false\n\tif l.follow(`\"\"`) {\n\t\tl.skip()\n\t\tl.skip()\n\t\tterminator = `\"\"\"`\n\t\tdiscardLeadingNewLine = true\n\t\tacceptNewLines = true\n\t}\n\n\tstr, err := l.lexStringAsString(terminator, discardLeadingNewLine, acceptNewLines)\n\n\tif err != nil {\n\t\treturn l.errorf(err.Error())\n\t}\n\n\tl.emitWithValue(tokenString, str)\n\tl.fastForward(len(terminator))\n\tl.ignore()\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexTableKey() tomlLexStateFn {\n\tl.next()\n\n\tif l.peek() == '[' {\n\t\t// token '[[' signifies an array of tables\n\t\tl.next()\n\t\tl.emit(tokenDoubleLeftBracket)\n\t\treturn l.lexInsideTableArrayKey\n\t}\n\t// vanilla table key\n\tl.emit(tokenLeftBracket)\n\treturn l.lexInsideTableKey\n}\n\nfunc (l *tomlLexer) lexInsideTableArrayKey() tomlLexStateFn {\n\tfor r := l.peek(); r != eof; r = l.peek() {\n\t\tswitch r {\n\t\tcase ']':\n\t\t\tif len(l.buffer) > 0 {\n\t\t\t\tl.emit(tokenKeyGroupArray)\n\t\t\t}\n\t\t\tl.next()\n\t\t\tif l.peek() != ']' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tl.next()\n\t\t\tl.emit(tokenDoubleRightBracket)\n\t\t\treturn l.lexVoid\n\t\tcase '[':\n\t\t\treturn l.errorf(\"table array key cannot contain ']'\")\n\t\tdefault:\n\t\t\tl.next()\n\t\t}\n\t}\n\treturn l.errorf(\"unclosed table array key\")\n}\n\nfunc (l *tomlLexer) lexInsideTableKey() tomlLexStateFn {\n\tfor r := l.peek(); r != eof; r = l.peek() {\n\t\tswitch r {\n\t\tcase ']':\n\t\t\tif len(l.buffer) > 0 {\n\t\t\t\tl.emit(tokenKeyGroup)\n\t\t\t}\n\t\t\tl.next()\n\t\t\tl.emit(tokenRightBracket)\n\t\t\treturn l.lexVoid\n\t\tcase '[':\n\t\t\treturn l.errorf(\"table key cannot contain ']'\")\n\t\tdefault:\n\t\t\tl.next()\n\t\t}\n\t}\n\treturn l.errorf(\"unclosed table key\")\n}\n\nfunc (l *tomlLexer) lexRightBracket() tomlLexStateFn {\n\tl.next()\n\tl.emit(tokenRightBracket)\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) lexNumber() tomlLexStateFn {\n\tr := l.peek()\n\tif r == '+' || r == '-' {\n\t\tl.next()\n\t}\n\tpointSeen := false\n\texpSeen := false\n\tdigitSeen := false\n\tfor {\n\t\tnext := l.peek()\n\t\tif next == '.' {\n\t\t\tif pointSeen {\n\t\t\t\treturn l.errorf(\"cannot have two dots in one float\")\n\t\t\t}\n\t\t\tl.next()\n\t\t\tif !isDigit(l.peek()) {\n\t\t\t\treturn l.errorf(\"float cannot end with a dot\")\n\t\t\t}\n\t\t\tpointSeen = true\n\t\t} else if next == 'e' || next == 'E' {\n\t\t\texpSeen = true\n\t\t\tl.next()\n\t\t\tr := l.peek()\n\t\t\tif r == '+' || r == '-' {\n\t\t\t\tl.next()\n\t\t\t}\n\t\t} else if isDigit(next) {\n\t\t\tdigitSeen = true\n\t\t\tl.next()\n\t\t} else if next == '_' {\n\t\t\tl.next()\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t\tif pointSeen && !digitSeen {\n\t\t\treturn l.errorf(\"cannot start float with a dot\")\n\t\t}\n\t}\n\n\tif !digitSeen {\n\t\treturn l.errorf(\"no digit in that number\")\n\t}\n\tif pointSeen || expSeen {\n\t\tl.emit(tokenFloat)\n\t} else {\n\t\tl.emit(tokenInteger)\n\t}\n\treturn l.lexRvalue\n}\n\nfunc (l *tomlLexer) run() {\n\tfor state := l.lexVoid; state != nil; {\n\t\tstate = state()\n\t}\n\tclose(l.tokens)\n}\n\nfunc init() {\n\tdateRegexp = regexp.MustCompile(`^\\d{1,4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})`)\n}\n\n// Entry point\nfunc lexToml(input io.Reader) chan token {\n\tbufferedInput := buffruneio.NewReader(input)\n\tl := &tomlLexer{\n\t\tinput:         bufferedInput,\n\t\ttokens:        make(chan token),\n\t\tline:          1,\n\t\tcol:           1,\n\t\tendbufferLine: 1,\n\t\tendbufferCol:  1,\n\t}\n\tgo l.run()\n\treturn l.tokens\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/marshal.go",
    "content": "package toml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n)\n\n/*\nTomlTree structural types and corresponding marshal types\n-------------------------------------------------------------------------------\n*TomlTree                        (*)struct, (*)map[string]interface{}\n[]*TomlTree                      (*)[](*)struct, (*)[](*)map[string]interface{}\n[]interface{} (as interface{})   (*)[]primitive, (*)[]([]interface{})\ninterface{}                      (*)primitive\n\nTomlTree primitive types and  corresponding marshal types\n-----------------------------------------------------------\nuint64     uint, uint8-uint64, pointers to same\nint64      int, int8-uint64, pointers to same\nfloat64    float32, float64, pointers to same\nstring     string, pointers to same\nbool       bool, pointers to same\ntime.Time  time.Time{}, pointers to same\n*/\n\ntype tomlOpts struct {\n\tname      string\n\tinclude   bool\n\tomitempty bool\n}\n\nvar timeType = reflect.TypeOf(time.Time{})\nvar marshalerType = reflect.TypeOf(new(Marshaler)).Elem()\n\n// Check if the given marshall type maps to a TomlTree primitive\nfunc isPrimitive(mtype reflect.Type) bool {\n\tswitch mtype.Kind() {\n\tcase reflect.Ptr:\n\t\treturn isPrimitive(mtype.Elem())\n\tcase reflect.Bool:\n\t\treturn true\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn true\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\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.Struct:\n\t\treturn mtype == timeType || isCustomMarshaler(mtype)\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Check if the given marshall type maps to a TomlTree slice\nfunc isTreeSlice(mtype reflect.Type) bool {\n\tswitch mtype.Kind() {\n\tcase reflect.Slice:\n\t\treturn !isOtherSlice(mtype)\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Check if the given marshall type maps to a non-TomlTree slice\nfunc isOtherSlice(mtype reflect.Type) bool {\n\tswitch mtype.Kind() {\n\tcase reflect.Ptr:\n\t\treturn isOtherSlice(mtype.Elem())\n\tcase reflect.Slice:\n\t\treturn isPrimitive(mtype.Elem()) || isOtherSlice(mtype.Elem())\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Check if the given marshall type maps to a TomlTree\nfunc isTree(mtype reflect.Type) bool {\n\tswitch mtype.Kind() {\n\tcase reflect.Map:\n\t\treturn true\n\tcase reflect.Struct:\n\t\treturn !isPrimitive(mtype)\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc isCustomMarshaler(mtype reflect.Type) bool {\n\treturn mtype.Implements(marshalerType)\n}\n\nfunc callCustomMarshaler(mval reflect.Value) ([]byte, error) {\n\treturn mval.Interface().(Marshaler).MarshalTOML()\n}\n\n// Marshaler is the interface implemented by types that\n// can marshal themselves into valid TOML.\ntype Marshaler interface {\n\tMarshalTOML() ([]byte, error)\n}\n\n/*\nMarshal returns the TOML encoding of v.  Behavior is similar to the Go json\nencoder, except that there is no concept of a Marshaler interface or MarshalTOML\nfunction for sub-structs, and currently only definite types can be marshaled\n(i.e. no `interface{}`).\n\nNote that pointers are automatically assigned the \"omitempty\" option, as TOML\nexplicity does not handle null values (saying instead the label should be\ndropped).\n*/\nfunc Marshal(v interface{}) ([]byte, error) {\n\tmtype := reflect.TypeOf(v)\n\tif mtype.Kind() != reflect.Struct {\n\t\treturn []byte{}, errors.New(\"Only a struct can be marshaled to TOML\")\n\t}\n\tsval := reflect.ValueOf(v)\n\tif isCustomMarshaler(mtype) {\n\t\treturn callCustomMarshaler(sval)\n\t}\n\tt, err := valueToTree(mtype, sval)\n\tif err != nil {\n\t\treturn []byte{}, err\n\t}\n\ts, err := t.ToTomlString()\n\treturn []byte(s), err\n}\n\n// Convert given marshal struct or map value to toml tree\nfunc valueToTree(mtype reflect.Type, mval reflect.Value) (*TomlTree, error) {\n\tif mtype.Kind() == reflect.Ptr {\n\t\treturn valueToTree(mtype.Elem(), mval.Elem())\n\t}\n\ttval := newTomlTree()\n\tswitch mtype.Kind() {\n\tcase reflect.Struct:\n\t\tfor i := 0; i < mtype.NumField(); i++ {\n\t\t\tmtypef, mvalf := mtype.Field(i), mval.Field(i)\n\t\t\topts := tomlOptions(mtypef)\n\t\t\tif opts.include && (!opts.omitempty || !isZero(mvalf)) {\n\t\t\t\tval, err := valueToToml(mtypef.Type, mvalf)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\ttval.Set(opts.name, val)\n\t\t\t}\n\t\t}\n\tcase reflect.Map:\n\t\tfor _, key := range mval.MapKeys() {\n\t\t\tmvalf := mval.MapIndex(key)\n\t\t\tval, err := valueToToml(mtype.Elem(), mvalf)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttval.Set(key.String(), val)\n\t\t}\n\t}\n\treturn tval, nil\n}\n\n// Convert given marshal slice to slice of Toml trees\nfunc valueToTreeSlice(mtype reflect.Type, mval reflect.Value) ([]*TomlTree, error) {\n\ttval := make([]*TomlTree, mval.Len(), mval.Len())\n\tfor i := 0; i < mval.Len(); i++ {\n\t\tval, err := valueToTree(mtype.Elem(), mval.Index(i))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttval[i] = val\n\t}\n\treturn tval, nil\n}\n\n// Convert given marshal slice to slice of toml values\nfunc valueToOtherSlice(mtype reflect.Type, mval reflect.Value) (interface{}, error) {\n\ttval := make([]interface{}, mval.Len(), mval.Len())\n\tfor i := 0; i < mval.Len(); i++ {\n\t\tval, err := valueToToml(mtype.Elem(), mval.Index(i))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttval[i] = val\n\t}\n\treturn tval, nil\n}\n\n// Convert given marshal value to toml value\nfunc valueToToml(mtype reflect.Type, mval reflect.Value) (interface{}, error) {\n\tif mtype.Kind() == reflect.Ptr {\n\t\treturn valueToToml(mtype.Elem(), mval.Elem())\n\t}\n\tswitch {\n\tcase isCustomMarshaler(mtype):\n\t\treturn callCustomMarshaler(mval)\n\tcase isTree(mtype):\n\t\treturn valueToTree(mtype, mval)\n\tcase isTreeSlice(mtype):\n\t\treturn valueToTreeSlice(mtype, mval)\n\tcase isOtherSlice(mtype):\n\t\treturn valueToOtherSlice(mtype, mval)\n\tdefault:\n\t\tswitch mtype.Kind() {\n\t\tcase reflect.Bool:\n\t\t\treturn mval.Bool(), nil\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\treturn mval.Int(), nil\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\treturn mval.Uint(), nil\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\treturn mval.Float(), nil\n\t\tcase reflect.String:\n\t\t\treturn mval.String(), nil\n\t\tcase reflect.Struct:\n\t\t\treturn mval.Interface().(time.Time), nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"Marshal can't handle %v(%v)\", mtype, mtype.Kind())\n\t\t}\n\t}\n}\n\n/*\nUnmarshal parses the TOML-encoded data and stores the result in the value\npointed to by v. Behavior is similar to the Go json encoder, except that there\nis no concept of an Unmarshaler interface or UnmarshalTOML function for\nsub-structs, and currently only definite types can be unmarshaled to (i.e. no\n`interface{}`).\n*/\nfunc Unmarshal(data []byte, v interface{}) error {\n\tmtype := reflect.TypeOf(v)\n\tif mtype.Kind() != reflect.Ptr || mtype.Elem().Kind() != reflect.Struct {\n\t\treturn errors.New(\"Only a pointer to struct can be unmarshaled from TOML\")\n\t}\n\n\tt, err := Load(string(data))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsval, err := valueFromTree(mtype.Elem(), t)\n\tif err != nil {\n\t\treturn err\n\t}\n\treflect.ValueOf(v).Elem().Set(sval)\n\treturn nil\n}\n\n// Convert toml tree to marshal struct or map, using marshal type\nfunc valueFromTree(mtype reflect.Type, tval *TomlTree) (reflect.Value, error) {\n\tif mtype.Kind() == reflect.Ptr {\n\t\treturn unwrapPointer(mtype, tval)\n\t}\n\tvar mval reflect.Value\n\tswitch mtype.Kind() {\n\tcase reflect.Struct:\n\t\tmval = reflect.New(mtype).Elem()\n\t\tfor i := 0; i < mtype.NumField(); i++ {\n\t\t\tmtypef := mtype.Field(i)\n\t\t\topts := tomlOptions(mtypef)\n\t\t\tif opts.include {\n\t\t\t\tkey := opts.name\n\t\t\t\texists := tval.Has(key)\n\t\t\t\tif exists {\n\t\t\t\t\tval := tval.Get(key)\n\t\t\t\t\tmvalf, err := valueFromToml(mtypef.Type, val)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn mval, formatError(err, tval.GetPosition(key))\n\t\t\t\t\t}\n\t\t\t\t\tmval.Field(i).Set(mvalf)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Map:\n\t\tmval = reflect.MakeMap(mtype)\n\t\tfor _, key := range tval.Keys() {\n\t\t\tval := tval.Get(key)\n\t\t\tmvalf, err := valueFromToml(mtype.Elem(), val)\n\t\t\tif err != nil {\n\t\t\t\treturn mval, formatError(err, tval.GetPosition(key))\n\t\t\t}\n\t\t\tmval.SetMapIndex(reflect.ValueOf(key), mvalf)\n\t\t}\n\t}\n\treturn mval, nil\n}\n\n// Convert toml value to marshal struct/map slice, using marshal type\nfunc valueFromTreeSlice(mtype reflect.Type, tval []*TomlTree) (reflect.Value, error) {\n\tmval := reflect.MakeSlice(mtype, len(tval), len(tval))\n\tfor i := 0; i < len(tval); i++ {\n\t\tval, err := valueFromTree(mtype.Elem(), tval[i])\n\t\tif err != nil {\n\t\t\treturn mval, err\n\t\t}\n\t\tmval.Index(i).Set(val)\n\t}\n\treturn mval, nil\n}\n\n// Convert toml value to marshal primitive slice, using marshal type\nfunc valueFromOtherSlice(mtype reflect.Type, tval []interface{}) (reflect.Value, error) {\n\tmval := reflect.MakeSlice(mtype, len(tval), len(tval))\n\tfor i := 0; i < len(tval); i++ {\n\t\tval, err := valueFromToml(mtype.Elem(), tval[i])\n\t\tif err != nil {\n\t\t\treturn mval, err\n\t\t}\n\t\tmval.Index(i).Set(val)\n\t}\n\treturn mval, nil\n}\n\n// Convert toml value to marshal value, using marshal type\nfunc valueFromToml(mtype reflect.Type, tval interface{}) (reflect.Value, error) {\n\tif mtype.Kind() == reflect.Ptr {\n\t\treturn unwrapPointer(mtype, tval)\n\t}\n\tswitch {\n\tcase isTree(mtype):\n\t\treturn valueFromTree(mtype, tval.(*TomlTree))\n\tcase isTreeSlice(mtype):\n\t\treturn valueFromTreeSlice(mtype, tval.([]*TomlTree))\n\tcase isOtherSlice(mtype):\n\t\treturn valueFromOtherSlice(mtype, tval.([]interface{}))\n\tdefault:\n\t\tswitch mtype.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tval, ok := tval.(bool)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to bool\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(val), nil\n\t\tcase reflect.Int:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to int\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(int(val)), nil\n\t\tcase reflect.Int8:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to int\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(int8(val)), nil\n\t\tcase reflect.Int16:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to int\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(int16(val)), nil\n\t\tcase reflect.Int32:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to int\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(int32(val)), nil\n\t\tcase reflect.Int64:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to int\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(val), nil\n\t\tcase reflect.Uint:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to uint\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(uint(val)), nil\n\t\tcase reflect.Uint8:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to uint\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(uint8(val)), nil\n\t\tcase reflect.Uint16:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to uint\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(uint16(val)), nil\n\t\tcase reflect.Uint32:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to uint\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(uint32(val)), nil\n\t\tcase reflect.Uint64:\n\t\t\tval, ok := tval.(int64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to uint\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(uint64(val)), nil\n\t\tcase reflect.Float32:\n\t\t\tval, ok := tval.(float64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to float\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(float32(val)), nil\n\t\tcase reflect.Float64:\n\t\t\tval, ok := tval.(float64)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to float\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(val), nil\n\t\tcase reflect.String:\n\t\t\tval, ok := tval.(string)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to string\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(val), nil\n\t\tcase reflect.Struct:\n\t\t\tval, ok := tval.(time.Time)\n\t\t\tif !ok {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Can't convert %v(%T) to time\", tval, tval)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(val), nil\n\t\tdefault:\n\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"Unmarshal can't handle %v(%v)\", mtype, mtype.Kind())\n\t\t}\n\t}\n}\n\nfunc unwrapPointer(mtype reflect.Type, tval interface{}) (reflect.Value, error) {\n\tval, err := valueFromToml(mtype.Elem(), tval)\n\tif err != nil {\n\t\treturn reflect.ValueOf(nil), err\n\t}\n\tmval := reflect.New(mtype.Elem())\n\tmval.Elem().Set(val)\n\treturn mval, nil\n}\n\nfunc tomlOptions(vf reflect.StructField) tomlOpts {\n\ttag := vf.Tag.Get(\"toml\")\n\tparse := strings.Split(tag, \",\")\n\tresult := tomlOpts{vf.Name, true, false}\n\tif parse[0] != \"\" {\n\t\tif parse[0] == \"-\" && len(parse) == 1 {\n\t\t\tresult.include = false\n\t\t} else {\n\t\t\tresult.name = strings.Trim(parse[0], \" \")\n\t\t}\n\t}\n\tif vf.PkgPath != \"\" {\n\t\tresult.include = false\n\t}\n\tif len(parse) > 1 && strings.Trim(parse[1], \" \") == \"omitempty\" {\n\t\tresult.omitempty = true\n\t}\n\tif vf.Type.Kind() == reflect.Ptr {\n\t\tresult.omitempty = true\n\t}\n\treturn result\n}\n\nfunc isZero(val reflect.Value) bool {\n\tswitch val.Type().Kind() {\n\tcase reflect.Map:\n\t\tfallthrough\n\tcase reflect.Array:\n\t\tfallthrough\n\tcase reflect.Slice:\n\t\treturn val.Len() == 0\n\tdefault:\n\t\treturn reflect.DeepEqual(val.Interface(), reflect.Zero(val.Type()).Interface())\n\t}\n}\n\nfunc formatError(err error, pos Position) error {\n\tif err.Error()[0] == '(' { // Error already contains position information\n\t\treturn err\n\t}\n\treturn fmt.Errorf(\"%s: %s\", pos, err)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/match.go",
    "content": "package toml\n\nimport (\n\t\"fmt\"\n)\n\n// support function to set positions for tomlValues\n// NOTE: this is done to allow ctx.lastPosition to indicate the start of any\n// values returned by the query engines\nfunc tomlValueCheck(node interface{}, ctx *queryContext) interface{} {\n\tswitch castNode := node.(type) {\n\tcase *tomlValue:\n\t\tctx.lastPosition = castNode.position\n\t\treturn castNode.value\n\tcase []*TomlTree:\n\t\tif len(castNode) > 0 {\n\t\t\tctx.lastPosition = castNode[0].position\n\t\t}\n\t\treturn node\n\tdefault:\n\t\treturn node\n\t}\n}\n\n// base match\ntype matchBase struct {\n\tnext pathFn\n}\n\nfunc (f *matchBase) setNext(next pathFn) {\n\tf.next = next\n}\n\n// terminating functor - gathers results\ntype terminatingFn struct {\n\t// empty\n}\n\nfunc newTerminatingFn() *terminatingFn {\n\treturn &terminatingFn{}\n}\n\nfunc (f *terminatingFn) setNext(next pathFn) {\n\t// do nothing\n}\n\nfunc (f *terminatingFn) call(node interface{}, ctx *queryContext) {\n\tswitch castNode := node.(type) {\n\tcase *TomlTree:\n\t\tctx.result.appendResult(node, castNode.position)\n\tcase *tomlValue:\n\t\tctx.result.appendResult(node, castNode.position)\n\tdefault:\n\t\t// use last position for scalars\n\t\tctx.result.appendResult(node, ctx.lastPosition)\n\t}\n}\n\n// match single key\ntype matchKeyFn struct {\n\tmatchBase\n\tName string\n}\n\nfunc newMatchKeyFn(name string) *matchKeyFn {\n\treturn &matchKeyFn{Name: name}\n}\n\nfunc (f *matchKeyFn) call(node interface{}, ctx *queryContext) {\n\tif array, ok := node.([]*TomlTree); ok {\n\t\tfor _, tree := range array {\n\t\t\titem := tree.values[f.Name]\n\t\t\tif item != nil {\n\t\t\t\tf.next.call(item, ctx)\n\t\t\t}\n\t\t}\n\t} else if tree, ok := node.(*TomlTree); ok {\n\t\titem := tree.values[f.Name]\n\t\tif item != nil {\n\t\t\tf.next.call(item, ctx)\n\t\t}\n\t}\n}\n\n// match single index\ntype matchIndexFn struct {\n\tmatchBase\n\tIdx int\n}\n\nfunc newMatchIndexFn(idx int) *matchIndexFn {\n\treturn &matchIndexFn{Idx: idx}\n}\n\nfunc (f *matchIndexFn) call(node interface{}, ctx *queryContext) {\n\tif arr, ok := tomlValueCheck(node, ctx).([]interface{}); ok {\n\t\tif f.Idx < len(arr) && f.Idx >= 0 {\n\t\t\tf.next.call(arr[f.Idx], ctx)\n\t\t}\n\t}\n}\n\n// filter by slicing\ntype matchSliceFn struct {\n\tmatchBase\n\tStart, End, Step int\n}\n\nfunc newMatchSliceFn(start, end, step int) *matchSliceFn {\n\treturn &matchSliceFn{Start: start, End: end, Step: step}\n}\n\nfunc (f *matchSliceFn) call(node interface{}, ctx *queryContext) {\n\tif arr, ok := tomlValueCheck(node, ctx).([]interface{}); ok {\n\t\t// adjust indexes for negative values, reverse ordering\n\t\trealStart, realEnd := f.Start, f.End\n\t\tif realStart < 0 {\n\t\t\trealStart = len(arr) + realStart\n\t\t}\n\t\tif realEnd < 0 {\n\t\t\trealEnd = len(arr) + realEnd\n\t\t}\n\t\tif realEnd < realStart {\n\t\t\trealEnd, realStart = realStart, realEnd // swap\n\t\t}\n\t\t// loop and gather\n\t\tfor idx := realStart; idx < realEnd; idx += f.Step {\n\t\t\tf.next.call(arr[idx], ctx)\n\t\t}\n\t}\n}\n\n// match anything\ntype matchAnyFn struct {\n\tmatchBase\n}\n\nfunc newMatchAnyFn() *matchAnyFn {\n\treturn &matchAnyFn{}\n}\n\nfunc (f *matchAnyFn) call(node interface{}, ctx *queryContext) {\n\tif tree, ok := node.(*TomlTree); ok {\n\t\tfor _, v := range tree.values {\n\t\t\tf.next.call(v, ctx)\n\t\t}\n\t}\n}\n\n// filter through union\ntype matchUnionFn struct {\n\tUnion []pathFn\n}\n\nfunc (f *matchUnionFn) setNext(next pathFn) {\n\tfor _, fn := range f.Union {\n\t\tfn.setNext(next)\n\t}\n}\n\nfunc (f *matchUnionFn) call(node interface{}, ctx *queryContext) {\n\tfor _, fn := range f.Union {\n\t\tfn.call(node, ctx)\n\t}\n}\n\n// match every single last node in the tree\ntype matchRecursiveFn struct {\n\tmatchBase\n}\n\nfunc newMatchRecursiveFn() *matchRecursiveFn {\n\treturn &matchRecursiveFn{}\n}\n\nfunc (f *matchRecursiveFn) call(node interface{}, ctx *queryContext) {\n\tif tree, ok := node.(*TomlTree); ok {\n\t\tvar visit func(tree *TomlTree)\n\t\tvisit = func(tree *TomlTree) {\n\t\t\tfor _, v := range tree.values {\n\t\t\t\tf.next.call(v, ctx)\n\t\t\t\tswitch node := v.(type) {\n\t\t\t\tcase *TomlTree:\n\t\t\t\t\tvisit(node)\n\t\t\t\tcase []*TomlTree:\n\t\t\t\t\tfor _, subtree := range node {\n\t\t\t\t\t\tvisit(subtree)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tf.next.call(tree, ctx)\n\t\tvisit(tree)\n\t}\n}\n\n// match based on an externally provided functional filter\ntype matchFilterFn struct {\n\tmatchBase\n\tPos  Position\n\tName string\n}\n\nfunc newMatchFilterFn(name string, pos Position) *matchFilterFn {\n\treturn &matchFilterFn{Name: name, Pos: pos}\n}\n\nfunc (f *matchFilterFn) call(node interface{}, ctx *queryContext) {\n\tfn, ok := (*ctx.filters)[f.Name]\n\tif !ok {\n\t\tpanic(fmt.Sprintf(\"%s: query context does not have filter '%s'\",\n\t\t\tf.Pos.String(), f.Name))\n\t}\n\tswitch castNode := tomlValueCheck(node, ctx).(type) {\n\tcase *TomlTree:\n\t\tfor _, v := range castNode.values {\n\t\t\tif tv, ok := v.(*tomlValue); ok {\n\t\t\t\tif fn(tv.value) {\n\t\t\t\t\tf.next.call(v, ctx)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif fn(v) {\n\t\t\t\t\tf.next.call(v, ctx)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase []interface{}:\n\t\tfor _, v := range castNode {\n\t\t\tif fn(v) {\n\t\t\t\tf.next.call(v, ctx)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/parser.go",
    "content": "// TOML Parser.\n\npackage toml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype tomlParser struct {\n\tflow          chan token\n\ttree          *TomlTree\n\ttokensBuffer  []token\n\tcurrentTable  []string\n\tseenTableKeys []string\n}\n\ntype tomlParserStateFn func() tomlParserStateFn\n\n// Formats and panics an error message based on a token\nfunc (p *tomlParser) raiseError(tok *token, msg string, args ...interface{}) {\n\tpanic(tok.Position.String() + \": \" + fmt.Sprintf(msg, args...))\n}\n\nfunc (p *tomlParser) run() {\n\tfor state := p.parseStart; state != nil; {\n\t\tstate = state()\n\t}\n}\n\nfunc (p *tomlParser) peek() *token {\n\tif len(p.tokensBuffer) != 0 {\n\t\treturn &(p.tokensBuffer[0])\n\t}\n\n\ttok, ok := <-p.flow\n\tif !ok {\n\t\treturn nil\n\t}\n\tp.tokensBuffer = append(p.tokensBuffer, tok)\n\treturn &tok\n}\n\nfunc (p *tomlParser) assume(typ tokenType) {\n\ttok := p.getToken()\n\tif tok == nil {\n\t\tp.raiseError(tok, \"was expecting token %s, but token stream is empty\", tok)\n\t}\n\tif tok.typ != typ {\n\t\tp.raiseError(tok, \"was expecting token %s, but got %s instead\", typ, tok)\n\t}\n}\n\nfunc (p *tomlParser) getToken() *token {\n\tif len(p.tokensBuffer) != 0 {\n\t\ttok := p.tokensBuffer[0]\n\t\tp.tokensBuffer = p.tokensBuffer[1:]\n\t\treturn &tok\n\t}\n\ttok, ok := <-p.flow\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn &tok\n}\n\nfunc (p *tomlParser) parseStart() tomlParserStateFn {\n\ttok := p.peek()\n\n\t// end of stream, parsing is finished\n\tif tok == nil {\n\t\treturn nil\n\t}\n\n\tswitch tok.typ {\n\tcase tokenDoubleLeftBracket:\n\t\treturn p.parseGroupArray\n\tcase tokenLeftBracket:\n\t\treturn p.parseGroup\n\tcase tokenKey:\n\t\treturn p.parseAssign\n\tcase tokenEOF:\n\t\treturn nil\n\tdefault:\n\t\tp.raiseError(tok, \"unexpected token\")\n\t}\n\treturn nil\n}\n\nfunc (p *tomlParser) parseGroupArray() tomlParserStateFn {\n\tstartToken := p.getToken() // discard the [[\n\tkey := p.getToken()\n\tif key.typ != tokenKeyGroupArray {\n\t\tp.raiseError(key, \"unexpected token %s, was expecting a table array key\", key)\n\t}\n\n\t// get or create table array element at the indicated part in the path\n\tkeys, err := parseKey(key.val)\n\tif err != nil {\n\t\tp.raiseError(key, \"invalid table array key: %s\", err)\n\t}\n\tp.tree.createSubTree(keys[:len(keys)-1], startToken.Position) // create parent entries\n\tdestTree := p.tree.GetPath(keys)\n\tvar array []*TomlTree\n\tif destTree == nil {\n\t\tarray = make([]*TomlTree, 0)\n\t} else if target, ok := destTree.([]*TomlTree); ok && target != nil {\n\t\tarray = destTree.([]*TomlTree)\n\t} else {\n\t\tp.raiseError(key, \"key %s is already assigned and not of type table array\", key)\n\t}\n\tp.currentTable = keys\n\n\t// add a new tree to the end of the table array\n\tnewTree := newTomlTree()\n\tnewTree.position = startToken.Position\n\tarray = append(array, newTree)\n\tp.tree.SetPath(p.currentTable, array)\n\n\t// remove all keys that were children of this table array\n\tprefix := key.val + \".\"\n\tfound := false\n\tfor ii := 0; ii < len(p.seenTableKeys); {\n\t\ttableKey := p.seenTableKeys[ii]\n\t\tif strings.HasPrefix(tableKey, prefix) {\n\t\t\tp.seenTableKeys = append(p.seenTableKeys[:ii], p.seenTableKeys[ii+1:]...)\n\t\t} else {\n\t\t\tfound = (tableKey == key.val)\n\t\t\tii++\n\t\t}\n\t}\n\n\t// keep this key name from use by other kinds of assignments\n\tif !found {\n\t\tp.seenTableKeys = append(p.seenTableKeys, key.val)\n\t}\n\n\t// move to next parser state\n\tp.assume(tokenDoubleRightBracket)\n\treturn p.parseStart\n}\n\nfunc (p *tomlParser) parseGroup() tomlParserStateFn {\n\tstartToken := p.getToken() // discard the [\n\tkey := p.getToken()\n\tif key.typ != tokenKeyGroup {\n\t\tp.raiseError(key, \"unexpected token %s, was expecting a table key\", key)\n\t}\n\tfor _, item := range p.seenTableKeys {\n\t\tif item == key.val {\n\t\t\tp.raiseError(key, \"duplicated tables\")\n\t\t}\n\t}\n\n\tp.seenTableKeys = append(p.seenTableKeys, key.val)\n\tkeys, err := parseKey(key.val)\n\tif err != nil {\n\t\tp.raiseError(key, \"invalid table array key: %s\", err)\n\t}\n\tif err := p.tree.createSubTree(keys, startToken.Position); err != nil {\n\t\tp.raiseError(key, \"%s\", err)\n\t}\n\tp.assume(tokenRightBracket)\n\tp.currentTable = keys\n\treturn p.parseStart\n}\n\nfunc (p *tomlParser) parseAssign() tomlParserStateFn {\n\tkey := p.getToken()\n\tp.assume(tokenEqual)\n\n\tvalue := p.parseRvalue()\n\tvar tableKey []string\n\tif len(p.currentTable) > 0 {\n\t\ttableKey = p.currentTable\n\t} else {\n\t\ttableKey = []string{}\n\t}\n\n\t// find the table to assign, looking out for arrays of tables\n\tvar targetNode *TomlTree\n\tswitch node := p.tree.GetPath(tableKey).(type) {\n\tcase []*TomlTree:\n\t\ttargetNode = node[len(node)-1]\n\tcase *TomlTree:\n\t\ttargetNode = node\n\tdefault:\n\t\tp.raiseError(key, \"Unknown table type for path: %s\",\n\t\t\tstrings.Join(tableKey, \".\"))\n\t}\n\n\t// assign value to the found table\n\tkeyVals, err := parseKey(key.val)\n\tif err != nil {\n\t\tp.raiseError(key, \"%s\", err)\n\t}\n\tif len(keyVals) != 1 {\n\t\tp.raiseError(key, \"Invalid key\")\n\t}\n\tkeyVal := keyVals[0]\n\tlocalKey := []string{keyVal}\n\tfinalKey := append(tableKey, keyVal)\n\tif targetNode.GetPath(localKey) != nil {\n\t\tp.raiseError(key, \"The following key was defined twice: %s\",\n\t\t\tstrings.Join(finalKey, \".\"))\n\t}\n\tvar toInsert interface{}\n\n\tswitch value.(type) {\n\tcase *TomlTree, []*TomlTree:\n\t\ttoInsert = value\n\tdefault:\n\t\ttoInsert = &tomlValue{value, key.Position}\n\t}\n\ttargetNode.values[keyVal] = toInsert\n\treturn p.parseStart\n}\n\nvar numberUnderscoreInvalidRegexp *regexp.Regexp\n\nfunc cleanupNumberToken(value string) (string, error) {\n\tif numberUnderscoreInvalidRegexp.MatchString(value) {\n\t\treturn \"\", errors.New(\"invalid use of _ in number\")\n\t}\n\tcleanedVal := strings.Replace(value, \"_\", \"\", -1)\n\treturn cleanedVal, nil\n}\n\nfunc (p *tomlParser) parseRvalue() interface{} {\n\ttok := p.getToken()\n\tif tok == nil || tok.typ == tokenEOF {\n\t\tp.raiseError(tok, \"expecting a value\")\n\t}\n\n\tswitch tok.typ {\n\tcase tokenString:\n\t\treturn tok.val\n\tcase tokenTrue:\n\t\treturn true\n\tcase tokenFalse:\n\t\treturn false\n\tcase tokenInteger:\n\t\tcleanedVal, err := cleanupNumberToken(tok.val)\n\t\tif err != nil {\n\t\t\tp.raiseError(tok, \"%s\", err)\n\t\t}\n\t\tval, err := strconv.ParseInt(cleanedVal, 10, 64)\n\t\tif err != nil {\n\t\t\tp.raiseError(tok, \"%s\", err)\n\t\t}\n\t\treturn val\n\tcase tokenFloat:\n\t\tcleanedVal, err := cleanupNumberToken(tok.val)\n\t\tif err != nil {\n\t\t\tp.raiseError(tok, \"%s\", err)\n\t\t}\n\t\tval, err := strconv.ParseFloat(cleanedVal, 64)\n\t\tif err != nil {\n\t\t\tp.raiseError(tok, \"%s\", err)\n\t\t}\n\t\treturn val\n\tcase tokenDate:\n\t\tval, err := time.ParseInLocation(time.RFC3339Nano, tok.val, time.UTC)\n\t\tif err != nil {\n\t\t\tp.raiseError(tok, \"%s\", err)\n\t\t}\n\t\treturn val\n\tcase tokenLeftBracket:\n\t\treturn p.parseArray()\n\tcase tokenLeftCurlyBrace:\n\t\treturn p.parseInlineTable()\n\tcase tokenEqual:\n\t\tp.raiseError(tok, \"cannot have multiple equals for the same key\")\n\tcase tokenError:\n\t\tp.raiseError(tok, \"%s\", tok)\n\t}\n\n\tp.raiseError(tok, \"never reached\")\n\n\treturn nil\n}\n\nfunc tokenIsComma(t *token) bool {\n\treturn t != nil && t.typ == tokenComma\n}\n\nfunc (p *tomlParser) parseInlineTable() *TomlTree {\n\ttree := newTomlTree()\n\tvar previous *token\nLoop:\n\tfor {\n\t\tfollow := p.peek()\n\t\tif follow == nil || follow.typ == tokenEOF {\n\t\t\tp.raiseError(follow, \"unterminated inline table\")\n\t\t}\n\t\tswitch follow.typ {\n\t\tcase tokenRightCurlyBrace:\n\t\t\tp.getToken()\n\t\t\tbreak Loop\n\t\tcase tokenKey:\n\t\t\tif !tokenIsComma(previous) && previous != nil {\n\t\t\t\tp.raiseError(follow, \"comma expected between fields in inline table\")\n\t\t\t}\n\t\t\tkey := p.getToken()\n\t\t\tp.assume(tokenEqual)\n\t\t\tvalue := p.parseRvalue()\n\t\t\ttree.Set(key.val, value)\n\t\tcase tokenComma:\n\t\t\tif previous == nil {\n\t\t\t\tp.raiseError(follow, \"inline table cannot start with a comma\")\n\t\t\t}\n\t\t\tif tokenIsComma(previous) {\n\t\t\t\tp.raiseError(follow, \"need field between two commas in inline table\")\n\t\t\t}\n\t\t\tp.getToken()\n\t\tdefault:\n\t\t\tp.raiseError(follow, \"unexpected token type in inline table: %s\", follow.typ.String())\n\t\t}\n\t\tprevious = follow\n\t}\n\tif tokenIsComma(previous) {\n\t\tp.raiseError(previous, \"trailing comma at the end of inline table\")\n\t}\n\treturn tree\n}\n\nfunc (p *tomlParser) parseArray() interface{} {\n\tvar array []interface{}\n\tarrayType := reflect.TypeOf(nil)\n\tfor {\n\t\tfollow := p.peek()\n\t\tif follow == nil || follow.typ == tokenEOF {\n\t\t\tp.raiseError(follow, \"unterminated array\")\n\t\t}\n\t\tif follow.typ == tokenRightBracket {\n\t\t\tp.getToken()\n\t\t\tbreak\n\t\t}\n\t\tval := p.parseRvalue()\n\t\tif arrayType == nil {\n\t\t\tarrayType = reflect.TypeOf(val)\n\t\t}\n\t\tif reflect.TypeOf(val) != arrayType {\n\t\t\tp.raiseError(follow, \"mixed types in array\")\n\t\t}\n\t\tarray = append(array, val)\n\t\tfollow = p.peek()\n\t\tif follow == nil || follow.typ == tokenEOF {\n\t\t\tp.raiseError(follow, \"unterminated array\")\n\t\t}\n\t\tif follow.typ != tokenRightBracket && follow.typ != tokenComma {\n\t\t\tp.raiseError(follow, \"missing comma\")\n\t\t}\n\t\tif follow.typ == tokenComma {\n\t\t\tp.getToken()\n\t\t}\n\t}\n\t// An array of TomlTrees is actually an array of inline\n\t// tables, which is a shorthand for a table array. If the\n\t// array was not converted from []interface{} to []*TomlTree,\n\t// the two notations would not be equivalent.\n\tif arrayType == reflect.TypeOf(newTomlTree()) {\n\t\ttomlArray := make([]*TomlTree, len(array))\n\t\tfor i, v := range array {\n\t\t\ttomlArray[i] = v.(*TomlTree)\n\t\t}\n\t\treturn tomlArray\n\t}\n\treturn array\n}\n\nfunc parseToml(flow chan token) *TomlTree {\n\tresult := newTomlTree()\n\tresult.position = Position{1, 1}\n\tparser := &tomlParser{\n\t\tflow:          flow,\n\t\ttree:          result,\n\t\ttokensBuffer:  make([]token, 0),\n\t\tcurrentTable:  make([]string, 0),\n\t\tseenTableKeys: make([]string, 0),\n\t}\n\tparser.run()\n\treturn result\n}\n\nfunc init() {\n\tnumberUnderscoreInvalidRegexp = regexp.MustCompile(`([^\\d]_|_[^\\d]|_$|^_)`)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/position.go",
    "content": "// Position support for go-toml\n\npackage toml\n\nimport (\n\t\"fmt\"\n)\n\n// Position of a document element within a TOML document.\n//\n// Line and Col are both 1-indexed positions for the element's line number and\n// column number, respectively.  Values of zero or less will cause Invalid(),\n// to return true.\ntype Position struct {\n\tLine int // line within the document\n\tCol  int // column within the line\n}\n\n// String representation of the position.\n// Displays 1-indexed line and column numbers.\nfunc (p Position) String() string {\n\treturn fmt.Sprintf(\"(%d, %d)\", p.Line, p.Col)\n}\n\n// Invalid returns whether or not the position is valid (i.e. with negative or\n// null values)\nfunc (p Position) Invalid() bool {\n\treturn p.Line <= 0 || p.Col <= 0\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/query.go",
    "content": "package toml\n\nimport (\n\t\"time\"\n)\n\n// NodeFilterFn represents a user-defined filter function, for use with\n// Query.SetFilter().\n//\n// The return value of the function must indicate if 'node' is to be included\n// at this stage of the TOML path.  Returning true will include the node, and\n// returning false will exclude it.\n//\n// NOTE: Care should be taken to write script callbacks such that they are safe\n// to use from multiple goroutines.\ntype NodeFilterFn func(node interface{}) bool\n\n// QueryResult is the result of Executing a Query.\ntype QueryResult struct {\n\titems     []interface{}\n\tpositions []Position\n}\n\n// appends a value/position pair to the result set.\nfunc (r *QueryResult) appendResult(node interface{}, pos Position) {\n\tr.items = append(r.items, node)\n\tr.positions = append(r.positions, pos)\n}\n\n// Values is a set of values within a QueryResult.  The order of values is not\n// guaranteed to be in document order, and may be different each time a query is\n// executed.\nfunc (r QueryResult) Values() []interface{} {\n\tvalues := make([]interface{}, len(r.items))\n\tfor i, v := range r.items {\n\t\to, ok := v.(*tomlValue)\n\t\tif ok {\n\t\t\tvalues[i] = o.value\n\t\t} else {\n\t\t\tvalues[i] = v\n\t\t}\n\t}\n\treturn values\n}\n\n// Positions is a set of positions for values within a QueryResult.  Each index\n// in Positions() corresponds to the entry in Value() of the same index.\nfunc (r QueryResult) Positions() []Position {\n\treturn r.positions\n}\n\n// runtime context for executing query paths\ntype queryContext struct {\n\tresult       *QueryResult\n\tfilters      *map[string]NodeFilterFn\n\tlastPosition Position\n}\n\n// generic path functor interface\ntype pathFn interface {\n\tsetNext(next pathFn)\n\tcall(node interface{}, ctx *queryContext)\n}\n\n// A Query is the representation of a compiled TOML path.  A Query is safe\n// for concurrent use by multiple goroutines.\ntype Query struct {\n\troot    pathFn\n\ttail    pathFn\n\tfilters *map[string]NodeFilterFn\n}\n\nfunc newQuery() *Query {\n\treturn &Query{\n\t\troot:    nil,\n\t\ttail:    nil,\n\t\tfilters: &defaultFilterFunctions,\n\t}\n}\n\nfunc (q *Query) appendPath(next pathFn) {\n\tif q.root == nil {\n\t\tq.root = next\n\t} else {\n\t\tq.tail.setNext(next)\n\t}\n\tq.tail = next\n\tnext.setNext(newTerminatingFn()) // init the next functor\n}\n\n// CompileQuery compiles a TOML path expression.  The returned Query can be used\n// to match elements within a TomlTree and its descendants.\nfunc CompileQuery(path string) (*Query, error) {\n\treturn parseQuery(lexQuery(path))\n}\n\n// Execute executes a query against a TomlTree, and returns the result of the query.\nfunc (q *Query) Execute(tree *TomlTree) *QueryResult {\n\tresult := &QueryResult{\n\t\titems:     []interface{}{},\n\t\tpositions: []Position{},\n\t}\n\tif q.root == nil {\n\t\tresult.appendResult(tree, tree.GetPosition(\"\"))\n\t} else {\n\t\tctx := &queryContext{\n\t\t\tresult:  result,\n\t\t\tfilters: q.filters,\n\t\t}\n\t\tq.root.call(tree, ctx)\n\t}\n\treturn result\n}\n\n// SetFilter sets a user-defined filter function.  These may be used inside\n// \"?(..)\" query expressions to filter TOML document elements within a query.\nfunc (q *Query) SetFilter(name string, fn NodeFilterFn) {\n\tif q.filters == &defaultFilterFunctions {\n\t\t// clone the static table\n\t\tq.filters = &map[string]NodeFilterFn{}\n\t\tfor k, v := range defaultFilterFunctions {\n\t\t\t(*q.filters)[k] = v\n\t\t}\n\t}\n\t(*q.filters)[name] = fn\n}\n\nvar defaultFilterFunctions = map[string]NodeFilterFn{\n\t\"tree\": func(node interface{}) bool {\n\t\t_, ok := node.(*TomlTree)\n\t\treturn ok\n\t},\n\t\"int\": func(node interface{}) bool {\n\t\t_, ok := node.(int64)\n\t\treturn ok\n\t},\n\t\"float\": func(node interface{}) bool {\n\t\t_, ok := node.(float64)\n\t\treturn ok\n\t},\n\t\"string\": func(node interface{}) bool {\n\t\t_, ok := node.(string)\n\t\treturn ok\n\t},\n\t\"time\": func(node interface{}) bool {\n\t\t_, ok := node.(time.Time)\n\t\treturn ok\n\t},\n\t\"bool\": func(node interface{}) bool {\n\t\t_, ok := node.(bool)\n\t\treturn ok\n\t},\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/querylexer.go",
    "content": "// TOML JSONPath lexer.\n//\n// Written using the principles developed by Rob Pike in\n// http://www.youtube.com/watch?v=HxaD_trXwRE\n\npackage toml\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// Lexer state function\ntype queryLexStateFn func() queryLexStateFn\n\n// Lexer definition\ntype queryLexer struct {\n\tinput      string\n\tstart      int\n\tpos        int\n\twidth      int\n\ttokens     chan token\n\tdepth      int\n\tline       int\n\tcol        int\n\tstringTerm string\n}\n\nfunc (l *queryLexer) run() {\n\tfor state := l.lexVoid; state != nil; {\n\t\tstate = state()\n\t}\n\tclose(l.tokens)\n}\n\nfunc (l *queryLexer) nextStart() {\n\t// iterate by runes (utf8 characters)\n\t// search for newlines and advance line/col counts\n\tfor i := l.start; i < l.pos; {\n\t\tr, width := utf8.DecodeRuneInString(l.input[i:])\n\t\tif r == '\\n' {\n\t\t\tl.line++\n\t\t\tl.col = 1\n\t\t} else {\n\t\t\tl.col++\n\t\t}\n\t\ti += width\n\t}\n\t// advance start position to next token\n\tl.start = l.pos\n}\n\nfunc (l *queryLexer) emit(t tokenType) {\n\tl.tokens <- token{\n\t\tPosition: Position{l.line, l.col},\n\t\ttyp:      t,\n\t\tval:      l.input[l.start:l.pos],\n\t}\n\tl.nextStart()\n}\n\nfunc (l *queryLexer) emitWithValue(t tokenType, value string) {\n\tl.tokens <- token{\n\t\tPosition: Position{l.line, l.col},\n\t\ttyp:      t,\n\t\tval:      value,\n\t}\n\tl.nextStart()\n}\n\nfunc (l *queryLexer) next() rune {\n\tif l.pos >= len(l.input) {\n\t\tl.width = 0\n\t\treturn eof\n\t}\n\tvar r rune\n\tr, l.width = utf8.DecodeRuneInString(l.input[l.pos:])\n\tl.pos += l.width\n\treturn r\n}\n\nfunc (l *queryLexer) ignore() {\n\tl.nextStart()\n}\n\nfunc (l *queryLexer) backup() {\n\tl.pos -= l.width\n}\n\nfunc (l *queryLexer) errorf(format string, args ...interface{}) queryLexStateFn {\n\tl.tokens <- token{\n\t\tPosition: Position{l.line, l.col},\n\t\ttyp:      tokenError,\n\t\tval:      fmt.Sprintf(format, args...),\n\t}\n\treturn nil\n}\n\nfunc (l *queryLexer) peek() rune {\n\tr := l.next()\n\tl.backup()\n\treturn r\n}\n\nfunc (l *queryLexer) accept(valid string) bool {\n\tif strings.ContainsRune(valid, l.next()) {\n\t\treturn true\n\t}\n\tl.backup()\n\treturn false\n}\n\nfunc (l *queryLexer) follow(next string) bool {\n\treturn strings.HasPrefix(l.input[l.pos:], next)\n}\n\nfunc (l *queryLexer) lexVoid() queryLexStateFn {\n\tfor {\n\t\tnext := l.peek()\n\t\tswitch next {\n\t\tcase '$':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenDollar)\n\t\t\tcontinue\n\t\tcase '.':\n\t\t\tif l.follow(\"..\") {\n\t\t\t\tl.pos += 2\n\t\t\t\tl.emit(tokenDotDot)\n\t\t\t} else {\n\t\t\t\tl.pos++\n\t\t\t\tl.emit(tokenDot)\n\t\t\t}\n\t\t\tcontinue\n\t\tcase '[':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenLeftBracket)\n\t\t\tcontinue\n\t\tcase ']':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenRightBracket)\n\t\t\tcontinue\n\t\tcase ',':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenComma)\n\t\t\tcontinue\n\t\tcase '*':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenStar)\n\t\t\tcontinue\n\t\tcase '(':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenLeftParen)\n\t\t\tcontinue\n\t\tcase ')':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenRightParen)\n\t\t\tcontinue\n\t\tcase '?':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenQuestion)\n\t\t\tcontinue\n\t\tcase ':':\n\t\t\tl.pos++\n\t\t\tl.emit(tokenColon)\n\t\t\tcontinue\n\t\tcase '\\'':\n\t\t\tl.ignore()\n\t\t\tl.stringTerm = string(next)\n\t\t\treturn l.lexString\n\t\tcase '\"':\n\t\t\tl.ignore()\n\t\t\tl.stringTerm = string(next)\n\t\t\treturn l.lexString\n\t\t}\n\n\t\tif isSpace(next) {\n\t\t\tl.next()\n\t\t\tl.ignore()\n\t\t\tcontinue\n\t\t}\n\n\t\tif isAlphanumeric(next) {\n\t\t\treturn l.lexKey\n\t\t}\n\n\t\tif next == '+' || next == '-' || isDigit(next) {\n\t\t\treturn l.lexNumber\n\t\t}\n\n\t\tif l.next() == eof {\n\t\t\tbreak\n\t\t}\n\n\t\treturn l.errorf(\"unexpected char: '%v'\", next)\n\t}\n\tl.emit(tokenEOF)\n\treturn nil\n}\n\nfunc (l *queryLexer) lexKey() queryLexStateFn {\n\tfor {\n\t\tnext := l.peek()\n\t\tif !isAlphanumeric(next) {\n\t\t\tl.emit(tokenKey)\n\t\t\treturn l.lexVoid\n\t\t}\n\n\t\tif l.next() == eof {\n\t\t\tbreak\n\t\t}\n\t}\n\tl.emit(tokenEOF)\n\treturn nil\n}\n\nfunc (l *queryLexer) lexString() queryLexStateFn {\n\tl.pos++\n\tl.ignore()\n\tgrowingString := \"\"\n\n\tfor {\n\t\tif l.follow(l.stringTerm) {\n\t\t\tl.emitWithValue(tokenString, growingString)\n\t\t\tl.pos++\n\t\t\tl.ignore()\n\t\t\treturn l.lexVoid\n\t\t}\n\n\t\tif l.follow(\"\\\\\\\"\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\\"\"\n\t\t} else if l.follow(\"\\\\'\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"'\"\n\t\t} else if l.follow(\"\\\\n\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\n\"\n\t\t} else if l.follow(\"\\\\b\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\b\"\n\t\t} else if l.follow(\"\\\\f\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\f\"\n\t\t} else if l.follow(\"\\\\/\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"/\"\n\t\t} else if l.follow(\"\\\\t\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\t\"\n\t\t} else if l.follow(\"\\\\r\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\r\"\n\t\t} else if l.follow(\"\\\\\\\\\") {\n\t\t\tl.pos++\n\t\t\tgrowingString += \"\\\\\"\n\t\t} else if l.follow(\"\\\\u\") {\n\t\t\tl.pos += 2\n\t\t\tcode := \"\"\n\t\t\tfor i := 0; i < 4; i++ {\n\t\t\t\tc := l.peek()\n\t\t\t\tl.pos++\n\t\t\t\tif !isHexDigit(c) {\n\t\t\t\t\treturn l.errorf(\"unfinished unicode escape\")\n\t\t\t\t}\n\t\t\t\tcode = code + string(c)\n\t\t\t}\n\t\t\tl.pos--\n\t\t\tintcode, err := strconv.ParseInt(code, 16, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn l.errorf(\"invalid unicode escape: \\\\u\" + code)\n\t\t\t}\n\t\t\tgrowingString += string(rune(intcode))\n\t\t} else if l.follow(\"\\\\U\") {\n\t\t\tl.pos += 2\n\t\t\tcode := \"\"\n\t\t\tfor i := 0; i < 8; i++ {\n\t\t\t\tc := l.peek()\n\t\t\t\tl.pos++\n\t\t\t\tif !isHexDigit(c) {\n\t\t\t\t\treturn l.errorf(\"unfinished unicode escape\")\n\t\t\t\t}\n\t\t\t\tcode = code + string(c)\n\t\t\t}\n\t\t\tl.pos--\n\t\t\tintcode, err := strconv.ParseInt(code, 16, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn l.errorf(\"invalid unicode escape: \\\\u\" + code)\n\t\t\t}\n\t\t\tgrowingString += string(rune(intcode))\n\t\t} else if l.follow(\"\\\\\") {\n\t\t\tl.pos++\n\t\t\treturn l.errorf(\"invalid escape sequence: \\\\\" + string(l.peek()))\n\t\t} else {\n\t\t\tgrowingString += string(l.peek())\n\t\t}\n\n\t\tif l.next() == eof {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn l.errorf(\"unclosed string\")\n}\n\nfunc (l *queryLexer) lexNumber() queryLexStateFn {\n\tl.ignore()\n\tif !l.accept(\"+\") {\n\t\tl.accept(\"-\")\n\t}\n\tpointSeen := false\n\tdigitSeen := false\n\tfor {\n\t\tnext := l.next()\n\t\tif next == '.' {\n\t\t\tif pointSeen {\n\t\t\t\treturn l.errorf(\"cannot have two dots in one float\")\n\t\t\t}\n\t\t\tif !isDigit(l.peek()) {\n\t\t\t\treturn l.errorf(\"float cannot end with a dot\")\n\t\t\t}\n\t\t\tpointSeen = true\n\t\t} else if isDigit(next) {\n\t\t\tdigitSeen = true\n\t\t} else {\n\t\t\tl.backup()\n\t\t\tbreak\n\t\t}\n\t\tif pointSeen && !digitSeen {\n\t\t\treturn l.errorf(\"cannot start float with a dot\")\n\t\t}\n\t}\n\n\tif !digitSeen {\n\t\treturn l.errorf(\"no digit in that number\")\n\t}\n\tif pointSeen {\n\t\tl.emit(tokenFloat)\n\t} else {\n\t\tl.emit(tokenInteger)\n\t}\n\treturn l.lexVoid\n}\n\n// Entry point\nfunc lexQuery(input string) chan token {\n\tl := &queryLexer{\n\t\tinput:  input,\n\t\ttokens: make(chan token),\n\t\tline:   1,\n\t\tcol:    1,\n\t}\n\tgo l.run()\n\treturn l.tokens\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/queryparser.go",
    "content": "/*\n  Based on the \"jsonpath\" spec/concept.\n\n  http://goessner.net/articles/JsonPath/\n  https://code.google.com/p/json-path/\n*/\n\npackage toml\n\nimport (\n\t\"fmt\"\n)\n\nconst maxInt = int(^uint(0) >> 1)\n\ntype queryParser struct {\n\tflow         chan token\n\ttokensBuffer []token\n\tquery        *Query\n\tunion        []pathFn\n\terr          error\n}\n\ntype queryParserStateFn func() queryParserStateFn\n\n// Formats and panics an error message based on a token\nfunc (p *queryParser) parseError(tok *token, msg string, args ...interface{}) queryParserStateFn {\n\tp.err = fmt.Errorf(tok.Position.String()+\": \"+msg, args...)\n\treturn nil // trigger parse to end\n}\n\nfunc (p *queryParser) run() {\n\tfor state := p.parseStart; state != nil; {\n\t\tstate = state()\n\t}\n}\n\nfunc (p *queryParser) backup(tok *token) {\n\tp.tokensBuffer = append(p.tokensBuffer, *tok)\n}\n\nfunc (p *queryParser) peek() *token {\n\tif len(p.tokensBuffer) != 0 {\n\t\treturn &(p.tokensBuffer[0])\n\t}\n\n\ttok, ok := <-p.flow\n\tif !ok {\n\t\treturn nil\n\t}\n\tp.backup(&tok)\n\treturn &tok\n}\n\nfunc (p *queryParser) lookahead(types ...tokenType) bool {\n\tresult := true\n\tbuffer := []token{}\n\n\tfor _, typ := range types {\n\t\ttok := p.getToken()\n\t\tif tok == nil {\n\t\t\tresult = false\n\t\t\tbreak\n\t\t}\n\t\tbuffer = append(buffer, *tok)\n\t\tif tok.typ != typ {\n\t\t\tresult = false\n\t\t\tbreak\n\t\t}\n\t}\n\t// add the tokens back to the buffer, and return\n\tp.tokensBuffer = append(p.tokensBuffer, buffer...)\n\treturn result\n}\n\nfunc (p *queryParser) getToken() *token {\n\tif len(p.tokensBuffer) != 0 {\n\t\ttok := p.tokensBuffer[0]\n\t\tp.tokensBuffer = p.tokensBuffer[1:]\n\t\treturn &tok\n\t}\n\ttok, ok := <-p.flow\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn &tok\n}\n\nfunc (p *queryParser) parseStart() queryParserStateFn {\n\ttok := p.getToken()\n\n\tif tok == nil || tok.typ == tokenEOF {\n\t\treturn nil\n\t}\n\n\tif tok.typ != tokenDollar {\n\t\treturn p.parseError(tok, \"Expected '$' at start of expression\")\n\t}\n\n\treturn p.parseMatchExpr\n}\n\n// handle '.' prefix, '[]', and '..'\nfunc (p *queryParser) parseMatchExpr() queryParserStateFn {\n\ttok := p.getToken()\n\tswitch tok.typ {\n\tcase tokenDotDot:\n\t\tp.query.appendPath(&matchRecursiveFn{})\n\t\t// nested parse for '..'\n\t\ttok := p.getToken()\n\t\tswitch tok.typ {\n\t\tcase tokenKey:\n\t\t\tp.query.appendPath(newMatchKeyFn(tok.val))\n\t\t\treturn p.parseMatchExpr\n\t\tcase tokenLeftBracket:\n\t\t\treturn p.parseBracketExpr\n\t\tcase tokenStar:\n\t\t\t// do nothing - the recursive predicate is enough\n\t\t\treturn p.parseMatchExpr\n\t\t}\n\n\tcase tokenDot:\n\t\t// nested parse for '.'\n\t\ttok := p.getToken()\n\t\tswitch tok.typ {\n\t\tcase tokenKey:\n\t\t\tp.query.appendPath(newMatchKeyFn(tok.val))\n\t\t\treturn p.parseMatchExpr\n\t\tcase tokenStar:\n\t\t\tp.query.appendPath(&matchAnyFn{})\n\t\t\treturn p.parseMatchExpr\n\t\t}\n\n\tcase tokenLeftBracket:\n\t\treturn p.parseBracketExpr\n\n\tcase tokenEOF:\n\t\treturn nil // allow EOF at this stage\n\t}\n\treturn p.parseError(tok, \"expected match expression\")\n}\n\nfunc (p *queryParser) parseBracketExpr() queryParserStateFn {\n\tif p.lookahead(tokenInteger, tokenColon) {\n\t\treturn p.parseSliceExpr\n\t}\n\tif p.peek().typ == tokenColon {\n\t\treturn p.parseSliceExpr\n\t}\n\treturn p.parseUnionExpr\n}\n\nfunc (p *queryParser) parseUnionExpr() queryParserStateFn {\n\tvar tok *token\n\n\t// this state can be traversed after some sub-expressions\n\t// so be careful when setting up state in the parser\n\tif p.union == nil {\n\t\tp.union = []pathFn{}\n\t}\n\nloop: // labeled loop for easy breaking\n\tfor {\n\t\tif len(p.union) > 0 {\n\t\t\t// parse delimiter or terminator\n\t\t\ttok = p.getToken()\n\t\t\tswitch tok.typ {\n\t\t\tcase tokenComma:\n\t\t\t\t// do nothing\n\t\t\tcase tokenRightBracket:\n\t\t\t\tbreak loop\n\t\t\tdefault:\n\t\t\t\treturn p.parseError(tok, \"expected ',' or ']', not '%s'\", tok.val)\n\t\t\t}\n\t\t}\n\n\t\t// parse sub expression\n\t\ttok = p.getToken()\n\t\tswitch tok.typ {\n\t\tcase tokenInteger:\n\t\t\tp.union = append(p.union, newMatchIndexFn(tok.Int()))\n\t\tcase tokenKey:\n\t\t\tp.union = append(p.union, newMatchKeyFn(tok.val))\n\t\tcase tokenString:\n\t\t\tp.union = append(p.union, newMatchKeyFn(tok.val))\n\t\tcase tokenQuestion:\n\t\t\treturn p.parseFilterExpr\n\t\tdefault:\n\t\t\treturn p.parseError(tok, \"expected union sub expression, not '%s', %d\", tok.val, len(p.union))\n\t\t}\n\t}\n\n\t// if there is only one sub-expression, use that instead\n\tif len(p.union) == 1 {\n\t\tp.query.appendPath(p.union[0])\n\t} else {\n\t\tp.query.appendPath(&matchUnionFn{p.union})\n\t}\n\n\tp.union = nil // clear out state\n\treturn p.parseMatchExpr\n}\n\nfunc (p *queryParser) parseSliceExpr() queryParserStateFn {\n\t// init slice to grab all elements\n\tstart, end, step := 0, maxInt, 1\n\n\t// parse optional start\n\ttok := p.getToken()\n\tif tok.typ == tokenInteger {\n\t\tstart = tok.Int()\n\t\ttok = p.getToken()\n\t}\n\tif tok.typ != tokenColon {\n\t\treturn p.parseError(tok, \"expected ':'\")\n\t}\n\n\t// parse optional end\n\ttok = p.getToken()\n\tif tok.typ == tokenInteger {\n\t\tend = tok.Int()\n\t\ttok = p.getToken()\n\t}\n\tif tok.typ == tokenRightBracket {\n\t\tp.query.appendPath(newMatchSliceFn(start, end, step))\n\t\treturn p.parseMatchExpr\n\t}\n\tif tok.typ != tokenColon {\n\t\treturn p.parseError(tok, \"expected ']' or ':'\")\n\t}\n\n\t// parse optional step\n\ttok = p.getToken()\n\tif tok.typ == tokenInteger {\n\t\tstep = tok.Int()\n\t\tif step < 0 {\n\t\t\treturn p.parseError(tok, \"step must be a positive value\")\n\t\t}\n\t\ttok = p.getToken()\n\t}\n\tif tok.typ != tokenRightBracket {\n\t\treturn p.parseError(tok, \"expected ']'\")\n\t}\n\n\tp.query.appendPath(newMatchSliceFn(start, end, step))\n\treturn p.parseMatchExpr\n}\n\nfunc (p *queryParser) parseFilterExpr() queryParserStateFn {\n\ttok := p.getToken()\n\tif tok.typ != tokenLeftParen {\n\t\treturn p.parseError(tok, \"expected left-parenthesis for filter expression\")\n\t}\n\ttok = p.getToken()\n\tif tok.typ != tokenKey && tok.typ != tokenString {\n\t\treturn p.parseError(tok, \"expected key or string for filter funciton name\")\n\t}\n\tname := tok.val\n\ttok = p.getToken()\n\tif tok.typ != tokenRightParen {\n\t\treturn p.parseError(tok, \"expected right-parenthesis for filter expression\")\n\t}\n\tp.union = append(p.union, newMatchFilterFn(name, tok.Position))\n\treturn p.parseUnionExpr\n}\n\nfunc parseQuery(flow chan token) (*Query, error) {\n\tparser := &queryParser{\n\t\tflow:         flow,\n\t\ttokensBuffer: []token{},\n\t\tquery:        newQuery(),\n\t}\n\tparser.run()\n\treturn parser.query, parser.err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/token.go",
    "content": "package toml\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"unicode\"\n)\n\n// Define tokens\ntype tokenType int\n\nconst (\n\teof = -(iota + 1)\n)\n\nconst (\n\ttokenError tokenType = iota\n\ttokenEOF\n\ttokenComment\n\ttokenKey\n\ttokenString\n\ttokenInteger\n\ttokenTrue\n\ttokenFalse\n\ttokenFloat\n\ttokenEqual\n\ttokenLeftBracket\n\ttokenRightBracket\n\ttokenLeftCurlyBrace\n\ttokenRightCurlyBrace\n\ttokenLeftParen\n\ttokenRightParen\n\ttokenDoubleLeftBracket\n\ttokenDoubleRightBracket\n\ttokenDate\n\ttokenKeyGroup\n\ttokenKeyGroupArray\n\ttokenComma\n\ttokenColon\n\ttokenDollar\n\ttokenStar\n\ttokenQuestion\n\ttokenDot\n\ttokenDotDot\n\ttokenEOL\n)\n\nvar tokenTypeNames = []string{\n\t\"Error\",\n\t\"EOF\",\n\t\"Comment\",\n\t\"Key\",\n\t\"String\",\n\t\"Integer\",\n\t\"True\",\n\t\"False\",\n\t\"Float\",\n\t\"=\",\n\t\"[\",\n\t\"]\",\n\t\"{\",\n\t\"}\",\n\t\"(\",\n\t\")\",\n\t\"]]\",\n\t\"[[\",\n\t\"Date\",\n\t\"KeyGroup\",\n\t\"KeyGroupArray\",\n\t\",\",\n\t\":\",\n\t\"$\",\n\t\"*\",\n\t\"?\",\n\t\".\",\n\t\"..\",\n\t\"EOL\",\n}\n\ntype token struct {\n\tPosition\n\ttyp tokenType\n\tval string\n}\n\nfunc (tt tokenType) String() string {\n\tidx := int(tt)\n\tif idx < len(tokenTypeNames) {\n\t\treturn tokenTypeNames[idx]\n\t}\n\treturn \"Unknown\"\n}\n\nfunc (t token) Int() int {\n\tif result, err := strconv.Atoi(t.val); err != nil {\n\t\tpanic(err)\n\t} else {\n\t\treturn result\n\t}\n}\n\nfunc (t token) String() string {\n\tswitch t.typ {\n\tcase tokenEOF:\n\t\treturn \"EOF\"\n\tcase tokenError:\n\t\treturn t.val\n\t}\n\n\treturn fmt.Sprintf(\"%q\", t.val)\n}\n\nfunc isSpace(r rune) bool {\n\treturn r == ' ' || r == '\\t'\n}\n\nfunc isAlphanumeric(r rune) bool {\n\treturn unicode.IsLetter(r) || r == '_'\n}\n\nfunc isKeyChar(r rune) bool {\n\t// Keys start with the first character that isn't whitespace or [ and end\n\t// with the last non-whitespace character before the equals sign. Keys\n\t// cannot contain a # character.\"\n\treturn !(r == '\\r' || r == '\\n' || r == eof || r == '=')\n}\n\nfunc isKeyStartChar(r rune) bool {\n\treturn !(isSpace(r) || r == '\\r' || r == '\\n' || r == eof || r == '[')\n}\n\nfunc isDigit(r rune) bool {\n\treturn unicode.IsNumber(r)\n}\n\nfunc isHexDigit(r rune) bool {\n\treturn isDigit(r) ||\n\t\t(r >= 'a' && r <= 'f') ||\n\t\t(r >= 'A' && r <= 'F')\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/toml.go",
    "content": "package toml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n)\n\ntype tomlValue struct {\n\tvalue    interface{} // string, int64, uint64, float64, bool, time.Time, [] of any of this list\n\tposition Position\n}\n\n// TomlTree is the result of the parsing of a TOML file.\ntype TomlTree struct {\n\tvalues   map[string]interface{} // string -> *tomlValue, *TomlTree, []*TomlTree\n\tposition Position\n}\n\nfunc newTomlTree() *TomlTree {\n\treturn &TomlTree{\n\t\tvalues:   make(map[string]interface{}),\n\t\tposition: Position{},\n\t}\n}\n\n// TreeFromMap initializes a new TomlTree object using the given map.\nfunc TreeFromMap(m map[string]interface{}) (*TomlTree, error) {\n\tresult, err := toTree(m)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result.(*TomlTree), nil\n}\n\n// Has returns a boolean indicating if the given key exists.\nfunc (t *TomlTree) Has(key string) bool {\n\tif key == \"\" {\n\t\treturn false\n\t}\n\treturn t.HasPath(strings.Split(key, \".\"))\n}\n\n// HasPath returns true if the given path of keys exists, false otherwise.\nfunc (t *TomlTree) HasPath(keys []string) bool {\n\treturn t.GetPath(keys) != nil\n}\n\n// Keys returns the keys of the toplevel tree.\n// Warning: this is a costly operation.\nfunc (t *TomlTree) Keys() []string {\n\tvar keys []string\n\tfor k := range t.values {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// Get the value at key in the TomlTree.\n// Key is a dot-separated path (e.g. a.b.c).\n// Returns nil if the path does not exist in the tree.\n// If keys is of length zero, the current tree is returned.\nfunc (t *TomlTree) Get(key string) interface{} {\n\tif key == \"\" {\n\t\treturn t\n\t}\n\tcomps, err := parseKey(key)\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn t.GetPath(comps)\n}\n\n// GetPath returns the element in the tree indicated by 'keys'.\n// If keys is of length zero, the current tree is returned.\nfunc (t *TomlTree) GetPath(keys []string) interface{} {\n\tif len(keys) == 0 {\n\t\treturn t\n\t}\n\tsubtree := t\n\tfor _, intermediateKey := range keys[:len(keys)-1] {\n\t\tvalue, exists := subtree.values[intermediateKey]\n\t\tif !exists {\n\t\t\treturn nil\n\t\t}\n\t\tswitch node := value.(type) {\n\t\tcase *TomlTree:\n\t\t\tsubtree = node\n\t\tcase []*TomlTree:\n\t\t\t// go to most recent element\n\t\t\tif len(node) == 0 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tsubtree = node[len(node)-1]\n\t\tdefault:\n\t\t\treturn nil // cannot navigate through other node types\n\t\t}\n\t}\n\t// branch based on final node type\n\tswitch node := subtree.values[keys[len(keys)-1]].(type) {\n\tcase *tomlValue:\n\t\treturn node.value\n\tdefault:\n\t\treturn node\n\t}\n}\n\n// GetPosition returns the position of the given key.\nfunc (t *TomlTree) GetPosition(key string) Position {\n\tif key == \"\" {\n\t\treturn t.position\n\t}\n\treturn t.GetPositionPath(strings.Split(key, \".\"))\n}\n\n// GetPositionPath returns the element in the tree indicated by 'keys'.\n// If keys is of length zero, the current tree is returned.\nfunc (t *TomlTree) GetPositionPath(keys []string) Position {\n\tif len(keys) == 0 {\n\t\treturn t.position\n\t}\n\tsubtree := t\n\tfor _, intermediateKey := range keys[:len(keys)-1] {\n\t\tvalue, exists := subtree.values[intermediateKey]\n\t\tif !exists {\n\t\t\treturn Position{0, 0}\n\t\t}\n\t\tswitch node := value.(type) {\n\t\tcase *TomlTree:\n\t\t\tsubtree = node\n\t\tcase []*TomlTree:\n\t\t\t// go to most recent element\n\t\t\tif len(node) == 0 {\n\t\t\t\treturn Position{0, 0}\n\t\t\t}\n\t\t\tsubtree = node[len(node)-1]\n\t\tdefault:\n\t\t\treturn Position{0, 0}\n\t\t}\n\t}\n\t// branch based on final node type\n\tswitch node := subtree.values[keys[len(keys)-1]].(type) {\n\tcase *tomlValue:\n\t\treturn node.position\n\tcase *TomlTree:\n\t\treturn node.position\n\tcase []*TomlTree:\n\t\t// go to most recent element\n\t\tif len(node) == 0 {\n\t\t\treturn Position{0, 0}\n\t\t}\n\t\treturn node[len(node)-1].position\n\tdefault:\n\t\treturn Position{0, 0}\n\t}\n}\n\n// GetDefault works like Get but with a default value\nfunc (t *TomlTree) GetDefault(key string, def interface{}) interface{} {\n\tval := t.Get(key)\n\tif val == nil {\n\t\treturn def\n\t}\n\treturn val\n}\n\n// Set an element in the tree.\n// Key is a dot-separated path (e.g. a.b.c).\n// Creates all necessary intermediates trees, if needed.\nfunc (t *TomlTree) Set(key string, value interface{}) {\n\tt.SetPath(strings.Split(key, \".\"), value)\n}\n\n// SetPath sets an element in the tree.\n// Keys is an array of path elements (e.g. {\"a\",\"b\",\"c\"}).\n// Creates all necessary intermediates trees, if needed.\nfunc (t *TomlTree) SetPath(keys []string, value interface{}) {\n\tsubtree := t\n\tfor _, intermediateKey := range keys[:len(keys)-1] {\n\t\tnextTree, exists := subtree.values[intermediateKey]\n\t\tif !exists {\n\t\t\tnextTree = newTomlTree()\n\t\t\tsubtree.values[intermediateKey] = nextTree // add new element here\n\t\t}\n\t\tswitch node := nextTree.(type) {\n\t\tcase *TomlTree:\n\t\t\tsubtree = node\n\t\tcase []*TomlTree:\n\t\t\t// go to most recent element\n\t\t\tif len(node) == 0 {\n\t\t\t\t// create element if it does not exist\n\t\t\t\tsubtree.values[intermediateKey] = append(node, newTomlTree())\n\t\t\t}\n\t\t\tsubtree = node[len(node)-1]\n\t\t}\n\t}\n\n\tvar toInsert interface{}\n\n\tswitch value.(type) {\n\tcase *TomlTree:\n\t\ttoInsert = value\n\tcase []*TomlTree:\n\t\ttoInsert = value\n\tcase *tomlValue:\n\t\ttoInsert = value\n\tdefault:\n\t\ttoInsert = &tomlValue{value: value}\n\t}\n\n\tsubtree.values[keys[len(keys)-1]] = toInsert\n}\n\n// createSubTree takes a tree and a key and create the necessary intermediate\n// subtrees to create a subtree at that point. In-place.\n//\n// e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b]\n// and tree[a][b][c]\n//\n// Returns nil on success, error object on failure\nfunc (t *TomlTree) createSubTree(keys []string, pos Position) error {\n\tsubtree := t\n\tfor _, intermediateKey := range keys {\n\t\tnextTree, exists := subtree.values[intermediateKey]\n\t\tif !exists {\n\t\t\ttree := newTomlTree()\n\t\t\ttree.position = pos\n\t\t\tsubtree.values[intermediateKey] = tree\n\t\t\tnextTree = tree\n\t\t}\n\n\t\tswitch node := nextTree.(type) {\n\t\tcase []*TomlTree:\n\t\t\tsubtree = node[len(node)-1]\n\t\tcase *TomlTree:\n\t\t\tsubtree = node\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown type for path %s (%s): %T (%#v)\",\n\t\t\t\tstrings.Join(keys, \".\"), intermediateKey, nextTree, nextTree)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Query compiles and executes a query on a tree and returns the query result.\nfunc (t *TomlTree) Query(query string) (*QueryResult, error) {\n\tq, err := CompileQuery(query)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn q.Execute(t), nil\n}\n\n// LoadReader creates a TomlTree from any io.Reader.\nfunc LoadReader(reader io.Reader) (tree *TomlTree, err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tif _, ok := r.(runtime.Error); ok {\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t\terr = errors.New(r.(string))\n\t\t}\n\t}()\n\ttree = parseToml(lexToml(reader))\n\treturn\n}\n\n// Load creates a TomlTree from a string.\nfunc Load(content string) (tree *TomlTree, err error) {\n\treturn LoadReader(strings.NewReader(content))\n}\n\n// LoadFile creates a TomlTree from a file.\nfunc LoadFile(path string) (tree *TomlTree, err error) {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer file.Close()\n\treturn LoadReader(file)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/tomltree_create.go",
    "content": "package toml\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// supported values:\n// string, bool, int64, uint64, float64, time.Time, int, int8, int16, int32, uint, uint8, uint16, uint32, float32\n\nvar kindToTypeMapping = map[reflect.Kind]reflect.Type{\n\treflect.Bool:    reflect.TypeOf(true),\n\treflect.String:  reflect.TypeOf(\"\"),\n\treflect.Float32: reflect.TypeOf(float64(1)),\n\treflect.Float64: reflect.TypeOf(float64(1)),\n\treflect.Int:     reflect.TypeOf(int64(1)),\n\treflect.Int8:    reflect.TypeOf(int64(1)),\n\treflect.Int16:   reflect.TypeOf(int64(1)),\n\treflect.Int32:   reflect.TypeOf(int64(1)),\n\treflect.Int64:   reflect.TypeOf(int64(1)),\n\treflect.Uint:    reflect.TypeOf(uint64(1)),\n\treflect.Uint8:   reflect.TypeOf(uint64(1)),\n\treflect.Uint16:  reflect.TypeOf(uint64(1)),\n\treflect.Uint32:  reflect.TypeOf(uint64(1)),\n\treflect.Uint64:  reflect.TypeOf(uint64(1)),\n}\n\nfunc simpleValueCoercion(object interface{}) (interface{}, error) {\n\tswitch original := object.(type) {\n\tcase string, bool, int64, uint64, float64, time.Time:\n\t\treturn original, nil\n\tcase int:\n\t\treturn int64(original), nil\n\tcase int8:\n\t\treturn int64(original), nil\n\tcase int16:\n\t\treturn int64(original), nil\n\tcase int32:\n\t\treturn int64(original), nil\n\tcase uint:\n\t\treturn uint64(original), nil\n\tcase uint8:\n\t\treturn uint64(original), nil\n\tcase uint16:\n\t\treturn uint64(original), nil\n\tcase uint32:\n\t\treturn uint64(original), nil\n\tcase float32:\n\t\treturn float64(original), nil\n\tcase fmt.Stringer:\n\t\treturn original.String(), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"cannot convert type %T to TomlTree\", object)\n\t}\n}\n\nfunc sliceToTree(object interface{}) (interface{}, error) {\n\t// arrays are a bit tricky, since they can represent either a\n\t// collection of simple values, which is represented by one\n\t// *tomlValue, or an array of tables, which is represented by an\n\t// array of *TomlTree.\n\n\t// holding the assumption that this function is called from toTree only when value.Kind() is Array or Slice\n\tvalue := reflect.ValueOf(object)\n\tinsideType := value.Type().Elem()\n\tlength := value.Len()\n\tif length > 0 {\n\t\tinsideType = reflect.ValueOf(value.Index(0).Interface()).Type()\n\t}\n\tif insideType.Kind() == reflect.Map {\n\t\t// this is considered as an array of tables\n\t\ttablesArray := make([]*TomlTree, 0, length)\n\t\tfor i := 0; i < length; i++ {\n\t\t\ttable := value.Index(i)\n\t\t\ttree, err := toTree(table.Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttablesArray = append(tablesArray, tree.(*TomlTree))\n\t\t}\n\t\treturn tablesArray, nil\n\t}\n\n\tsliceType := kindToTypeMapping[insideType.Kind()]\n\tif sliceType == nil {\n\t\tsliceType = insideType\n\t}\n\n\tarrayValue := reflect.MakeSlice(reflect.SliceOf(sliceType), 0, length)\n\n\tfor i := 0; i < length; i++ {\n\t\tval := value.Index(i).Interface()\n\t\tsimpleValue, err := simpleValueCoercion(val)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tarrayValue = reflect.Append(arrayValue, reflect.ValueOf(simpleValue))\n\t}\n\treturn &tomlValue{arrayValue.Interface(), Position{}}, nil\n}\n\nfunc toTree(object interface{}) (interface{}, error) {\n\tvalue := reflect.ValueOf(object)\n\n\tif value.Kind() == reflect.Map {\n\t\tvalues := map[string]interface{}{}\n\t\tkeys := value.MapKeys()\n\t\tfor _, key := range keys {\n\t\t\tif key.Kind() != reflect.String {\n\t\t\t\tif _, ok := key.Interface().(string); !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"map key needs to be a string, not %T (%v)\", key.Interface(), key.Kind())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tv := value.MapIndex(key)\n\t\t\tnewValue, err := toTree(v.Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tvalues[key.String()] = newValue\n\t\t}\n\t\treturn &TomlTree{values, Position{}}, nil\n\t}\n\n\tif value.Kind() == reflect.Array || value.Kind() == reflect.Slice {\n\t\treturn sliceToTree(object)\n\t}\n\n\tsimpleValue, err := simpleValueCoercion(object)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &tomlValue{simpleValue, Position{}}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pelletier/go-toml/tomltree_write.go",
    "content": "package toml\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"reflect\"\n)\n\n// encodes a string to a TOML-compliant string value\nfunc encodeTomlString(value string) string {\n\tresult := \"\"\n\tfor _, rr := range value {\n\t\tswitch rr {\n\t\tcase '\\b':\n\t\t\tresult += \"\\\\b\"\n\t\tcase '\\t':\n\t\t\tresult += \"\\\\t\"\n\t\tcase '\\n':\n\t\t\tresult += \"\\\\n\"\n\t\tcase '\\f':\n\t\t\tresult += \"\\\\f\"\n\t\tcase '\\r':\n\t\t\tresult += \"\\\\r\"\n\t\tcase '\"':\n\t\t\tresult += \"\\\\\\\"\"\n\t\tcase '\\\\':\n\t\t\tresult += \"\\\\\\\\\"\n\t\tdefault:\n\t\t\tintRr := uint16(rr)\n\t\t\tif intRr < 0x001F {\n\t\t\t\tresult += fmt.Sprintf(\"\\\\u%0.4X\", intRr)\n\t\t\t} else {\n\t\t\t\tresult += string(rr)\n\t\t\t}\n\t\t}\n\t}\n\treturn result\n}\n\nfunc tomlValueStringRepresentation(v interface{}) (string, error) {\n\tswitch value := v.(type) {\n\tcase uint64:\n\t\treturn strconv.FormatUint(value, 10), nil\n\tcase int64:\n\t\treturn strconv.FormatInt(value, 10), nil\n\tcase float64:\n\t\treturn strconv.FormatFloat(value, 'f', -1, 32), nil\n\tcase string:\n\t\treturn \"\\\"\" + encodeTomlString(value) + \"\\\"\", nil\n\tcase []byte:\n\t\tb, _ := v.([]byte)\n\t\treturn tomlValueStringRepresentation(string(b))\n\tcase bool:\n\t\tif value {\n\t\t\treturn \"true\", nil\n\t\t}\n\t\treturn \"false\", nil\n\tcase time.Time:\n\t\treturn value.Format(time.RFC3339), nil\n\tcase nil:\n\t\treturn \"\", nil\n\t}\n\n\trv := reflect.ValueOf(v)\n\n\tif rv.Kind() == reflect.Slice {\n\t\tvalues := []string{}\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\titem := rv.Index(i).Interface()\n\t\t\titemRepr, err := tomlValueStringRepresentation(item)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tvalues = append(values, itemRepr)\n\t\t}\n\t\treturn \"[\" + strings.Join(values, \",\") + \"]\", nil\n\t}\n\treturn \"\", fmt.Errorf(\"unsupported value type %T: %v\", v, v)\n}\n\nfunc (t *TomlTree) writeTo(w io.Writer, indent, keyspace string, bytesCount int64) (int64, error) {\n\tsimpleValuesKeys := make([]string, 0)\n\tcomplexValuesKeys := make([]string, 0)\n\n\tfor k := range t.values {\n\t\tv := t.values[k]\n\t\tswitch v.(type) {\n\t\tcase *TomlTree, []*TomlTree:\n\t\t\tcomplexValuesKeys = append(complexValuesKeys, k)\n\t\tdefault:\n\t\t\tsimpleValuesKeys = append(simpleValuesKeys, k)\n\t\t}\n\t}\n\n\tsort.Strings(simpleValuesKeys)\n\tsort.Strings(complexValuesKeys)\n\n\tfor _, k := range simpleValuesKeys {\n\t\tv, ok := t.values[k].(*tomlValue)\n\t\tif !ok {\n\t\t\treturn bytesCount, fmt.Errorf(\"invalid value type at %s: %T\", k, t.values[k])\n\t\t}\n\n\t\trepr, err := tomlValueStringRepresentation(v.value)\n\t\tif err != nil {\n\t\t\treturn bytesCount, err\n\t\t}\n\n\t\tkvRepr := fmt.Sprintf(\"%s%s = %s\\n\", indent, k, repr)\n\t\twrittenBytesCount, err := w.Write([]byte(kvRepr))\n\t\tbytesCount += int64(writtenBytesCount)\n\t\tif err != nil {\n\t\t\treturn bytesCount, err\n\t\t}\n\t}\n\n\tfor _, k := range complexValuesKeys {\n\t\tv := t.values[k]\n\n\t\tcombinedKey := k\n\t\tif keyspace != \"\" {\n\t\t\tcombinedKey = keyspace + \".\" + combinedKey\n\t\t}\n\n\t\tswitch node := v.(type) {\n\t\t// node has to be of those two types given how keys are sorted above\n\t\tcase *TomlTree:\n\t\t\ttableName := fmt.Sprintf(\"\\n%s[%s]\\n\", indent, combinedKey)\n\t\t\twrittenBytesCount, err := w.Write([]byte(tableName))\n\t\t\tbytesCount += int64(writtenBytesCount)\n\t\t\tif err != nil {\n\t\t\t\treturn bytesCount, err\n\t\t\t}\n\t\t\tbytesCount, err = node.writeTo(w, indent+\"  \", combinedKey, bytesCount)\n\t\t\tif err != nil {\n\t\t\t\treturn bytesCount, err\n\t\t\t}\n\t\tcase []*TomlTree:\n\t\t\tfor _, subTree := range node {\n\t\t\t\tif len(subTree.values) > 0 {\n\t\t\t\t\ttableArrayName := fmt.Sprintf(\"\\n%s[[%s]]\\n\", indent, combinedKey)\n\t\t\t\t\twrittenBytesCount, err := w.Write([]byte(tableArrayName))\n\t\t\t\t\tbytesCount += int64(writtenBytesCount)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn bytesCount, err\n\t\t\t\t\t}\n\n\t\t\t\t\tbytesCount, err = subTree.writeTo(w, indent+\"  \", combinedKey, bytesCount)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn bytesCount, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bytesCount, nil\n}\n\n// WriteTo encode the TomlTree as Toml and writes it to the writer w.\n// Returns the number of bytes written in case of success, or an error if anything happened.\nfunc (t *TomlTree) WriteTo(w io.Writer) (int64, error) {\n\treturn t.writeTo(w, \"\", \"\", 0)\n}\n\n// ToTomlString generates a human-readable representation of the current tree.\n// Output spans multiple lines, and is suitable for ingest by a TOML parser.\n// If the conversion cannot be performed, ToString returns a non-nil error.\nfunc (t *TomlTree) ToTomlString() (string, error) {\n\tvar buf bytes.Buffer\n\t_, err := t.WriteTo(&buf)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn buf.String(), nil\n}\n\n// String generates a human-readable representation of the current tree.\n// Alias of ToString. Present to implement the fmt.Stringer interface.\nfunc (t *TomlTree) String() string {\n\tresult, _ := t.ToTomlString()\n\treturn result\n}\n\n// ToMap recursively generates a representation of the tree using Go built-in structures.\n// The following types are used:\n// * uint64\n// * int64\n// * bool\n// * string\n// * time.Time\n// * map[string]interface{} (where interface{} is any of this list)\n// * []interface{} (where interface{} is any of this list)\nfunc (t *TomlTree) ToMap() map[string]interface{} {\n\tresult := map[string]interface{}{}\n\n\tfor k, v := range t.values {\n\t\tswitch node := v.(type) {\n\t\tcase []*TomlTree:\n\t\t\tvar array []interface{}\n\t\t\tfor _, item := range node {\n\t\t\t\tarray = append(array, item.ToMap())\n\t\t\t}\n\t\t\tresult[k] = array\n\t\tcase *TomlTree:\n\t\t\tresult[k] = node.ToMap()\n\t\tcase *tomlValue:\n\t\t\tresult[k] = node.value\n\t\t}\n\t}\n\treturn result\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\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\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Wrap function returns a new error that adds context to the\n// original error by recording a stack trace at the point Wrap is called,\n// and the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Wrap(err, \"read failed\")\n//     }\n//\n// If additional control is required the errors.WithStack and errors.WithMessage\n// functions destructure errors.Wrap into its component operations of annotating\n// an error with a stack trace and an a message, respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Wrap constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Wrap to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error which does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// causer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are\n// invoked. This information can be retrieved with the following interface.\n//\n//     type stackTracer interface {\n//             StackTrace() errors.StackTrace\n//     }\n//\n// Where errors.StackTrace is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if err, ok := err.(stackTracer); ok {\n//             for _, f := range err.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\", f)\n//             }\n//     }\n//\n// stackTracer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// See the documentation for Frame.Format for more details.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is call, and the format specifier.\n// If err is nil, Wrapf returns nil.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n}\n\ntype withMessage struct {\n\tcause error\n\tmsg   string\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's', 'q':\n\t\tio.WriteString(s, w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\n\tfor err != nil {\n\t\tcause, ok := err.(causer)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\terr = cause.Cause()\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// Frame represents a program counter inside a stack frame.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   path of source file relative to the compile time GOPATH\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tpc := f.pc()\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn == nil {\n\t\t\t\tio.WriteString(s, \"unknown\")\n\t\t\t} else {\n\t\t\t\tfile, _ := fn.FileLine(pc)\n\t\t\t\tfmt.Fprintf(s, \"%s\\n\\t%s\", fn.Name(), file)\n\t\t\t}\n\t\tdefault:\n\t\t\tio.WriteString(s, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tfmt.Fprintf(s, \"%d\", f.line())\n\tcase 'n':\n\t\tname := runtime.FuncForPC(f.pc()).Name()\n\t\tio.WriteString(s, funcname(name))\n\tcase 'v':\n\t\tf.Format(s, 's')\n\t\tio.WriteString(s, \":\")\n\t\tf.Format(s, 'd')\n\t}\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tfor _, f := range st {\n\t\t\t\tfmt.Fprintf(s, \"\\n%+v\", f)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(s, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tfmt.Fprintf(s, \"%v\", []Frame(st))\n\t\t}\n\tcase 's':\n\t\tfmt.Fprintf(s, \"%s\", []Frame(st))\n\t}\n}\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tfmt.Fprintf(st, \"\\n%+v\", f)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(3, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n\nfunc trimGOPATH(name, file string) string {\n\t// Here we want to get the source file path relative to the compile time\n\t// GOPATH. As of Go 1.6.x there is no direct way to know the compiled\n\t// GOPATH at runtime, but we can infer the number of path segments in the\n\t// GOPATH. We note that fn.Name() returns the function name qualified by\n\t// the import path, which does not include the GOPATH. Thus we can trim\n\t// segments from the beginning of the file path until the number of path\n\t// separators remaining is one more than the number of path separators in\n\t// the function name. For example, given:\n\t//\n\t//    GOPATH     /home/user\n\t//    file       /home/user/src/pkg/sub/file.go\n\t//    fn.Name()  pkg/sub.Type.Method\n\t//\n\t// We want to produce:\n\t//\n\t//    pkg/sub/file.go\n\t//\n\t// From this we can easily see that fn.Name() has one less path separator\n\t// than our desired output. We count separators from the end of the file\n\t// path until it finds two more than in the function name and then move\n\t// one character forward to preserve the initial path segment without a\n\t// leading separator.\n\tconst sep = \"/\"\n\tgoal := strings.Count(name, sep) + 2\n\ti := len(file)\n\tfor n := 0; n < goal; n++ {\n\t\ti = strings.LastIndex(file[:i], sep)\n\t\tif i == -1 {\n\t\t\t// not enough separators found, set i so that the slice expression\n\t\t\t// below leaves file unmodified\n\t\t\ti = -len(sep)\n\t\t\tbreak\n\t\t}\n\t}\n\t// get back to 0 or trim the leading separator\n\tfile = file[i+len(sep):]\n\treturn file\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/LICENSE",
    "content": "Copyright (c) 2013, Dave Cheney\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/attrs.go",
    "content": "package sftp\n\n// ssh_FXP_ATTRS support\n// see http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-5\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\n\nconst (\n\tssh_FILEXFER_ATTR_SIZE        = 0x00000001\n\tssh_FILEXFER_ATTR_UIDGID      = 0x00000002\n\tssh_FILEXFER_ATTR_PERMISSIONS = 0x00000004\n\tssh_FILEXFER_ATTR_ACMODTIME   = 0x00000008\n\tssh_FILEXFER_ATTR_EXTENDED    = 0x80000000\n)\n\n// fileInfo is an artificial type designed to satisfy os.FileInfo.\ntype fileInfo struct {\n\tname  string\n\tsize  int64\n\tmode  os.FileMode\n\tmtime time.Time\n\tsys   interface{}\n}\n\n// Name returns the base name of the file.\nfunc (fi *fileInfo) Name() string { return fi.name }\n\n// Size returns the length in bytes for regular files; system-dependent for others.\nfunc (fi *fileInfo) Size() int64 { return fi.size }\n\n// Mode returns file mode bits.\nfunc (fi *fileInfo) Mode() os.FileMode { return fi.mode }\n\n// ModTime returns the last modification time of the file.\nfunc (fi *fileInfo) ModTime() time.Time { return fi.mtime }\n\n// IsDir returns true if the file is a directory.\nfunc (fi *fileInfo) IsDir() bool { return fi.Mode().IsDir() }\n\nfunc (fi *fileInfo) Sys() interface{} { return fi.sys }\n\n// FileStat holds the original unmarshalled values from a call to READDIR or *STAT.\n// It is exported for the purposes of accessing the raw values via os.FileInfo.Sys()\ntype FileStat struct {\n\tSize     uint64\n\tMode     uint32\n\tMtime    uint32\n\tAtime    uint32\n\tUID      uint32\n\tGID      uint32\n\tExtended []StatExtended\n}\n\n// StatExtended contains additional, extended information for a FileStat.\ntype StatExtended struct {\n\tExtType string\n\tExtData string\n}\n\nfunc fileInfoFromStat(st *FileStat, name string) os.FileInfo {\n\tfs := &fileInfo{\n\t\tname:  name,\n\t\tsize:  int64(st.Size),\n\t\tmode:  toFileMode(st.Mode),\n\t\tmtime: time.Unix(int64(st.Mtime), 0),\n\t\tsys:   st,\n\t}\n\treturn fs\n}\n\nfunc fileStatFromInfo(fi os.FileInfo) (uint32, FileStat) {\n\tmtime := fi.ModTime().Unix()\n\tatime := mtime\n\tvar flags uint32 = ssh_FILEXFER_ATTR_SIZE |\n\t\tssh_FILEXFER_ATTR_PERMISSIONS |\n\t\tssh_FILEXFER_ATTR_ACMODTIME\n\n\tfileStat := FileStat{\n\t\tSize:  uint64(fi.Size()),\n\t\tMode:  fromFileMode(fi.Mode()),\n\t\tMtime: uint32(mtime),\n\t\tAtime: uint32(atime),\n\t}\n\n\t// os specific file stat decoding\n\tfileStatFromInfoOs(fi, &flags, &fileStat)\n\n\treturn flags, fileStat\n}\n\nfunc unmarshalAttrs(b []byte) (*FileStat, []byte) {\n\tflags, b := unmarshalUint32(b)\n\tvar fs FileStat\n\tif flags&ssh_FILEXFER_ATTR_SIZE == ssh_FILEXFER_ATTR_SIZE {\n\t\tfs.Size, b = unmarshalUint64(b)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_UIDGID == ssh_FILEXFER_ATTR_UIDGID {\n\t\tfs.UID, b = unmarshalUint32(b)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_UIDGID == ssh_FILEXFER_ATTR_UIDGID {\n\t\tfs.GID, b = unmarshalUint32(b)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_PERMISSIONS == ssh_FILEXFER_ATTR_PERMISSIONS {\n\t\tfs.Mode, b = unmarshalUint32(b)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_ACMODTIME == ssh_FILEXFER_ATTR_ACMODTIME {\n\t\tfs.Atime, b = unmarshalUint32(b)\n\t\tfs.Mtime, b = unmarshalUint32(b)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_EXTENDED == ssh_FILEXFER_ATTR_EXTENDED {\n\t\tvar count uint32\n\t\tcount, b = unmarshalUint32(b)\n\t\text := make([]StatExtended, count, count)\n\t\tfor i := uint32(0); i < count; i++ {\n\t\t\tvar typ string\n\t\t\tvar data string\n\t\t\ttyp, b = unmarshalString(b)\n\t\t\tdata, b = unmarshalString(b)\n\t\t\text[i] = StatExtended{typ, data}\n\t\t}\n\t\tfs.Extended = ext\n\t}\n\treturn &fs, b\n}\n\nfunc marshalFileInfo(b []byte, fi os.FileInfo) []byte {\n\t// attributes variable struct, and also variable per protocol version\n\t// spec version 3 attributes:\n\t// uint32   flags\n\t// uint64   size           present only if flag SSH_FILEXFER_ATTR_SIZE\n\t// uint32   uid            present only if flag SSH_FILEXFER_ATTR_UIDGID\n\t// uint32   gid            present only if flag SSH_FILEXFER_ATTR_UIDGID\n\t// uint32   permissions    present only if flag SSH_FILEXFER_ATTR_PERMISSIONS\n\t// uint32   atime          present only if flag SSH_FILEXFER_ACMODTIME\n\t// uint32   mtime          present only if flag SSH_FILEXFER_ACMODTIME\n\t// uint32   extended_count present only if flag SSH_FILEXFER_ATTR_EXTENDED\n\t// string   extended_type\n\t// string   extended_data\n\t// ...      more extended data (extended_type - extended_data pairs),\n\t// \t   so that number of pairs equals extended_count\n\n\tflags, fileStat := fileStatFromInfo(fi)\n\n\tb = marshalUint32(b, flags)\n\tif flags&ssh_FILEXFER_ATTR_SIZE != 0 {\n\t\tb = marshalUint64(b, fileStat.Size)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_UIDGID != 0 {\n\t\tb = marshalUint32(b, fileStat.UID)\n\t\tb = marshalUint32(b, fileStat.GID)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_PERMISSIONS != 0 {\n\t\tb = marshalUint32(b, fileStat.Mode)\n\t}\n\tif flags&ssh_FILEXFER_ATTR_ACMODTIME != 0 {\n\t\tb = marshalUint32(b, fileStat.Atime)\n\t\tb = marshalUint32(b, fileStat.Mtime)\n\t}\n\n\treturn b\n}\n\n// toFileMode converts sftp filemode bits to the os.FileMode specification\nfunc toFileMode(mode uint32) os.FileMode {\n\tvar fm = os.FileMode(mode & 0777)\n\tswitch mode & syscall.S_IFMT {\n\tcase syscall.S_IFBLK:\n\t\tfm |= os.ModeDevice\n\tcase syscall.S_IFCHR:\n\t\tfm |= os.ModeDevice | os.ModeCharDevice\n\tcase syscall.S_IFDIR:\n\t\tfm |= os.ModeDir\n\tcase syscall.S_IFIFO:\n\t\tfm |= os.ModeNamedPipe\n\tcase syscall.S_IFLNK:\n\t\tfm |= os.ModeSymlink\n\tcase syscall.S_IFREG:\n\t\t// nothing to do\n\tcase syscall.S_IFSOCK:\n\t\tfm |= os.ModeSocket\n\t}\n\tif mode&syscall.S_ISGID != 0 {\n\t\tfm |= os.ModeSetgid\n\t}\n\tif mode&syscall.S_ISUID != 0 {\n\t\tfm |= os.ModeSetuid\n\t}\n\tif mode&syscall.S_ISVTX != 0 {\n\t\tfm |= os.ModeSticky\n\t}\n\treturn fm\n}\n\n// fromFileMode converts from the os.FileMode specification to sftp filemode bits\nfunc fromFileMode(mode os.FileMode) uint32 {\n\tret := uint32(0)\n\n\tif mode&os.ModeDevice != 0 {\n\t\tif mode&os.ModeCharDevice != 0 {\n\t\t\tret |= syscall.S_IFCHR\n\t\t} else {\n\t\t\tret |= syscall.S_IFBLK\n\t\t}\n\t}\n\tif mode&os.ModeDir != 0 {\n\t\tret |= syscall.S_IFDIR\n\t}\n\tif mode&os.ModeSymlink != 0 {\n\t\tret |= syscall.S_IFLNK\n\t}\n\tif mode&os.ModeNamedPipe != 0 {\n\t\tret |= syscall.S_IFIFO\n\t}\n\tif mode&os.ModeSetgid != 0 {\n\t\tret |= syscall.S_ISGID\n\t}\n\tif mode&os.ModeSetuid != 0 {\n\t\tret |= syscall.S_ISUID\n\t}\n\tif mode&os.ModeSticky != 0 {\n\t\tret |= syscall.S_ISVTX\n\t}\n\tif mode&os.ModeSocket != 0 {\n\t\tret |= syscall.S_IFSOCK\n\t}\n\n\tif mode&os.ModeType == 0 {\n\t\tret |= syscall.S_IFREG\n\t}\n\tret |= uint32(mode & os.ModePerm)\n\n\treturn ret\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/attrs_stubs.go",
    "content": "// +build !cgo,!plan9 windows android\n\npackage sftp\n\nimport (\n\t\"os\"\n)\n\nfunc fileStatFromInfoOs(fi os.FileInfo, flags *uint32, fileStat *FileStat) {\n\t// todo\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/attrs_unix.go",
    "content": "// +build darwin dragonfly freebsd !android,linux netbsd openbsd solaris\n// +build cgo\n\npackage sftp\n\nimport (\n\t\"os\"\n\t\"syscall\"\n)\n\nfunc fileStatFromInfoOs(fi os.FileInfo, flags *uint32, fileStat *FileStat) {\n\tif statt, ok := fi.Sys().(*syscall.Stat_t); ok {\n\t\t*flags |= ssh_FILEXFER_ATTR_UIDGID\n\t\tfileStat.UID = statt.Uid\n\t\tfileStat.GID = statt.Gid\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/client.go",
    "content": "package sftp\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"io\"\n\t\"os\"\n\t\"path\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/kr/fs\"\n\t\"github.com/pkg/errors\"\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// MaxPacket sets the maximum size of the payload.\nfunc MaxPacket(size int) func(*Client) error {\n\treturn func(c *Client) error {\n\t\tif size < 1<<15 {\n\t\t\treturn errors.Errorf(\"size must be greater or equal to 32k\")\n\t\t}\n\t\tc.maxPacket = size\n\t\treturn nil\n\t}\n}\n\n// NewClient creates a new SFTP client on conn, using zero or more option\n// functions.\nfunc NewClient(conn *ssh.Client, opts ...func(*Client) error) (*Client, error) {\n\ts, err := conn.NewSession()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := s.RequestSubsystem(\"sftp\"); err != nil {\n\t\treturn nil, err\n\t}\n\tpw, err := s.StdinPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpr, err := s.StdoutPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewClientPipe(pr, pw, opts...)\n}\n\n// NewClientPipe creates a new SFTP client given a Reader and a WriteCloser.\n// This can be used for connecting to an SFTP server over TCP/TLS or by using\n// the system's ssh client program (e.g. via exec.Command).\nfunc NewClientPipe(rd io.Reader, wr io.WriteCloser, opts ...func(*Client) error) (*Client, error) {\n\tsftp := &Client{\n\t\tclientConn: clientConn{\n\t\t\tconn: conn{\n\t\t\t\tReader:      rd,\n\t\t\t\tWriteCloser: wr,\n\t\t\t},\n\t\t\tinflight: make(map[uint32]chan<- result),\n\t\t},\n\t\tmaxPacket: 1 << 15,\n\t}\n\tif err := sftp.applyOptions(opts...); err != nil {\n\t\twr.Close()\n\t\treturn nil, err\n\t}\n\tif err := sftp.sendInit(); err != nil {\n\t\twr.Close()\n\t\treturn nil, err\n\t}\n\tif err := sftp.recvVersion(); err != nil {\n\t\twr.Close()\n\t\treturn nil, err\n\t}\n\tsftp.clientConn.wg.Add(1)\n\tgo sftp.loop()\n\treturn sftp, nil\n}\n\n// Client represents an SFTP session on a *ssh.ClientConn SSH connection.\n// Multiple Clients can be active on a single SSH connection, and a Client\n// may be called concurrently from multiple Goroutines.\n//\n// Client implements the github.com/kr/fs.FileSystem interface.\ntype Client struct {\n\tclientConn\n\n\tmaxPacket int // max packet size read or written.\n\tnextid    uint32\n}\n\n// Create creates the named file mode 0666 (before umask), truncating it if\n// it already exists. If successful, methods on the returned File can be\n// used for I/O; the associated file descriptor has mode O_RDWR.\nfunc (c *Client) Create(path string) (*File, error) {\n\treturn c.open(path, flags(os.O_RDWR|os.O_CREATE|os.O_TRUNC))\n}\n\nconst sftpProtocolVersion = 3 // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02\n\nfunc (c *Client) sendInit() error {\n\treturn c.clientConn.conn.sendPacket(sshFxInitPacket{\n\t\tVersion: sftpProtocolVersion, // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02\n\t})\n}\n\n// returns the next value of c.nextid\nfunc (c *Client) nextID() uint32 {\n\treturn atomic.AddUint32(&c.nextid, 1)\n}\n\nfunc (c *Client) recvVersion() error {\n\ttyp, data, err := c.recvPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif typ != ssh_FXP_VERSION {\n\t\treturn &unexpectedPacketErr{ssh_FXP_VERSION, typ}\n\t}\n\n\tversion, _ := unmarshalUint32(data)\n\tif version != sftpProtocolVersion {\n\t\treturn &unexpectedVersionErr{sftpProtocolVersion, version}\n\t}\n\n\treturn nil\n}\n\n// Walk returns a new Walker rooted at root.\nfunc (c *Client) Walk(root string) *fs.Walker {\n\treturn fs.WalkFS(root, c)\n}\n\n// ReadDir reads the directory named by dirname and returns a list of\n// directory entries.\nfunc (c *Client) ReadDir(p string) ([]os.FileInfo, error) {\n\thandle, err := c.opendir(p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer c.close(handle) // this has to defer earlier than the lock below\n\tvar attrs []os.FileInfo\n\tvar done = false\n\tfor !done {\n\t\tid := c.nextID()\n\t\ttyp, data, err1 := c.sendPacket(sshFxpReaddirPacket{\n\t\t\tID:     id,\n\t\t\tHandle: handle,\n\t\t})\n\t\tif err1 != nil {\n\t\t\terr = err1\n\t\t\tdone = true\n\t\t\tbreak\n\t\t}\n\t\tswitch typ {\n\t\tcase ssh_FXP_NAME:\n\t\t\tsid, data := unmarshalUint32(data)\n\t\t\tif sid != id {\n\t\t\t\treturn nil, &unexpectedIDErr{id, sid}\n\t\t\t}\n\t\t\tcount, data := unmarshalUint32(data)\n\t\t\tfor i := uint32(0); i < count; i++ {\n\t\t\t\tvar filename string\n\t\t\t\tfilename, data = unmarshalString(data)\n\t\t\t\t_, data = unmarshalString(data) // discard longname\n\t\t\t\tvar attr *FileStat\n\t\t\t\tattr, data = unmarshalAttrs(data)\n\t\t\t\tif filename == \".\" || filename == \"..\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tattrs = append(attrs, fileInfoFromStat(attr, path.Base(filename)))\n\t\t\t}\n\t\tcase ssh_FXP_STATUS:\n\t\t\t// TODO(dfc) scope warning!\n\t\t\terr = normaliseError(unmarshalStatus(id, data))\n\t\t\tdone = true\n\t\tdefault:\n\t\t\treturn nil, unimplementedPacketErr(typ)\n\t\t}\n\t}\n\tif err == io.EOF {\n\t\terr = nil\n\t}\n\treturn attrs, err\n}\n\nfunc (c *Client) opendir(path string) (string, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpOpendirPacket{\n\t\tID:   id,\n\t\tPath: path,\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_HANDLE:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn \"\", &unexpectedIDErr{id, sid}\n\t\t}\n\t\thandle, _ := unmarshalString(data)\n\t\treturn handle, nil\n\tcase ssh_FXP_STATUS:\n\t\treturn \"\", normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn \"\", unimplementedPacketErr(typ)\n\t}\n}\n\n// Stat returns a FileInfo structure describing the file specified by path 'p'.\n// If 'p' is a symbolic link, the returned FileInfo structure describes the referent file.\nfunc (c *Client) Stat(p string) (os.FileInfo, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpStatPacket{\n\t\tID:   id,\n\t\tPath: p,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_ATTRS:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn nil, &unexpectedIDErr{id, sid}\n\t\t}\n\t\tattr, _ := unmarshalAttrs(data)\n\t\treturn fileInfoFromStat(attr, path.Base(p)), nil\n\tcase ssh_FXP_STATUS:\n\t\treturn nil, normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn nil, unimplementedPacketErr(typ)\n\t}\n}\n\n// Lstat returns a FileInfo structure describing the file specified by path 'p'.\n// If 'p' is a symbolic link, the returned FileInfo structure describes the symbolic link.\nfunc (c *Client) Lstat(p string) (os.FileInfo, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpLstatPacket{\n\t\tID:   id,\n\t\tPath: p,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_ATTRS:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn nil, &unexpectedIDErr{id, sid}\n\t\t}\n\t\tattr, _ := unmarshalAttrs(data)\n\t\treturn fileInfoFromStat(attr, path.Base(p)), nil\n\tcase ssh_FXP_STATUS:\n\t\treturn nil, normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn nil, unimplementedPacketErr(typ)\n\t}\n}\n\n// ReadLink reads the target of a symbolic link.\nfunc (c *Client) ReadLink(p string) (string, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpReadlinkPacket{\n\t\tID:   id,\n\t\tPath: p,\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_NAME:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn \"\", &unexpectedIDErr{id, sid}\n\t\t}\n\t\tcount, data := unmarshalUint32(data)\n\t\tif count != 1 {\n\t\t\treturn \"\", unexpectedCount(1, count)\n\t\t}\n\t\tfilename, _ := unmarshalString(data) // ignore dummy attributes\n\t\treturn filename, nil\n\tcase ssh_FXP_STATUS:\n\t\treturn \"\", normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn \"\", unimplementedPacketErr(typ)\n\t}\n}\n\n// Symlink creates a symbolic link at 'newname', pointing at target 'oldname'\nfunc (c *Client) Symlink(oldname, newname string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpSymlinkPacket{\n\t\tID:         id,\n\t\tLinkpath:   newname,\n\t\tTargetpath: oldname,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\n// setstat is a convience wrapper to allow for changing of various parts of the file descriptor.\nfunc (c *Client) setstat(path string, flags uint32, attrs interface{}) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpSetstatPacket{\n\t\tID:    id,\n\t\tPath:  path,\n\t\tFlags: flags,\n\t\tAttrs: attrs,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\n// Chtimes changes the access and modification times of the named file.\nfunc (c *Client) Chtimes(path string, atime time.Time, mtime time.Time) error {\n\ttype times struct {\n\t\tAtime uint32\n\t\tMtime uint32\n\t}\n\tattrs := times{uint32(atime.Unix()), uint32(mtime.Unix())}\n\treturn c.setstat(path, ssh_FILEXFER_ATTR_ACMODTIME, attrs)\n}\n\n// Chown changes the user and group owners of the named file.\nfunc (c *Client) Chown(path string, uid, gid int) error {\n\ttype owner struct {\n\t\tUID uint32\n\t\tGID uint32\n\t}\n\tattrs := owner{uint32(uid), uint32(gid)}\n\treturn c.setstat(path, ssh_FILEXFER_ATTR_UIDGID, attrs)\n}\n\n// Chmod changes the permissions of the named file.\nfunc (c *Client) Chmod(path string, mode os.FileMode) error {\n\treturn c.setstat(path, ssh_FILEXFER_ATTR_PERMISSIONS, uint32(mode))\n}\n\n// Truncate sets the size of the named file. Although it may be safely assumed\n// that if the size is less than its current size it will be truncated to fit,\n// the SFTP protocol does not specify what behavior the server should do when setting\n// size greater than the current size.\nfunc (c *Client) Truncate(path string, size int64) error {\n\treturn c.setstat(path, ssh_FILEXFER_ATTR_SIZE, uint64(size))\n}\n\n// Open opens the named file for reading. If successful, methods on the\n// returned file can be used for reading; the associated file descriptor\n// has mode O_RDONLY.\nfunc (c *Client) Open(path string) (*File, error) {\n\treturn c.open(path, flags(os.O_RDONLY))\n}\n\n// OpenFile is the generalized open call; most users will use Open or\n// Create instead. It opens the named file with specified flag (O_RDONLY\n// etc.). If successful, methods on the returned File can be used for I/O.\nfunc (c *Client) OpenFile(path string, f int) (*File, error) {\n\treturn c.open(path, flags(f))\n}\n\nfunc (c *Client) open(path string, pflags uint32) (*File, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpOpenPacket{\n\t\tID:     id,\n\t\tPath:   path,\n\t\tPflags: pflags,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_HANDLE:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn nil, &unexpectedIDErr{id, sid}\n\t\t}\n\t\thandle, _ := unmarshalString(data)\n\t\treturn &File{c: c, path: path, handle: handle}, nil\n\tcase ssh_FXP_STATUS:\n\t\treturn nil, normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn nil, unimplementedPacketErr(typ)\n\t}\n}\n\n// close closes a handle handle previously returned in the response\n// to SSH_FXP_OPEN or SSH_FXP_OPENDIR. The handle becomes invalid\n// immediately after this request has been sent.\nfunc (c *Client) close(handle string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpClosePacket{\n\t\tID:     id,\n\t\tHandle: handle,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\nfunc (c *Client) fstat(handle string) (*FileStat, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpFstatPacket{\n\t\tID:     id,\n\t\tHandle: handle,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_ATTRS:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn nil, &unexpectedIDErr{id, sid}\n\t\t}\n\t\tattr, _ := unmarshalAttrs(data)\n\t\treturn attr, nil\n\tcase ssh_FXP_STATUS:\n\t\treturn nil, normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn nil, unimplementedPacketErr(typ)\n\t}\n}\n\n// StatVFS retrieves VFS statistics from a remote host.\n//\n// It implements the statvfs@openssh.com SSH_FXP_EXTENDED feature\n// from http://www.opensource.apple.com/source/OpenSSH/OpenSSH-175/openssh/PROTOCOL?txt.\nfunc (c *Client) StatVFS(path string) (*StatVFS, error) {\n\t// send the StatVFS packet to the server\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpStatvfsPacket{\n\t\tID:   id,\n\t\tPath: path,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch typ {\n\t// server responded with valid data\n\tcase ssh_FXP_EXTENDED_REPLY:\n\t\tvar response StatVFS\n\t\terr = binary.Read(bytes.NewReader(data), binary.BigEndian, &response)\n\t\tif err != nil {\n\t\t\treturn nil, errors.New(\"can not parse reply\")\n\t\t}\n\n\t\treturn &response, nil\n\n\t// the resquest failed\n\tcase ssh_FXP_STATUS:\n\t\treturn nil, errors.New(fxp(ssh_FXP_STATUS).String())\n\n\tdefault:\n\t\treturn nil, unimplementedPacketErr(typ)\n\t}\n}\n\n// Join joins any number of path elements into a single path, adding a\n// separating slash if necessary. The result is Cleaned; in particular, all\n// empty strings are ignored.\nfunc (c *Client) Join(elem ...string) string { return path.Join(elem...) }\n\n// Remove removes the specified file or directory. An error will be returned if no\n// file or directory with the specified path exists, or if the specified directory\n// is not empty.\nfunc (c *Client) Remove(path string) error {\n\terr := c.removeFile(path)\n\tif err, ok := err.(*StatusError); ok {\n\t\tswitch err.Code {\n\t\t// some servers, *cough* osx *cough*, return EPERM, not ENODIR.\n\t\t// serv-u returns ssh_FX_FILE_IS_A_DIRECTORY\n\t\tcase ssh_FX_PERMISSION_DENIED, ssh_FX_FAILURE, ssh_FX_FILE_IS_A_DIRECTORY:\n\t\t\treturn c.RemoveDirectory(path)\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (c *Client) removeFile(path string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpRemovePacket{\n\t\tID:       id,\n\t\tFilename: path,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\n// RemoveDirectory removes a directory path.\nfunc (c *Client) RemoveDirectory(path string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpRmdirPacket{\n\t\tID:   id,\n\t\tPath: path,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\n// Rename renames a file.\nfunc (c *Client) Rename(oldname, newname string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpRenamePacket{\n\t\tID:      id,\n\t\tOldpath: oldname,\n\t\tNewpath: newname,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\nfunc (c *Client) realpath(path string) (string, error) {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpRealpathPacket{\n\t\tID:   id,\n\t\tPath: path,\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_NAME:\n\t\tsid, data := unmarshalUint32(data)\n\t\tif sid != id {\n\t\t\treturn \"\", &unexpectedIDErr{id, sid}\n\t\t}\n\t\tcount, data := unmarshalUint32(data)\n\t\tif count != 1 {\n\t\t\treturn \"\", unexpectedCount(1, count)\n\t\t}\n\t\tfilename, _ := unmarshalString(data) // ignore attributes\n\t\treturn filename, nil\n\tcase ssh_FXP_STATUS:\n\t\treturn \"\", normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn \"\", unimplementedPacketErr(typ)\n\t}\n}\n\n// Getwd returns the current working directory of the server. Operations\n// involving relative paths will be based at this location.\nfunc (c *Client) Getwd() (string, error) {\n\treturn c.realpath(\".\")\n}\n\n// Mkdir creates the specified directory. An error will be returned if a file or\n// directory with the specified path already exists, or if the directory's\n// parent folder does not exist (the method cannot create complete paths).\nfunc (c *Client) Mkdir(path string) error {\n\tid := c.nextID()\n\ttyp, data, err := c.sendPacket(sshFxpMkdirPacket{\n\t\tID:   id,\n\t\tPath: path,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch typ {\n\tcase ssh_FXP_STATUS:\n\t\treturn normaliseError(unmarshalStatus(id, data))\n\tdefault:\n\t\treturn unimplementedPacketErr(typ)\n\t}\n}\n\n// applyOptions applies options functions to the Client.\n// If an error is encountered, option processing ceases.\nfunc (c *Client) applyOptions(opts ...func(*Client) error) error {\n\tfor _, f := range opts {\n\t\tif err := f(c); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// File represents a remote file.\ntype File struct {\n\tc      *Client\n\tpath   string\n\thandle string\n\toffset uint64 // current offset within remote file\n}\n\n// Close closes the File, rendering it unusable for I/O. It returns an\n// error, if any.\nfunc (f *File) Close() error {\n\treturn f.c.close(f.handle)\n}\n\n// Name returns the name of the file as presented to Open or Create.\nfunc (f *File) Name() string {\n\treturn f.path\n}\n\nconst maxConcurrentRequests = 64\n\n// Read reads up to len(b) bytes from the File. It returns the number of bytes\n// read and an error, if any. Read follows io.Reader semantics, so when Read\n// encounters an error or EOF condition after successfully reading n > 0 bytes,\n// it returns the number of bytes read.\nfunc (f *File) Read(b []byte) (int, error) {\n\t// Split the read into multiple maxPacket sized concurrent reads\n\t// bounded by maxConcurrentRequests. This allows reads with a suitably\n\t// large buffer to transfer data at a much faster rate due to\n\t// overlapping round trip times.\n\tinFlight := 0\n\tdesiredInFlight := 1\n\toffset := f.offset\n\tch := make(chan result, 2)\n\ttype inflightRead struct {\n\t\tb      []byte\n\t\toffset uint64\n\t}\n\treqs := map[uint32]inflightRead{}\n\ttype offsetErr struct {\n\t\toffset uint64\n\t\terr    error\n\t}\n\tvar firstErr offsetErr\n\n\tsendReq := func(b []byte, offset uint64) {\n\t\treqID := f.c.nextID()\n\t\tf.c.dispatchRequest(ch, sshFxpReadPacket{\n\t\t\tID:     reqID,\n\t\t\tHandle: f.handle,\n\t\t\tOffset: offset,\n\t\t\tLen:    uint32(len(b)),\n\t\t})\n\t\tinFlight++\n\t\treqs[reqID] = inflightRead{b: b, offset: offset}\n\t}\n\n\tvar read int\n\tfor len(b) > 0 || inFlight > 0 {\n\t\tfor inFlight < desiredInFlight && len(b) > 0 && firstErr.err == nil {\n\t\t\tl := min(len(b), f.c.maxPacket)\n\t\t\trb := b[:l]\n\t\t\tsendReq(rb, offset)\n\t\t\toffset += uint64(l)\n\t\t\tb = b[l:]\n\t\t}\n\n\t\tif inFlight == 0 {\n\t\t\tbreak\n\t\t}\n\t\tres := <-ch\n\t\tinFlight--\n\t\tif res.err != nil {\n\t\t\tfirstErr = offsetErr{offset: 0, err: res.err}\n\t\t\tbreak\n\t\t}\n\t\treqID, data := unmarshalUint32(res.data)\n\t\treq, ok := reqs[reqID]\n\t\tif !ok {\n\t\t\tfirstErr = offsetErr{offset: 0, err: errors.Errorf(\"sid: %v not found\", reqID)}\n\t\t\tbreak\n\t\t}\n\t\tdelete(reqs, reqID)\n\t\tswitch res.typ {\n\t\tcase ssh_FXP_STATUS:\n\t\t\tif firstErr.err == nil || req.offset < firstErr.offset {\n\t\t\t\tfirstErr = offsetErr{\n\t\t\t\t\toffset: req.offset,\n\t\t\t\t\terr:    normaliseError(unmarshalStatus(reqID, res.data)),\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\tcase ssh_FXP_DATA:\n\t\t\tl, data := unmarshalUint32(data)\n\t\t\tn := copy(req.b, data[:l])\n\t\t\tread += n\n\t\t\tif n < len(req.b) {\n\t\t\t\tsendReq(req.b[l:], req.offset+uint64(l))\n\t\t\t}\n\t\t\tif desiredInFlight < maxConcurrentRequests {\n\t\t\t\tdesiredInFlight++\n\t\t\t}\n\t\tdefault:\n\t\t\tfirstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}\n\t\t\tbreak\n\t\t}\n\t}\n\t// If the error is anything other than EOF, then there\n\t// may be gaps in the data copied to the buffer so it's\n\t// best to return 0 so the caller can't make any\n\t// incorrect assumptions about the state of the buffer.\n\tif firstErr.err != nil && firstErr.err != io.EOF {\n\t\tread = 0\n\t}\n\tf.offset += uint64(read)\n\treturn read, firstErr.err\n}\n\n// WriteTo writes the file to w. The return value is the number of bytes\n// written. Any error encountered during the write is also returned.\nfunc (f *File) WriteTo(w io.Writer) (int64, error) {\n\tfi, err := f.Stat()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tinFlight := 0\n\tdesiredInFlight := 1\n\toffset := f.offset\n\twriteOffset := offset\n\tfileSize := uint64(fi.Size())\n\tch := make(chan result, 2)\n\ttype inflightRead struct {\n\t\tb      []byte\n\t\toffset uint64\n\t}\n\treqs := map[uint32]inflightRead{}\n\tpendingWrites := map[uint64][]byte{}\n\ttype offsetErr struct {\n\t\toffset uint64\n\t\terr    error\n\t}\n\tvar firstErr offsetErr\n\n\tsendReq := func(b []byte, offset uint64) {\n\t\treqID := f.c.nextID()\n\t\tf.c.dispatchRequest(ch, sshFxpReadPacket{\n\t\t\tID:     reqID,\n\t\t\tHandle: f.handle,\n\t\t\tOffset: offset,\n\t\t\tLen:    uint32(len(b)),\n\t\t})\n\t\tinFlight++\n\t\treqs[reqID] = inflightRead{b: b, offset: offset}\n\t}\n\n\tvar copied int64\n\tfor firstErr.err == nil || inFlight > 0 {\n\t\tif firstErr.err == nil {\n\t\t\tfor inFlight+len(pendingWrites) < desiredInFlight {\n\t\t\t\tb := make([]byte, f.c.maxPacket)\n\t\t\t\tsendReq(b, offset)\n\t\t\t\toffset += uint64(f.c.maxPacket)\n\t\t\t\tif offset > fileSize {\n\t\t\t\t\tdesiredInFlight = 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif inFlight == 0 {\n\t\t\tif firstErr.err == nil && len(pendingWrites) > 0 {\n\t\t\t\treturn copied, errors.New(\"internal inconsistency\")\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tres := <-ch\n\t\tinFlight--\n\t\tif res.err != nil {\n\t\t\tfirstErr = offsetErr{offset: 0, err: res.err}\n\t\t\tbreak\n\t\t}\n\t\treqID, data := unmarshalUint32(res.data)\n\t\treq, ok := reqs[reqID]\n\t\tif !ok {\n\t\t\tfirstErr = offsetErr{offset: 0, err: errors.Errorf(\"sid: %v not found\", reqID)}\n\t\t\tbreak\n\t\t}\n\t\tdelete(reqs, reqID)\n\t\tswitch res.typ {\n\t\tcase ssh_FXP_STATUS:\n\t\t\tif firstErr.err == nil || req.offset < firstErr.offset {\n\t\t\t\tfirstErr = offsetErr{offset: req.offset, err: normaliseError(unmarshalStatus(reqID, res.data))}\n\t\t\t\tbreak\n\t\t\t}\n\t\tcase ssh_FXP_DATA:\n\t\t\tl, data := unmarshalUint32(data)\n\t\t\tif req.offset == writeOffset {\n\t\t\t\tnbytes, err := w.Write(data)\n\t\t\t\tcopied += int64(nbytes)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// We will never receive another DATA with offset==writeOffset, so\n\t\t\t\t\t// the loop will drain inFlight and then exit.\n\t\t\t\t\tfirstErr = offsetErr{offset: req.offset + uint64(nbytes), err: err}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif nbytes < int(l) {\n\t\t\t\t\tfirstErr = offsetErr{offset: req.offset + uint64(nbytes), err: io.ErrShortWrite}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tswitch {\n\t\t\t\tcase offset > fileSize:\n\t\t\t\t\tdesiredInFlight = 1\n\t\t\t\tcase desiredInFlight < maxConcurrentRequests:\n\t\t\t\t\tdesiredInFlight++\n\t\t\t\t}\n\t\t\t\twriteOffset += uint64(nbytes)\n\t\t\t\tfor {\n\t\t\t\t\tpendingData, ok := pendingWrites[writeOffset]\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// Give go a chance to free the memory.\n\t\t\t\t\tdelete(pendingWrites, writeOffset)\n\t\t\t\t\tnbytes, err := w.Write(pendingData)\n\t\t\t\t\t// Do not move writeOffset on error so subsequent iterations won't trigger\n\t\t\t\t\t// any writes.\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tfirstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: err}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif nbytes < len(pendingData) {\n\t\t\t\t\t\tfirstErr = offsetErr{offset: writeOffset + uint64(nbytes), err: io.ErrShortWrite}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\twriteOffset += uint64(nbytes)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Don't write the data yet because\n\t\t\t\t// this response came in out of order\n\t\t\t\t// and we need to wait for responses\n\t\t\t\t// for earlier segments of the file.\n\t\t\t\tpendingWrites[req.offset] = data\n\t\t\t}\n\t\tdefault:\n\t\t\tfirstErr = offsetErr{offset: 0, err: unimplementedPacketErr(res.typ)}\n\t\t\tbreak\n\t\t}\n\t}\n\tif firstErr.err != io.EOF {\n\t\treturn copied, firstErr.err\n\t}\n\treturn copied, nil\n}\n\n// Stat returns the FileInfo structure describing file. If there is an\n// error.\nfunc (f *File) Stat() (os.FileInfo, error) {\n\tfs, err := f.c.fstat(f.handle)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fileInfoFromStat(fs, path.Base(f.path)), nil\n}\n\n// Write writes len(b) bytes to the File. It returns the number of bytes\n// written and an error, if any. Write returns a non-nil error when n !=\n// len(b).\nfunc (f *File) Write(b []byte) (int, error) {\n\t// Split the write into multiple maxPacket sized concurrent writes\n\t// bounded by maxConcurrentRequests. This allows writes with a suitably\n\t// large buffer to transfer data at a much faster rate due to\n\t// overlapping round trip times.\n\tinFlight := 0\n\tdesiredInFlight := 1\n\toffset := f.offset\n\t// chan must have a buffer of max value of (desiredInFlight - inFlight)\n\tch := make(chan result, 2)\n\tvar firstErr error\n\twritten := len(b)\n\tfor len(b) > 0 || inFlight > 0 {\n\t\tfor inFlight < desiredInFlight && len(b) > 0 && firstErr == nil {\n\t\t\tl := min(len(b), f.c.maxPacket)\n\t\t\trb := b[:l]\n\t\t\tf.c.dispatchRequest(ch, sshFxpWritePacket{\n\t\t\t\tID:     f.c.nextID(),\n\t\t\t\tHandle: f.handle,\n\t\t\t\tOffset: offset,\n\t\t\t\tLength: uint32(len(rb)),\n\t\t\t\tData:   rb,\n\t\t\t})\n\t\t\tinFlight++\n\t\t\toffset += uint64(l)\n\t\t\tb = b[l:]\n\t\t}\n\n\t\tif inFlight == 0 {\n\t\t\tbreak\n\t\t}\n\t\tres := <-ch\n\t\tinFlight--\n\t\tif res.err != nil {\n\t\t\tfirstErr = res.err\n\t\t\tbreak\n\t\t}\n\t\tswitch res.typ {\n\t\tcase ssh_FXP_STATUS:\n\t\t\tid, _ := unmarshalUint32(res.data)\n\t\t\terr := normaliseError(unmarshalStatus(id, res.data))\n\t\t\tif err != nil && firstErr == nil {\n\t\t\t\tfirstErr = err\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif desiredInFlight < maxConcurrentRequests {\n\t\t\t\tdesiredInFlight++\n\t\t\t}\n\t\tdefault:\n\t\t\tfirstErr = unimplementedPacketErr(res.typ)\n\t\t\tbreak\n\t\t}\n\t}\n\t// If error is non-nil, then there may be gaps in the data written to\n\t// the file so it's best to return 0 so the caller can't make any\n\t// incorrect assumptions about the state of the file.\n\tif firstErr != nil {\n\t\twritten = 0\n\t}\n\tf.offset += uint64(written)\n\treturn written, firstErr\n}\n\n// ReadFrom reads data from r until EOF and writes it to the file. The return\n// value is the number of bytes read. Any error except io.EOF encountered\n// during the read is also returned.\nfunc (f *File) ReadFrom(r io.Reader) (int64, error) {\n\tinFlight := 0\n\tdesiredInFlight := 1\n\toffset := f.offset\n\t// chan must have a buffer of max value of (desiredInFlight - inFlight)\n\tch := make(chan result, 2)\n\tvar firstErr error\n\tread := int64(0)\n\tb := make([]byte, f.c.maxPacket)\n\tfor inFlight > 0 || firstErr == nil {\n\t\tfor inFlight < desiredInFlight && firstErr == nil {\n\t\t\tn, err := r.Read(b)\n\t\t\tif err != nil {\n\t\t\t\tfirstErr = err\n\t\t\t}\n\t\t\tf.c.dispatchRequest(ch, sshFxpWritePacket{\n\t\t\t\tID:     f.c.nextID(),\n\t\t\t\tHandle: f.handle,\n\t\t\t\tOffset: offset,\n\t\t\t\tLength: uint32(n),\n\t\t\t\tData:   b[:n],\n\t\t\t})\n\t\t\tinFlight++\n\t\t\toffset += uint64(n)\n\t\t\tread += int64(n)\n\t\t}\n\n\t\tif inFlight == 0 {\n\t\t\tbreak\n\t\t}\n\t\tres := <-ch\n\t\tinFlight--\n\t\tif res.err != nil {\n\t\t\tfirstErr = res.err\n\t\t\tbreak\n\t\t}\n\t\tswitch res.typ {\n\t\tcase ssh_FXP_STATUS:\n\t\t\tid, _ := unmarshalUint32(res.data)\n\t\t\terr := normaliseError(unmarshalStatus(id, res.data))\n\t\t\tif err != nil && firstErr == nil {\n\t\t\t\tfirstErr = err\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif desiredInFlight < maxConcurrentRequests {\n\t\t\t\tdesiredInFlight++\n\t\t\t}\n\t\tdefault:\n\t\t\tfirstErr = unimplementedPacketErr(res.typ)\n\t\t\tbreak\n\t\t}\n\t}\n\tif firstErr == io.EOF {\n\t\tfirstErr = nil\n\t}\n\t// If error is non-nil, then there may be gaps in the data written to\n\t// the file so it's best to return 0 so the caller can't make any\n\t// incorrect assumptions about the state of the file.\n\tif firstErr != nil {\n\t\tread = 0\n\t}\n\tf.offset += uint64(read)\n\treturn read, firstErr\n}\n\n// Seek implements io.Seeker by setting the client offset for the next Read or\n// Write. It returns the next offset read. Seeking before or after the end of\n// the file is undefined. Seeking relative to the end calls Stat.\nfunc (f *File) Seek(offset int64, whence int) (int64, error) {\n\tswitch whence {\n\tcase os.SEEK_SET:\n\t\tf.offset = uint64(offset)\n\tcase os.SEEK_CUR:\n\t\tf.offset = uint64(int64(f.offset) + offset)\n\tcase os.SEEK_END:\n\t\tfi, err := f.Stat()\n\t\tif err != nil {\n\t\t\treturn int64(f.offset), err\n\t\t}\n\t\tf.offset = uint64(fi.Size() + offset)\n\tdefault:\n\t\treturn int64(f.offset), unimplementedSeekWhence(whence)\n\t}\n\treturn int64(f.offset), nil\n}\n\n// Chown changes the uid/gid of the current file.\nfunc (f *File) Chown(uid, gid int) error {\n\treturn f.c.Chown(f.path, uid, gid)\n}\n\n// Chmod changes the permissions of the current file.\nfunc (f *File) Chmod(mode os.FileMode) error {\n\treturn f.c.Chmod(f.path, mode)\n}\n\n// Truncate sets the size of the current file. Although it may be safely assumed\n// that if the size is less than its current size it will be truncated to fit,\n// the SFTP protocol does not specify what behavior the server should do when setting\n// size greater than the current size.\nfunc (f *File) Truncate(size int64) error {\n\treturn f.c.Truncate(f.path, size)\n}\n\nfunc min(a, b int) int {\n\tif a > b {\n\t\treturn b\n\t}\n\treturn a\n}\n\n// normaliseError normalises an error into a more standard form that can be\n// checked against stdlib errors like io.EOF or os.ErrNotExist.\nfunc normaliseError(err error) error {\n\tswitch err := err.(type) {\n\tcase *StatusError:\n\t\tswitch err.Code {\n\t\tcase ssh_FX_EOF:\n\t\t\treturn io.EOF\n\t\tcase ssh_FX_NO_SUCH_FILE:\n\t\t\treturn os.ErrNotExist\n\t\tcase ssh_FX_OK:\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\tdefault:\n\t\treturn err\n\t}\n}\n\nfunc unmarshalStatus(id uint32, data []byte) error {\n\tsid, data := unmarshalUint32(data)\n\tif sid != id {\n\t\treturn &unexpectedIDErr{id, sid}\n\t}\n\tcode, data := unmarshalUint32(data)\n\tmsg, data, _ := unmarshalStringSafe(data)\n\tlang, _, _ := unmarshalStringSafe(data)\n\treturn &StatusError{\n\t\tCode: code,\n\t\tmsg:  msg,\n\t\tlang: lang,\n\t}\n}\n\nfunc marshalStatus(b []byte, err StatusError) []byte {\n\tb = marshalUint32(b, err.Code)\n\tb = marshalString(b, err.msg)\n\tb = marshalString(b, err.lang)\n\treturn b\n}\n\n// flags converts the flags passed to OpenFile into ssh flags.\n// Unsupported flags are ignored.\nfunc flags(f int) uint32 {\n\tvar out uint32\n\tswitch f & os.O_WRONLY {\n\tcase os.O_WRONLY:\n\t\tout |= ssh_FXF_WRITE\n\tcase os.O_RDONLY:\n\t\tout |= ssh_FXF_READ\n\t}\n\tif f&os.O_RDWR == os.O_RDWR {\n\t\tout |= ssh_FXF_READ | ssh_FXF_WRITE\n\t}\n\tif f&os.O_APPEND == os.O_APPEND {\n\t\tout |= ssh_FXF_APPEND\n\t}\n\tif f&os.O_CREATE == os.O_CREATE {\n\t\tout |= ssh_FXF_CREAT\n\t}\n\tif f&os.O_TRUNC == os.O_TRUNC {\n\t\tout |= ssh_FXF_TRUNC\n\t}\n\tif f&os.O_EXCL == os.O_EXCL {\n\t\tout |= ssh_FXF_EXCL\n\t}\n\treturn out\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/conn.go",
    "content": "package sftp\n\nimport (\n\t\"encoding\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/pkg/errors\"\n)\n\n// conn implements a bidirectional channel on which client and server\n// connections are multiplexed.\ntype conn struct {\n\tio.Reader\n\tio.WriteCloser\n\tsync.Mutex // used to serialise writes to sendPacket\n\t// sendPacketTest is needed to replicate packet issues in testing\n\tsendPacketTest func(w io.Writer, m encoding.BinaryMarshaler) error\n}\n\nfunc (c *conn) recvPacket() (uint8, []byte, error) {\n\treturn recvPacket(c)\n}\n\nfunc (c *conn) sendPacket(m encoding.BinaryMarshaler) error {\n\tc.Lock()\n\tdefer c.Unlock()\n\tif c.sendPacketTest != nil {\n\t\treturn c.sendPacketTest(c, m)\n\t}\n\treturn sendPacket(c, m)\n}\n\ntype clientConn struct {\n\tconn\n\twg         sync.WaitGroup\n\tsync.Mutex                          // protects inflight\n\tinflight   map[uint32]chan<- result // outstanding requests\n}\n\n// Close closes the SFTP session.\nfunc (c *clientConn) Close() error {\n\tdefer c.wg.Wait()\n\treturn c.conn.Close()\n}\n\nfunc (c *clientConn) loop() {\n\tdefer c.wg.Done()\n\terr := c.recv()\n\tif err != nil {\n\t\tc.broadcastErr(err)\n\t}\n}\n\n// recv continuously reads from the server and forwards responses to the\n// appropriate channel.\nfunc (c *clientConn) recv() error {\n\tdefer func() {\n\t\tc.conn.Lock()\n\t\tc.conn.Close()\n\t\tc.conn.Unlock()\n\t}()\n\tfor {\n\t\ttyp, data, err := c.recvPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsid, _ := unmarshalUint32(data)\n\t\tc.Lock()\n\t\tch, ok := c.inflight[sid]\n\t\tdelete(c.inflight, sid)\n\t\tc.Unlock()\n\t\tif !ok {\n\t\t\t// This is an unexpected occurrence. Send the error\n\t\t\t// back to all listeners so that they terminate\n\t\t\t// gracefully.\n\t\t\treturn errors.Errorf(\"sid: %v not fond\", sid)\n\t\t}\n\t\tch <- result{typ: typ, data: data}\n\t}\n}\n\n// result captures the result of receiving the a packet from the server\ntype result struct {\n\ttyp  byte\n\tdata []byte\n\terr  error\n}\n\ntype idmarshaler interface {\n\tid() uint32\n\tencoding.BinaryMarshaler\n}\n\nfunc (c *clientConn) sendPacket(p idmarshaler) (byte, []byte, error) {\n\tch := make(chan result, 1)\n\tc.dispatchRequest(ch, p)\n\ts := <-ch\n\treturn s.typ, s.data, s.err\n}\n\nfunc (c *clientConn) dispatchRequest(ch chan<- result, p idmarshaler) {\n\tc.Lock()\n\tc.inflight[p.id()] = ch\n\tc.Unlock()\n\tif err := c.conn.sendPacket(p); err != nil {\n\t\tc.Lock()\n\t\tdelete(c.inflight, p.id())\n\t\tc.Unlock()\n\t\tch <- result{err: err}\n\t}\n}\n\n// broadcastErr sends an error to all goroutines waiting for a response.\nfunc (c *clientConn) broadcastErr(err error) {\n\tc.Lock()\n\tlisteners := make([]chan<- result, 0, len(c.inflight))\n\tfor _, ch := range c.inflight {\n\t\tlisteners = append(listeners, ch)\n\t}\n\tc.Unlock()\n\tfor _, ch := range listeners {\n\t\tch <- result{err: err}\n\t}\n}\n\ntype serverConn struct {\n\tconn\n}\n\nfunc (s *serverConn) sendError(p ider, err error) error {\n\treturn s.sendPacket(statusFromError(p, err))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/debug.go",
    "content": "// +build debug\n\npackage sftp\n\nimport \"log\"\n\nfunc debug(fmt string, args ...interface{}) {\n\tlog.Printf(fmt, args...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/buffered-read-benchmark/main.go",
    "content": "// buffered-read-benchmark benchmarks the peformance of reading\n// from /dev/zero on the server to a []byte on the client via io.Copy.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/ssh\"\n\t\"golang.org/x/crypto/ssh/agent\"\n\n\t\"github.com/pkg/sftp\"\n)\n\nvar (\n\tUSER = flag.String(\"user\", os.Getenv(\"USER\"), \"ssh username\")\n\tHOST = flag.String(\"host\", \"localhost\", \"ssh server hostname\")\n\tPORT = flag.Int(\"port\", 22, \"ssh server port\")\n\tPASS = flag.String(\"pass\", os.Getenv(\"SOCKSIE_SSH_PASSWORD\"), \"ssh password\")\n\tSIZE = flag.Int(\"s\", 1<<15, \"set max packet size\")\n)\n\nfunc init() {\n\tflag.Parse()\n}\n\nfunc main() {\n\tvar auths []ssh.AuthMethod\n\tif aconn, err := net.Dial(\"unix\", os.Getenv(\"SSH_AUTH_SOCK\")); err == nil {\n\t\tauths = append(auths, ssh.PublicKeysCallback(agent.NewClient(aconn).Signers))\n\n\t}\n\tif *PASS != \"\" {\n\t\tauths = append(auths, ssh.Password(*PASS))\n\t}\n\n\tconfig := ssh.ClientConfig{\n\t\tUser: *USER,\n\t\tAuth: auths,\n\t}\n\taddr := fmt.Sprintf(\"%s:%d\", *HOST, *PORT)\n\tconn, err := ssh.Dial(\"tcp\", addr, &config)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to connect to [%s]: %v\", addr, err)\n\t}\n\tdefer conn.Close()\n\n\tc, err := sftp.NewClient(conn, sftp.MaxPacket(*SIZE))\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to start sftp subsytem: %v\", err)\n\t}\n\tdefer c.Close()\n\n\tr, err := c.Open(\"/dev/zero\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer r.Close()\n\n\tconst size = 1e9\n\n\tlog.Printf(\"reading %v bytes\", size)\n\tt1 := time.Now()\n\tn, err := io.ReadFull(r, make([]byte, size))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tif n != size {\n\t\tlog.Fatalf(\"copy: expected %v bytes, got %d\", size, n)\n\t}\n\tlog.Printf(\"read %v bytes in %s\", size, time.Since(t1))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/buffered-write-benchmark/main.go",
    "content": "// buffered-write-benchmark benchmarks the peformance of writing\n// a single large []byte on the client to /dev/null on the server via io.Copy.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/ssh\"\n\t\"golang.org/x/crypto/ssh/agent\"\n\n\t\"github.com/pkg/sftp\"\n)\n\nvar (\n\tUSER = flag.String(\"user\", os.Getenv(\"USER\"), \"ssh username\")\n\tHOST = flag.String(\"host\", \"localhost\", \"ssh server hostname\")\n\tPORT = flag.Int(\"port\", 22, \"ssh server port\")\n\tPASS = flag.String(\"pass\", os.Getenv(\"SOCKSIE_SSH_PASSWORD\"), \"ssh password\")\n\tSIZE = flag.Int(\"s\", 1<<15, \"set max packet size\")\n)\n\nfunc init() {\n\tflag.Parse()\n}\n\nfunc main() {\n\tvar auths []ssh.AuthMethod\n\tif aconn, err := net.Dial(\"unix\", os.Getenv(\"SSH_AUTH_SOCK\")); err == nil {\n\t\tauths = append(auths, ssh.PublicKeysCallback(agent.NewClient(aconn).Signers))\n\n\t}\n\tif *PASS != \"\" {\n\t\tauths = append(auths, ssh.Password(*PASS))\n\t}\n\n\tconfig := ssh.ClientConfig{\n\t\tUser: *USER,\n\t\tAuth: auths,\n\t}\n\taddr := fmt.Sprintf(\"%s:%d\", *HOST, *PORT)\n\tconn, err := ssh.Dial(\"tcp\", addr, &config)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to connect to [%s]: %v\", addr, err)\n\t}\n\tdefer conn.Close()\n\n\tc, err := sftp.NewClient(conn, sftp.MaxPacket(*SIZE))\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to start sftp subsytem: %v\", err)\n\t}\n\tdefer c.Close()\n\n\tw, err := c.OpenFile(\"/dev/null\", syscall.O_WRONLY)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer w.Close()\n\n\tf, err := os.Open(\"/dev/zero\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer f.Close()\n\n\tconst size = 1e9\n\n\tlog.Printf(\"writing %v bytes\", size)\n\tt1 := time.Now()\n\tn, err := w.Write(make([]byte, size))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tif n != size {\n\t\tlog.Fatalf(\"copy: expected %v bytes, got %d\", size, n)\n\t}\n\tlog.Printf(\"wrote %v bytes in %s\", size, time.Since(t1))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/request-server/main.go",
    "content": "// An example SFTP server implementation using the golang SSH package.\n// Serves the whole filesystem visible to the user, and has a hard-coded username and password,\n// so not for real use!\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\n\t\"github.com/pkg/sftp\"\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// Based on example server code from golang.org/x/crypto/ssh and server_standalone\nfunc main() {\n\n\tvar (\n\t\treadOnly    bool\n\t\tdebugStderr bool\n\t)\n\n\tflag.BoolVar(&readOnly, \"R\", false, \"read-only server\")\n\tflag.BoolVar(&debugStderr, \"e\", false, \"debug to stderr\")\n\tflag.Parse()\n\n\tdebugStream := ioutil.Discard\n\tif debugStderr {\n\t\tdebugStream = os.Stderr\n\t}\n\n\t// An SSH server is represented by a ServerConfig, which holds\n\t// certificate details and handles authentication of ServerConns.\n\tconfig := &ssh.ServerConfig{\n\t\tPasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {\n\t\t\t// Should use constant-time compare (or better, salt+hash) in\n\t\t\t// a production setting.\n\t\t\tfmt.Fprintf(debugStream, \"Login: %s\\n\", c.User())\n\t\t\tif c.User() == \"testuser\" && string(pass) == \"tiger\" {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"password rejected for %q\", c.User())\n\t\t},\n\t}\n\n\tprivateBytes, err := ioutil.ReadFile(\"id_rsa\")\n\tif err != nil {\n\t\tlog.Fatal(\"Failed to load private key\", err)\n\t}\n\n\tprivate, err := ssh.ParsePrivateKey(privateBytes)\n\tif err != nil {\n\t\tlog.Fatal(\"Failed to parse private key\", err)\n\t}\n\n\tconfig.AddHostKey(private)\n\n\t// Once a ServerConfig has been configured, connections can be\n\t// accepted.\n\tlistener, err := net.Listen(\"tcp\", \"0.0.0.0:2022\")\n\tif err != nil {\n\t\tlog.Fatal(\"failed to listen for connection\", err)\n\t}\n\tfmt.Printf(\"Listening on %v\\n\", listener.Addr())\n\n\tnConn, err := listener.Accept()\n\tif err != nil {\n\t\tlog.Fatal(\"failed to accept incoming connection\", err)\n\t}\n\n\t// Before use, a handshake must be performed on the incoming\n\t// net.Conn.\n\t_, chans, reqs, err := ssh.NewServerConn(nConn, config)\n\tif err != nil {\n\t\tlog.Fatal(\"failed to handshake\", err)\n\t}\n\tfmt.Fprintf(debugStream, \"SSH server established\\n\")\n\n\t// The incoming Request channel must be serviced.\n\tgo ssh.DiscardRequests(reqs)\n\n\t// Service the incoming Channel channel.\n\tfor newChannel := range chans {\n\t\t// Channels have a type, depending on the application level\n\t\t// protocol intended. In the case of an SFTP session, this is \"subsystem\"\n\t\t// with a payload string of \"<length=4>sftp\"\n\t\tfmt.Fprintf(debugStream, \"Incoming channel: %s\\n\", newChannel.ChannelType())\n\t\tif newChannel.ChannelType() != \"session\" {\n\t\t\tnewChannel.Reject(ssh.UnknownChannelType, \"unknown channel type\")\n\t\t\tfmt.Fprintf(debugStream, \"Unknown channel type: %s\\n\", newChannel.ChannelType())\n\t\t\tcontinue\n\t\t}\n\t\tchannel, requests, err := newChannel.Accept()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"could not accept channel.\", err)\n\t\t}\n\t\tfmt.Fprintf(debugStream, \"Channel accepted\\n\")\n\n\t\t// Sessions have out-of-band requests such as \"shell\",\n\t\t// \"pty-req\" and \"env\".  Here we handle only the\n\t\t// \"subsystem\" request.\n\t\tgo func(in <-chan *ssh.Request) {\n\t\t\tfor req := range in {\n\t\t\t\tfmt.Fprintf(debugStream, \"Request: %v\\n\", req.Type)\n\t\t\t\tok := false\n\t\t\t\tswitch req.Type {\n\t\t\t\tcase \"subsystem\":\n\t\t\t\t\tfmt.Fprintf(debugStream, \"Subsystem: %s\\n\", req.Payload[4:])\n\t\t\t\t\tif string(req.Payload[4:]) == \"sftp\" {\n\t\t\t\t\t\tok = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(debugStream, \" - accepted: %v\\n\", ok)\n\t\t\t\treq.Reply(ok, nil)\n\t\t\t}\n\t\t}(requests)\n\n\t\troot := sftp.InMemHandler()\n\t\tserver := sftp.NewRequestServer(channel, root)\n\t\tif err := server.Serve(); err == io.EOF {\n\t\t\tserver.Close()\n\t\t\tlog.Print(\"sftp client exited session.\")\n\t\t} else if err != nil {\n\t\t\tlog.Fatal(\"sftp server completed with error:\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/sftp-server/main.go",
    "content": "// An example SFTP server implementation using the golang SSH package.\n// Serves the whole filesystem visible to the user, and has a hard-coded username and password,\n// so not for real use!\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\n\t\"github.com/pkg/sftp\"\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// Based on example server code from golang.org/x/crypto/ssh and server_standalone\nfunc main() {\n\n\tvar (\n\t\treadOnly    bool\n\t\tdebugStderr bool\n\t)\n\n\tflag.BoolVar(&readOnly, \"R\", false, \"read-only server\")\n\tflag.BoolVar(&debugStderr, \"e\", false, \"debug to stderr\")\n\tflag.Parse()\n\n\tdebugStream := ioutil.Discard\n\tif debugStderr {\n\t\tdebugStream = os.Stderr\n\t}\n\n\t// An SSH server is represented by a ServerConfig, which holds\n\t// certificate details and handles authentication of ServerConns.\n\tconfig := &ssh.ServerConfig{\n\t\tPasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {\n\t\t\t// Should use constant-time compare (or better, salt+hash) in\n\t\t\t// a production setting.\n\t\t\tfmt.Fprintf(debugStream, \"Login: %s\\n\", c.User())\n\t\t\tif c.User() == \"testuser\" && string(pass) == \"tiger\" {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"password rejected for %q\", c.User())\n\t\t},\n\t}\n\n\tprivateBytes, err := ioutil.ReadFile(\"id_rsa\")\n\tif err != nil {\n\t\tlog.Fatal(\"Failed to load private key\", err)\n\t}\n\n\tprivate, err := ssh.ParsePrivateKey(privateBytes)\n\tif err != nil {\n\t\tlog.Fatal(\"Failed to parse private key\", err)\n\t}\n\n\tconfig.AddHostKey(private)\n\n\t// Once a ServerConfig has been configured, connections can be\n\t// accepted.\n\tlistener, err := net.Listen(\"tcp\", \"0.0.0.0:2022\")\n\tif err != nil {\n\t\tlog.Fatal(\"failed to listen for connection\", err)\n\t}\n\tfmt.Printf(\"Listening on %v\\n\", listener.Addr())\n\n\tnConn, err := listener.Accept()\n\tif err != nil {\n\t\tlog.Fatal(\"failed to accept incoming connection\", err)\n\t}\n\n\t// Before use, a handshake must be performed on the incoming\n\t// net.Conn.\n\t_, chans, reqs, err := ssh.NewServerConn(nConn, config)\n\tif err != nil {\n\t\tlog.Fatal(\"failed to handshake\", err)\n\t}\n\tfmt.Fprintf(debugStream, \"SSH server established\\n\")\n\n\t// The incoming Request channel must be serviced.\n\tgo ssh.DiscardRequests(reqs)\n\n\t// Service the incoming Channel channel.\n\tfor newChannel := range chans {\n\t\t// Channels have a type, depending on the application level\n\t\t// protocol intended. In the case of an SFTP session, this is \"subsystem\"\n\t\t// with a payload string of \"<length=4>sftp\"\n\t\tfmt.Fprintf(debugStream, \"Incoming channel: %s\\n\", newChannel.ChannelType())\n\t\tif newChannel.ChannelType() != \"session\" {\n\t\t\tnewChannel.Reject(ssh.UnknownChannelType, \"unknown channel type\")\n\t\t\tfmt.Fprintf(debugStream, \"Unknown channel type: %s\\n\", newChannel.ChannelType())\n\t\t\tcontinue\n\t\t}\n\t\tchannel, requests, err := newChannel.Accept()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"could not accept channel.\", err)\n\t\t}\n\t\tfmt.Fprintf(debugStream, \"Channel accepted\\n\")\n\n\t\t// Sessions have out-of-band requests such as \"shell\",\n\t\t// \"pty-req\" and \"env\".  Here we handle only the\n\t\t// \"subsystem\" request.\n\t\tgo func(in <-chan *ssh.Request) {\n\t\t\tfor req := range in {\n\t\t\t\tfmt.Fprintf(debugStream, \"Request: %v\\n\", req.Type)\n\t\t\t\tok := false\n\t\t\t\tswitch req.Type {\n\t\t\t\tcase \"subsystem\":\n\t\t\t\t\tfmt.Fprintf(debugStream, \"Subsystem: %s\\n\", req.Payload[4:])\n\t\t\t\t\tif string(req.Payload[4:]) == \"sftp\" {\n\t\t\t\t\t\tok = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(debugStream, \" - accepted: %v\\n\", ok)\n\t\t\t\treq.Reply(ok, nil)\n\t\t\t}\n\t\t}(requests)\n\n\t\tserverOptions := []sftp.ServerOption{\n\t\t\tsftp.WithDebug(debugStream),\n\t\t}\n\n\t\tif readOnly {\n\t\t\tserverOptions = append(serverOptions, sftp.ReadOnly())\n\t\t\tfmt.Fprintf(debugStream, \"Read-only server\\n\")\n\t\t} else {\n\t\t\tfmt.Fprintf(debugStream, \"Read write server\\n\")\n\t\t}\n\n\t\tserver, err := sftp.NewServer(\n\t\t\tchannel,\n\t\t\tserverOptions...,\n\t\t)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tif err := server.Serve(); err == io.EOF {\n\t\t\tserver.Close()\n\t\t\tlog.Print(\"sftp client exited session.\")\n\t\t} else if err != nil {\n\t\t\tlog.Fatal(\"sftp server completed with error:\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/streaming-read-benchmark/main.go",
    "content": "// streaming-read-benchmark benchmarks the peformance of reading\n// from /dev/zero on the server to /dev/null on the client via io.Copy.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/ssh\"\n\t\"golang.org/x/crypto/ssh/agent\"\n\n\t\"github.com/pkg/sftp\"\n)\n\nvar (\n\tUSER = flag.String(\"user\", os.Getenv(\"USER\"), \"ssh username\")\n\tHOST = flag.String(\"host\", \"localhost\", \"ssh server hostname\")\n\tPORT = flag.Int(\"port\", 22, \"ssh server port\")\n\tPASS = flag.String(\"pass\", os.Getenv(\"SOCKSIE_SSH_PASSWORD\"), \"ssh password\")\n\tSIZE = flag.Int(\"s\", 1<<15, \"set max packet size\")\n)\n\nfunc init() {\n\tflag.Parse()\n}\n\nfunc main() {\n\tvar auths []ssh.AuthMethod\n\tif aconn, err := net.Dial(\"unix\", os.Getenv(\"SSH_AUTH_SOCK\")); err == nil {\n\t\tauths = append(auths, ssh.PublicKeysCallback(agent.NewClient(aconn).Signers))\n\n\t}\n\tif *PASS != \"\" {\n\t\tauths = append(auths, ssh.Password(*PASS))\n\t}\n\n\tconfig := ssh.ClientConfig{\n\t\tUser: *USER,\n\t\tAuth: auths,\n\t}\n\taddr := fmt.Sprintf(\"%s:%d\", *HOST, *PORT)\n\tconn, err := ssh.Dial(\"tcp\", addr, &config)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to connect to [%s]: %v\", addr, err)\n\t}\n\tdefer conn.Close()\n\n\tc, err := sftp.NewClient(conn, sftp.MaxPacket(*SIZE))\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to start sftp subsytem: %v\", err)\n\t}\n\tdefer c.Close()\n\n\tr, err := c.Open(\"/dev/zero\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer r.Close()\n\n\tw, err := os.OpenFile(\"/dev/null\", syscall.O_WRONLY, 0600)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer w.Close()\n\n\tconst size int64 = 1e9\n\n\tlog.Printf(\"reading %v bytes\", size)\n\tt1 := time.Now()\n\tn, err := io.Copy(w, io.LimitReader(r, size))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tif n != size {\n\t\tlog.Fatalf(\"copy: expected %v bytes, got %d\", size, n)\n\t}\n\tlog.Printf(\"read %v bytes in %s\", size, time.Since(t1))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/examples/streaming-write-benchmark/main.go",
    "content": "// streaming-write-benchmark benchmarks the peformance of writing\n// from /dev/zero on the client to /dev/null on the server via io.Copy.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/ssh\"\n\t\"golang.org/x/crypto/ssh/agent\"\n\n\t\"github.com/pkg/sftp\"\n)\n\nvar (\n\tUSER = flag.String(\"user\", os.Getenv(\"USER\"), \"ssh username\")\n\tHOST = flag.String(\"host\", \"localhost\", \"ssh server hostname\")\n\tPORT = flag.Int(\"port\", 22, \"ssh server port\")\n\tPASS = flag.String(\"pass\", os.Getenv(\"SOCKSIE_SSH_PASSWORD\"), \"ssh password\")\n\tSIZE = flag.Int(\"s\", 1<<15, \"set max packet size\")\n)\n\nfunc init() {\n\tflag.Parse()\n}\n\nfunc main() {\n\tvar auths []ssh.AuthMethod\n\tif aconn, err := net.Dial(\"unix\", os.Getenv(\"SSH_AUTH_SOCK\")); err == nil {\n\t\tauths = append(auths, ssh.PublicKeysCallback(agent.NewClient(aconn).Signers))\n\n\t}\n\tif *PASS != \"\" {\n\t\tauths = append(auths, ssh.Password(*PASS))\n\t}\n\n\tconfig := ssh.ClientConfig{\n\t\tUser: *USER,\n\t\tAuth: auths,\n\t}\n\taddr := fmt.Sprintf(\"%s:%d\", *HOST, *PORT)\n\tconn, err := ssh.Dial(\"tcp\", addr, &config)\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to connect to [%s]: %v\", addr, err)\n\t}\n\tdefer conn.Close()\n\n\tc, err := sftp.NewClient(conn, sftp.MaxPacket(*SIZE))\n\tif err != nil {\n\t\tlog.Fatalf(\"unable to start sftp subsytem: %v\", err)\n\t}\n\tdefer c.Close()\n\n\tw, err := c.OpenFile(\"/dev/null\", syscall.O_WRONLY)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer w.Close()\n\n\tf, err := os.Open(\"/dev/zero\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer f.Close()\n\n\tconst size int64 = 1e9\n\n\tlog.Printf(\"writing %v bytes\", size)\n\tt1 := time.Now()\n\tn, err := io.Copy(w, io.LimitReader(f, size))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tif n != size {\n\t\tlog.Fatalf(\"copy: expected %v bytes, got %d\", size, n)\n\t}\n\tlog.Printf(\"wrote %v bytes in %s\", size, time.Since(t1))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/match.go",
    "content": "package sftp\n\nimport (\n\t\"errors\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// ErrBadPattern indicates a globbing pattern was malformed.\nvar ErrBadPattern = errors.New(\"syntax error in pattern\")\n\n// Unix separator\nconst separator = \"/\"\n\n// Match reports whether name matches the shell file name pattern.\n// The pattern syntax is:\n//\n//\tpattern:\n//\t\t{ term }\n//\tterm:\n//\t\t'*'         matches any sequence of non-Separator characters\n//\t\t'?'         matches any single non-Separator character\n//\t\t'[' [ '^' ] { character-range } ']'\n//\t\t            character class (must be non-empty)\n//\t\tc           matches character c (c != '*', '?', '\\\\', '[')\n//\t\t'\\\\' c      matches character c\n//\n//\tcharacter-range:\n//\t\tc           matches character c (c != '\\\\', '-', ']')\n//\t\t'\\\\' c      matches character c\n//\t\tlo '-' hi   matches character c for lo <= c <= hi\n//\n// Match requires pattern to match all of name, not just a substring.\n// The only possible returned error is ErrBadPattern, when pattern\n// is malformed.\n//\n//\nfunc Match(pattern, name string) (matched bool, err error) {\nPattern:\n\tfor len(pattern) > 0 {\n\t\tvar star bool\n\t\tvar chunk string\n\t\tstar, chunk, pattern = scanChunk(pattern)\n\t\tif star && chunk == \"\" {\n\t\t\t// Trailing * matches rest of string unless it has a /.\n\t\t\treturn !strings.Contains(name, separator), nil\n\t\t}\n\t\t// Look for match at current position.\n\t\tt, ok, err := matchChunk(chunk, name)\n\t\t// if we're the last chunk, make sure we've exhausted the name\n\t\t// otherwise we'll give a false result even if we could still match\n\t\t// using the star\n\t\tif ok && (len(t) == 0 || len(pattern) > 0) {\n\t\t\tname = t\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif star {\n\t\t\t// Look for match skipping i+1 bytes.\n\t\t\t// Cannot skip /.\n\t\t\tfor i := 0; i < len(name) && !isPathSeparator(name[i]); i++ {\n\t\t\t\tt, ok, err := matchChunk(chunk, name[i+1:])\n\t\t\t\tif ok {\n\t\t\t\t\t// if we're the last chunk, make sure we exhausted the name\n\t\t\t\t\tif len(pattern) == 0 && len(t) > 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tname = t\n\t\t\t\t\tcontinue Pattern\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false, nil\n\t}\n\treturn len(name) == 0, nil\n}\n\n// detect if byte(char) is path separator\nfunc isPathSeparator(c byte) bool {\n\treturn string(c) == \"/\"\n}\n\n// scanChunk gets the next segment of pattern, which is a non-star string\n// possibly preceded by a star.\nfunc scanChunk(pattern string) (star bool, chunk, rest string) {\n\tfor len(pattern) > 0 && pattern[0] == '*' {\n\t\tpattern = pattern[1:]\n\t\tstar = true\n\t}\n\tinrange := false\n\tvar i int\nScan:\n\tfor i = 0; i < len(pattern); i++ {\n\t\tswitch pattern[i] {\n\t\tcase '\\\\':\n\n\t\t\t// error check handled in matchChunk: bad pattern.\n\t\t\tif i+1 < len(pattern) {\n\t\t\t\ti++\n\t\t\t}\n\t\tcase '[':\n\t\t\tinrange = true\n\t\tcase ']':\n\t\t\tinrange = false\n\t\tcase '*':\n\t\t\tif !inrange {\n\t\t\t\tbreak Scan\n\t\t\t}\n\t\t}\n\t}\n\treturn star, pattern[0:i], pattern[i:]\n}\n\n// matchChunk checks whether chunk matches the beginning of s.\n// If so, it returns the remainder of s (after the match).\n// Chunk is all single-character operators: literals, char classes, and ?.\nfunc matchChunk(chunk, s string) (rest string, ok bool, err error) {\n\tfor len(chunk) > 0 {\n\t\tif len(s) == 0 {\n\t\t\treturn\n\t\t}\n\t\tswitch chunk[0] {\n\t\tcase '[':\n\t\t\t// character class\n\t\t\tr, n := utf8.DecodeRuneInString(s)\n\t\t\ts = s[n:]\n\t\t\tchunk = chunk[1:]\n\t\t\t// We can't end right after '[', we're expecting at least\n\t\t\t// a closing bracket and possibly a caret.\n\t\t\tif len(chunk) == 0 {\n\t\t\t\terr = ErrBadPattern\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// possibly negated\n\t\t\tnegated := chunk[0] == '^'\n\t\t\tif negated {\n\t\t\t\tchunk = chunk[1:]\n\t\t\t}\n\t\t\t// parse all ranges\n\t\t\tmatch := false\n\t\t\tnrange := 0\n\t\t\tfor {\n\t\t\t\tif len(chunk) > 0 && chunk[0] == ']' && nrange > 0 {\n\t\t\t\t\tchunk = chunk[1:]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tvar lo, hi rune\n\t\t\t\tif lo, chunk, err = getEsc(chunk); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\thi = lo\n\t\t\t\tif chunk[0] == '-' {\n\t\t\t\t\tif hi, chunk, err = getEsc(chunk[1:]); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif lo <= r && r <= hi {\n\t\t\t\t\tmatch = true\n\t\t\t\t}\n\t\t\t\tnrange++\n\t\t\t}\n\t\t\tif match == negated {\n\t\t\t\treturn\n\t\t\t}\n\n\t\tcase '?':\n\t\t\tif isPathSeparator(s[0]) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t_, n := utf8.DecodeRuneInString(s)\n\t\t\ts = s[n:]\n\t\t\tchunk = chunk[1:]\n\n\t\tcase '\\\\':\n\t\t\tchunk = chunk[1:]\n\t\t\tif len(chunk) == 0 {\n\t\t\t\terr = ErrBadPattern\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfallthrough\n\n\t\tdefault:\n\t\t\tif chunk[0] != s[0] {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ts = s[1:]\n\t\t\tchunk = chunk[1:]\n\t\t}\n\t}\n\treturn s, true, nil\n}\n\n// getEsc gets a possibly-escaped character from chunk, for a character class.\nfunc getEsc(chunk string) (r rune, nchunk string, err error) {\n\tif len(chunk) == 0 || chunk[0] == '-' || chunk[0] == ']' {\n\t\terr = ErrBadPattern\n\t\treturn\n\t}\n\tif chunk[0] == '\\\\' {\n\t\tchunk = chunk[1:]\n\t\tif len(chunk) == 0 {\n\t\t\terr = ErrBadPattern\n\t\t\treturn\n\t\t}\n\t}\n\tr, n := utf8.DecodeRuneInString(chunk)\n\tif r == utf8.RuneError && n == 1 {\n\t\terr = ErrBadPattern\n\t}\n\tnchunk = chunk[n:]\n\tif len(nchunk) == 0 {\n\t\terr = ErrBadPattern\n\t}\n\treturn\n}\n\n// Split splits path immediately following the final Separator,\n// separating it into a directory and file name component.\n// If there is no Separator in path, Split returns an empty dir\n// and file set to path.\n// The returned values have the property that path = dir+file.\nfunc Split(path string) (dir, file string) {\n\ti := len(path) - 1\n\tfor i >= 0 && !isPathSeparator(path[i]) {\n\t\ti--\n\t}\n\treturn path[:i+1], path[i+1:]\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.\nfunc (c *Client) Glob(pattern string) (matches []string, err error) {\n\tif !hasMeta(pattern) {\n\t\tfile, err := c.Lstat(pattern)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tdir, _ := Split(pattern)\n\t\tdir = cleanGlobPath(dir)\n\t\treturn []string{Join(dir, file.Name())}, nil\n\t}\n\n\tdir, file := Split(pattern)\n\tdir = cleanGlobPath(dir)\n\n\tif !hasMeta(dir) {\n\t\treturn c.glob(dir, file, nil)\n\t}\n\n\t// Prevent infinite recursion. See issue 15879.\n\tif dir == pattern {\n\t\treturn nil, ErrBadPattern\n\t}\n\n\tvar m []string\n\tm, err = c.Glob(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor _, d := range m {\n\t\tmatches, err = c.glob(d, file, matches)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// cleanGlobPath prepares path for glob matching.\nfunc cleanGlobPath(path string) string {\n\tswitch path {\n\tcase \"\":\n\t\treturn \".\"\n\tcase string(separator):\n\t\t// do nothing to the path\n\t\treturn path\n\tdefault:\n\t\treturn path[0 : len(path)-1] // chop off trailing separator\n\t}\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 (c *Client) glob(dir, pattern string, matches []string) (m []string, e error) {\n\tm = matches\n\tfi, err := c.Stat(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tif !fi.IsDir() {\n\t\treturn\n\t}\n\tnames, err := c.ReadDir(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t//sort.Strings(names)\n\n\tfor _, n := range names {\n\t\tmatched, err := Match(pattern, n.Name())\n\t\tif err != nil {\n\t\t\treturn m, err\n\t\t}\n\t\tif matched {\n\t\t\tm = append(m, Join(dir, n.Name()))\n\t\t}\n\t}\n\treturn\n}\n\n// Join joins any number of path elements into a single path, adding\n// a Separator if necessary.\n// all empty strings are ignored.\nfunc Join(elem ...string) string {\n\treturn join(elem)\n}\nfunc join(elem []string) string {\n\t// If there's a bug here, fix the logic in ./path_plan9.go too.\n\tfor i, e := range elem {\n\t\tif e != \"\" {\n\t\t\treturn strings.Join(elem[i:], string(separator))\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.ContainsAny(path, \"*?[\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/packet-manager.go",
    "content": "package sftp\n\nimport (\n\t\"encoding\"\n\t\"sync\"\n)\n\n// The goal of the packetManager is to keep the outgoing packets in the same\n// order as the incoming. This is due to some sftp clients requiring this\n// behavior (eg. winscp).\n\ntype packetSender interface {\n\tsendPacket(encoding.BinaryMarshaler) error\n}\n\ntype packetManager struct {\n\trequests  chan requestPacket\n\tresponses chan responsePacket\n\tfini      chan struct{}\n\tincoming  requestPacketIDs\n\toutgoing  responsePackets\n\tsender    packetSender // connection object\n\tworking   *sync.WaitGroup\n}\n\nfunc newPktMgr(sender packetSender) packetManager {\n\ts := packetManager{\n\t\trequests:  make(chan requestPacket, sftpServerWorkerCount),\n\t\tresponses: make(chan responsePacket, sftpServerWorkerCount),\n\t\tfini:      make(chan struct{}),\n\t\tincoming:  make([]uint32, 0, sftpServerWorkerCount),\n\t\toutgoing:  make([]responsePacket, 0, sftpServerWorkerCount),\n\t\tsender:    sender,\n\t\tworking:   &sync.WaitGroup{},\n\t}\n\tgo s.worker()\n\treturn s\n}\n\n// register incoming packets to be handled\n// send id of 0 for packets without id\nfunc (s packetManager) incomingPacket(pkt requestPacket) {\n\ts.working.Add(1)\n\ts.requests <- pkt // buffer == sftpServerWorkerCount\n}\n\n// register outgoing packets as being ready\nfunc (s packetManager) readyPacket(pkt responsePacket) {\n\ts.responses <- pkt\n\ts.working.Done()\n}\n\n// shut down packetManager worker\nfunc (s packetManager) close() {\n\tclose(s.fini)\n}\n\n// process packets\nfunc (s *packetManager) worker() {\n\tfor {\n\t\tselect {\n\t\tcase pkt := <-s.requests:\n\t\t\tdebug(\"incoming id: %v\", pkt.id())\n\t\t\ts.incoming = append(s.incoming, pkt.id())\n\t\t\tif len(s.incoming) > 1 {\n\t\t\t\ts.incoming.Sort()\n\t\t\t}\n\t\tcase pkt := <-s.responses:\n\t\t\tdebug(\"outgoing pkt: %v\", pkt.id())\n\t\t\ts.outgoing = append(s.outgoing, pkt)\n\t\t\tif len(s.outgoing) > 1 {\n\t\t\t\ts.outgoing.Sort()\n\t\t\t}\n\t\tcase <-s.fini:\n\t\t\treturn\n\t\t}\n\t\ts.maybeSendPackets()\n\t}\n}\n\n// send as many packets as are ready\nfunc (s *packetManager) maybeSendPackets() {\n\tfor {\n\t\tif len(s.outgoing) == 0 || len(s.incoming) == 0 {\n\t\t\tdebug(\"break! -- outgoing: %v; incoming: %v\",\n\t\t\t\tlen(s.outgoing), len(s.incoming))\n\t\t\tbreak\n\t\t}\n\t\tout := s.outgoing[0]\n\t\tin := s.incoming[0]\n\t\t// \t\tdebug(\"incoming: %v\", s.incoming)\n\t\t// \t\tdebug(\"outgoing: %v\", outfilter(s.outgoing))\n\t\tif in == out.id() {\n\t\t\ts.sender.sendPacket(out)\n\t\t\t// pop off heads\n\t\t\tcopy(s.incoming, s.incoming[1:])            // shift left\n\t\t\ts.incoming = s.incoming[:len(s.incoming)-1] // remove last\n\t\t\tcopy(s.outgoing, s.outgoing[1:])            // shift left\n\t\t\ts.outgoing = s.outgoing[:len(s.outgoing)-1] // remove last\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc outfilter(o []responsePacket) []uint32 {\n\tres := make([]uint32, 0, len(o))\n\tfor _, v := range o {\n\t\tres = append(res, v.id())\n\t}\n\treturn res\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/packet-manager_go1.8.go",
    "content": "// +build go1.8\n\npackage sftp\n\nimport \"sort\"\n\ntype responsePackets []responsePacket\n\nfunc (r responsePackets) Sort() {\n\tsort.Slice(r, func(i, j int) bool {\n\t\treturn r[i].id() < r[j].id()\n\t})\n}\n\ntype requestPacketIDs []uint32\n\nfunc (r requestPacketIDs) Sort() {\n\tsort.Slice(r, func(i, j int) bool {\n\t\treturn r[i] < r[j]\n\t})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/packet-manager_legacy.go",
    "content": "// +build !go1.8\n\npackage sftp\n\nimport \"sort\"\n\n// for sorting/ordering outgoing\ntype responsePackets []responsePacket\n\nfunc (r responsePackets) Len() int           { return len(r) }\nfunc (r responsePackets) Swap(i, j int)      { r[i], r[j] = r[j], r[i] }\nfunc (r responsePackets) Less(i, j int) bool { return r[i].id() < r[j].id() }\nfunc (r responsePackets) Sort()              { sort.Sort(r) }\n\n// for sorting/ordering incoming\ntype requestPacketIDs []uint32\n\nfunc (r requestPacketIDs) Len() int           { return len(r) }\nfunc (r requestPacketIDs) Swap(i, j int)      { r[i], r[j] = r[j], r[i] }\nfunc (r requestPacketIDs) Less(i, j int) bool { return r[i] < r[j] }\nfunc (r requestPacketIDs) Sort()              { sort.Sort(r) }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/packet-typing.go",
    "content": "package sftp\n\nimport (\n\t\"encoding\"\n\n\t\"github.com/pkg/errors\"\n)\n\n// all incoming packets\ntype requestPacket interface {\n\tencoding.BinaryUnmarshaler\n\tid() uint32\n}\n\ntype responsePacket interface {\n\tencoding.BinaryMarshaler\n\tid() uint32\n}\n\n// interfaces to group types\ntype hasPath interface {\n\trequestPacket\n\tgetPath() string\n}\n\ntype hasHandle interface {\n\trequestPacket\n\tgetHandle() string\n}\n\ntype isOpener interface {\n\thasPath\n\tisOpener()\n}\n\ntype notReadOnly interface {\n\tnotReadOnly()\n}\n\n//// define types by adding methods\n// hasPath\nfunc (p sshFxpLstatPacket) getPath() string    { return p.Path }\nfunc (p sshFxpStatPacket) getPath() string     { return p.Path }\nfunc (p sshFxpRmdirPacket) getPath() string    { return p.Path }\nfunc (p sshFxpReadlinkPacket) getPath() string { return p.Path }\nfunc (p sshFxpRealpathPacket) getPath() string { return p.Path }\nfunc (p sshFxpMkdirPacket) getPath() string    { return p.Path }\nfunc (p sshFxpSetstatPacket) getPath() string  { return p.Path }\nfunc (p sshFxpStatvfsPacket) getPath() string  { return p.Path }\nfunc (p sshFxpRemovePacket) getPath() string   { return p.Filename }\nfunc (p sshFxpRenamePacket) getPath() string   { return p.Oldpath }\nfunc (p sshFxpSymlinkPacket) getPath() string  { return p.Targetpath }\n\n// Openers implement hasPath and isOpener\nfunc (p sshFxpOpendirPacket) getPath() string { return p.Path }\nfunc (p sshFxpOpendirPacket) isOpener()       {}\nfunc (p sshFxpOpenPacket) getPath() string    { return p.Path }\nfunc (p sshFxpOpenPacket) isOpener()          {}\n\n// hasHandle\nfunc (p sshFxpFstatPacket) getHandle() string    { return p.Handle }\nfunc (p sshFxpFsetstatPacket) getHandle() string { return p.Handle }\nfunc (p sshFxpReadPacket) getHandle() string     { return p.Handle }\nfunc (p sshFxpWritePacket) getHandle() string    { return p.Handle }\nfunc (p sshFxpReaddirPacket) getHandle() string  { return p.Handle }\n\n// notReadOnly\nfunc (p sshFxpWritePacket) notReadOnly()    {}\nfunc (p sshFxpSetstatPacket) notReadOnly()  {}\nfunc (p sshFxpFsetstatPacket) notReadOnly() {}\nfunc (p sshFxpRemovePacket) notReadOnly()   {}\nfunc (p sshFxpMkdirPacket) notReadOnly()    {}\nfunc (p sshFxpRmdirPacket) notReadOnly()    {}\nfunc (p sshFxpRenamePacket) notReadOnly()   {}\nfunc (p sshFxpSymlinkPacket) notReadOnly()  {}\n\n// this has a handle, but is only used for close\nfunc (p sshFxpClosePacket) getHandle() string { return p.Handle }\n\n// some packets with ID are missing id()\nfunc (p sshFxpDataPacket) id() uint32   { return p.ID }\nfunc (p sshFxpStatusPacket) id() uint32 { return p.ID }\nfunc (p sshFxpStatResponse) id() uint32 { return p.ID }\nfunc (p sshFxpNamePacket) id() uint32   { return p.ID }\nfunc (p sshFxpHandlePacket) id() uint32 { return p.ID }\nfunc (p sshFxVersionPacket) id() uint32 { return 0 }\n\n// take raw incoming packet data and build packet objects\nfunc makePacket(p rxPacket) (requestPacket, error) {\n\tvar pkt requestPacket\n\tswitch p.pktType {\n\tcase ssh_FXP_INIT:\n\t\tpkt = &sshFxInitPacket{}\n\tcase ssh_FXP_LSTAT:\n\t\tpkt = &sshFxpLstatPacket{}\n\tcase ssh_FXP_OPEN:\n\t\tpkt = &sshFxpOpenPacket{}\n\tcase ssh_FXP_CLOSE:\n\t\tpkt = &sshFxpClosePacket{}\n\tcase ssh_FXP_READ:\n\t\tpkt = &sshFxpReadPacket{}\n\tcase ssh_FXP_WRITE:\n\t\tpkt = &sshFxpWritePacket{}\n\tcase ssh_FXP_FSTAT:\n\t\tpkt = &sshFxpFstatPacket{}\n\tcase ssh_FXP_SETSTAT:\n\t\tpkt = &sshFxpSetstatPacket{}\n\tcase ssh_FXP_FSETSTAT:\n\t\tpkt = &sshFxpFsetstatPacket{}\n\tcase ssh_FXP_OPENDIR:\n\t\tpkt = &sshFxpOpendirPacket{}\n\tcase ssh_FXP_READDIR:\n\t\tpkt = &sshFxpReaddirPacket{}\n\tcase ssh_FXP_REMOVE:\n\t\tpkt = &sshFxpRemovePacket{}\n\tcase ssh_FXP_MKDIR:\n\t\tpkt = &sshFxpMkdirPacket{}\n\tcase ssh_FXP_RMDIR:\n\t\tpkt = &sshFxpRmdirPacket{}\n\tcase ssh_FXP_REALPATH:\n\t\tpkt = &sshFxpRealpathPacket{}\n\tcase ssh_FXP_STAT:\n\t\tpkt = &sshFxpStatPacket{}\n\tcase ssh_FXP_RENAME:\n\t\tpkt = &sshFxpRenamePacket{}\n\tcase ssh_FXP_READLINK:\n\t\tpkt = &sshFxpReadlinkPacket{}\n\tcase ssh_FXP_SYMLINK:\n\t\tpkt = &sshFxpSymlinkPacket{}\n\tcase ssh_FXP_EXTENDED:\n\t\tpkt = &sshFxpExtendedPacket{}\n\tdefault:\n\t\treturn nil, errors.Errorf(\"unhandled packet type: %s\", p.pktType)\n\t}\n\tif err := pkt.UnmarshalBinary(p.pktBytes); err != nil {\n\t\treturn nil, err\n\t}\n\treturn pkt, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/packet.go",
    "content": "package sftp\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\n\t\"github.com/pkg/errors\"\n)\n\nvar (\n\terrShortPacket           = errors.New(\"packet too short\")\n\terrUnknownExtendedPacket = errors.New(\"unknown extended packet\")\n)\n\nconst (\n\tdebugDumpTxPacket      = false\n\tdebugDumpRxPacket      = false\n\tdebugDumpTxPacketBytes = false\n\tdebugDumpRxPacketBytes = false\n)\n\nfunc marshalUint32(b []byte, v uint32) []byte {\n\treturn append(b, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))\n}\n\nfunc marshalUint64(b []byte, v uint64) []byte {\n\treturn marshalUint32(marshalUint32(b, uint32(v>>32)), uint32(v))\n}\n\nfunc marshalString(b []byte, v string) []byte {\n\treturn append(marshalUint32(b, uint32(len(v))), v...)\n}\n\nfunc marshal(b []byte, v interface{}) []byte {\n\tif v == nil {\n\t\treturn b\n\t}\n\tswitch v := v.(type) {\n\tcase uint8:\n\t\treturn append(b, v)\n\tcase uint32:\n\t\treturn marshalUint32(b, v)\n\tcase uint64:\n\t\treturn marshalUint64(b, v)\n\tcase string:\n\t\treturn marshalString(b, v)\n\tcase os.FileInfo:\n\t\treturn marshalFileInfo(b, v)\n\tdefault:\n\t\tswitch d := reflect.ValueOf(v); d.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tfor i, n := 0, d.NumField(); i < n; i++ {\n\t\t\t\tb = append(marshal(b, d.Field(i).Interface()))\n\t\t\t}\n\t\t\treturn b\n\t\tcase reflect.Slice:\n\t\t\tfor i, n := 0, d.Len(); i < n; i++ {\n\t\t\t\tb = append(marshal(b, d.Index(i).Interface()))\n\t\t\t}\n\t\t\treturn b\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"marshal(%#v): cannot handle type %T\", v, v))\n\t\t}\n\t}\n}\n\nfunc unmarshalUint32(b []byte) (uint32, []byte) {\n\tv := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24\n\treturn v, b[4:]\n}\n\nfunc unmarshalUint32Safe(b []byte) (uint32, []byte, error) {\n\tvar v uint32\n\tif len(b) < 4 {\n\t\treturn 0, nil, errShortPacket\n\t}\n\tv, b = unmarshalUint32(b)\n\treturn v, b, nil\n}\n\nfunc unmarshalUint64(b []byte) (uint64, []byte) {\n\th, b := unmarshalUint32(b)\n\tl, b := unmarshalUint32(b)\n\treturn uint64(h)<<32 | uint64(l), b\n}\n\nfunc unmarshalUint64Safe(b []byte) (uint64, []byte, error) {\n\tvar v uint64\n\tif len(b) < 8 {\n\t\treturn 0, nil, errShortPacket\n\t}\n\tv, b = unmarshalUint64(b)\n\treturn v, b, nil\n}\n\nfunc unmarshalString(b []byte) (string, []byte) {\n\tn, b := unmarshalUint32(b)\n\treturn string(b[:n]), b[n:]\n}\n\nfunc unmarshalStringSafe(b []byte) (string, []byte, error) {\n\tn, b, err := unmarshalUint32Safe(b)\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\tif int64(n) > int64(len(b)) {\n\t\treturn \"\", nil, errShortPacket\n\t}\n\treturn string(b[:n]), b[n:], nil\n}\n\n// sendPacket marshals p according to RFC 4234.\nfunc sendPacket(w io.Writer, m encoding.BinaryMarshaler) error {\n\tbb, err := m.MarshalBinary()\n\tif err != nil {\n\t\treturn errors.Errorf(\"binary marshaller failed: %v\", err)\n\t}\n\tif debugDumpTxPacketBytes {\n\t\tdebug(\"send packet: %s %d bytes %x\", fxp(bb[0]), len(bb), bb[1:])\n\t} else if debugDumpTxPacket {\n\t\tdebug(\"send packet: %s %d bytes\", fxp(bb[0]), len(bb))\n\t}\n\tl := uint32(len(bb))\n\thdr := []byte{byte(l >> 24), byte(l >> 16), byte(l >> 8), byte(l)}\n\t_, err = w.Write(hdr)\n\tif err != nil {\n\t\treturn errors.Errorf(\"failed to send packet header: %v\", err)\n\t}\n\t_, err = w.Write(bb)\n\tif err != nil {\n\t\treturn errors.Errorf(\"failed to send packet body: %v\", err)\n\t}\n\treturn nil\n}\n\nfunc recvPacket(r io.Reader) (uint8, []byte, error) {\n\tvar b = []byte{0, 0, 0, 0}\n\tif _, err := io.ReadFull(r, b); err != nil {\n\t\treturn 0, nil, err\n\t}\n\tl, _ := unmarshalUint32(b)\n\tb = make([]byte, l)\n\tif _, err := io.ReadFull(r, b); err != nil {\n\t\tdebug(\"recv packet %d bytes: err %v\", l, err)\n\t\treturn 0, nil, err\n\t}\n\tif debugDumpRxPacketBytes {\n\t\tdebug(\"recv packet: %s %d bytes %x\", fxp(b[0]), l, b[1:])\n\t} else if debugDumpRxPacket {\n\t\tdebug(\"recv packet: %s %d bytes\", fxp(b[0]), l)\n\t}\n\treturn b[0], b[1:], nil\n}\n\ntype extensionPair struct {\n\tName string\n\tData string\n}\n\nfunc unmarshalExtensionPair(b []byte) (extensionPair, []byte, error) {\n\tvar ep extensionPair\n\tvar err error\n\tep.Name, b, err = unmarshalStringSafe(b)\n\tif err != nil {\n\t\treturn ep, b, err\n\t}\n\tep.Data, b, err = unmarshalStringSafe(b)\n\treturn ep, b, err\n}\n\n// Here starts the definition of packets along with their MarshalBinary\n// implementations.\n// Manually writing the marshalling logic wins us a lot of time and\n// allocation.\n\ntype sshFxInitPacket struct {\n\tVersion    uint32\n\tExtensions []extensionPair\n}\n\nfunc (p sshFxInitPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 // byte + uint32\n\tfor _, e := range p.Extensions {\n\t\tl += 4 + len(e.Name) + 4 + len(e.Data)\n\t}\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_INIT)\n\tb = marshalUint32(b, p.Version)\n\tfor _, e := range p.Extensions {\n\t\tb = marshalString(b, e.Name)\n\t\tb = marshalString(b, e.Data)\n\t}\n\treturn b, nil\n}\n\nfunc (p *sshFxInitPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.Version, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\tfor len(b) > 0 {\n\t\tvar ep extensionPair\n\t\tep, b, err = unmarshalExtensionPair(b)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp.Extensions = append(p.Extensions, ep)\n\t}\n\treturn nil\n}\n\ntype sshFxVersionPacket struct {\n\tVersion    uint32\n\tExtensions []struct {\n\t\tName, Data string\n\t}\n}\n\nfunc (p sshFxVersionPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 // byte + uint32\n\tfor _, e := range p.Extensions {\n\t\tl += 4 + len(e.Name) + 4 + len(e.Data)\n\t}\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_VERSION)\n\tb = marshalUint32(b, p.Version)\n\tfor _, e := range p.Extensions {\n\t\tb = marshalString(b, e.Name)\n\t\tb = marshalString(b, e.Data)\n\t}\n\treturn b, nil\n}\n\nfunc marshalIDString(packetType byte, id uint32, str string) ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(str)\n\n\tb := make([]byte, 0, l)\n\tb = append(b, packetType)\n\tb = marshalUint32(b, id)\n\tb = marshalString(b, str)\n\treturn b, nil\n}\n\nfunc unmarshalIDString(b []byte, id *uint32, str *string) error {\n\tvar err error\n\t*id, b, err = unmarshalUint32Safe(b)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*str, b, err = unmarshalStringSafe(b)\n\treturn err\n}\n\ntype sshFxpReaddirPacket struct {\n\tID     uint32\n\tHandle string\n}\n\nfunc (p sshFxpReaddirPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpReaddirPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_READDIR, p.ID, p.Handle)\n}\n\nfunc (p *sshFxpReaddirPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Handle)\n}\n\ntype sshFxpOpendirPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpOpendirPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpOpendirPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_OPENDIR, p.ID, p.Path)\n}\n\nfunc (p *sshFxpOpendirPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpLstatPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpLstatPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpLstatPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_LSTAT, p.ID, p.Path)\n}\n\nfunc (p *sshFxpLstatPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpStatPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpStatPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpStatPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_STAT, p.ID, p.Path)\n}\n\nfunc (p *sshFxpStatPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpFstatPacket struct {\n\tID     uint32\n\tHandle string\n}\n\nfunc (p sshFxpFstatPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpFstatPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_FSTAT, p.ID, p.Handle)\n}\n\nfunc (p *sshFxpFstatPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Handle)\n}\n\ntype sshFxpClosePacket struct {\n\tID     uint32\n\tHandle string\n}\n\nfunc (p sshFxpClosePacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpClosePacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_CLOSE, p.ID, p.Handle)\n}\n\nfunc (p *sshFxpClosePacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Handle)\n}\n\ntype sshFxpRemovePacket struct {\n\tID       uint32\n\tFilename string\n}\n\nfunc (p sshFxpRemovePacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpRemovePacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_REMOVE, p.ID, p.Filename)\n}\n\nfunc (p *sshFxpRemovePacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Filename)\n}\n\ntype sshFxpRmdirPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpRmdirPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpRmdirPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_RMDIR, p.ID, p.Path)\n}\n\nfunc (p *sshFxpRmdirPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpSymlinkPacket struct {\n\tID         uint32\n\tTargetpath string\n\tLinkpath   string\n}\n\nfunc (p sshFxpSymlinkPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpSymlinkPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Targetpath) +\n\t\t4 + len(p.Linkpath)\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_SYMLINK)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Targetpath)\n\tb = marshalString(b, p.Linkpath)\n\treturn b, nil\n}\n\nfunc (p *sshFxpSymlinkPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Targetpath, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Linkpath, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype sshFxpReadlinkPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpReadlinkPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpReadlinkPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_READLINK, p.ID, p.Path)\n}\n\nfunc (p *sshFxpReadlinkPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpRealpathPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpRealpathPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpRealpathPacket) MarshalBinary() ([]byte, error) {\n\treturn marshalIDString(ssh_FXP_REALPATH, p.ID, p.Path)\n}\n\nfunc (p *sshFxpRealpathPacket) UnmarshalBinary(b []byte) error {\n\treturn unmarshalIDString(b, &p.ID, &p.Path)\n}\n\ntype sshFxpNameAttr struct {\n\tName     string\n\tLongName string\n\tAttrs    []interface{}\n}\n\nfunc (p sshFxpNameAttr) MarshalBinary() ([]byte, error) {\n\tb := []byte{}\n\tb = marshalString(b, p.Name)\n\tb = marshalString(b, p.LongName)\n\tfor _, attr := range p.Attrs {\n\t\tb = marshal(b, attr)\n\t}\n\treturn b, nil\n}\n\ntype sshFxpNamePacket struct {\n\tID        uint32\n\tNameAttrs []sshFxpNameAttr\n}\n\nfunc (p sshFxpNamePacket) MarshalBinary() ([]byte, error) {\n\tb := []byte{}\n\tb = append(b, ssh_FXP_NAME)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalUint32(b, uint32(len(p.NameAttrs)))\n\tfor _, na := range p.NameAttrs {\n\t\tab, err := na.MarshalBinary()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tb = append(b, ab...)\n\t}\n\treturn b, nil\n}\n\ntype sshFxpOpenPacket struct {\n\tID     uint32\n\tPath   string\n\tPflags uint32\n\tFlags  uint32 // ignored\n}\n\nfunc (p sshFxpOpenPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpOpenPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 +\n\t\t4 + len(p.Path) +\n\t\t4 + 4\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_OPEN)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Path)\n\tb = marshalUint32(b, p.Pflags)\n\tb = marshalUint32(b, p.Flags)\n\treturn b, nil\n}\n\nfunc (p *sshFxpOpenPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Path, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Pflags, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Flags, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype sshFxpReadPacket struct {\n\tID     uint32\n\tHandle string\n\tOffset uint64\n\tLen    uint32\n}\n\nfunc (p sshFxpReadPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpReadPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Handle) +\n\t\t8 + 4 // uint64 + uint32\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_READ)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Handle)\n\tb = marshalUint64(b, p.Offset)\n\tb = marshalUint32(b, p.Len)\n\treturn b, nil\n}\n\nfunc (p *sshFxpReadPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Handle, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Offset, b, err = unmarshalUint64Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Len, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype sshFxpRenamePacket struct {\n\tID      uint32\n\tOldpath string\n\tNewpath string\n}\n\nfunc (p sshFxpRenamePacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpRenamePacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Oldpath) +\n\t\t4 + len(p.Newpath)\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_RENAME)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Oldpath)\n\tb = marshalString(b, p.Newpath)\n\treturn b, nil\n}\n\nfunc (p *sshFxpRenamePacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Oldpath, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Newpath, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype sshFxpWritePacket struct {\n\tID     uint32\n\tHandle string\n\tOffset uint64\n\tLength uint32\n\tData   []byte\n}\n\nfunc (p sshFxpWritePacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpWritePacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Handle) +\n\t\t8 + 4 + // uint64 + uint32\n\t\tlen(p.Data)\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_WRITE)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Handle)\n\tb = marshalUint64(b, p.Offset)\n\tb = marshalUint32(b, p.Length)\n\tb = append(b, p.Data...)\n\treturn b, nil\n}\n\nfunc (p *sshFxpWritePacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Handle, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Offset, b, err = unmarshalUint64Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Length, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if uint32(len(b)) < p.Length {\n\t\treturn errShortPacket\n\t}\n\n\tp.Data = append([]byte{}, b[:p.Length]...)\n\treturn nil\n}\n\ntype sshFxpMkdirPacket struct {\n\tID    uint32\n\tPath  string\n\tFlags uint32 // ignored\n}\n\nfunc (p sshFxpMkdirPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpMkdirPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Path) +\n\t\t4 // uint32\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_MKDIR)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Path)\n\tb = marshalUint32(b, p.Flags)\n\treturn b, nil\n}\n\nfunc (p *sshFxpMkdirPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Path, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Flags, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype sshFxpSetstatPacket struct {\n\tID    uint32\n\tPath  string\n\tFlags uint32\n\tAttrs interface{}\n}\n\ntype sshFxpFsetstatPacket struct {\n\tID     uint32\n\tHandle string\n\tFlags  uint32\n\tAttrs  interface{}\n}\n\nfunc (p sshFxpSetstatPacket) id() uint32  { return p.ID }\nfunc (p sshFxpFsetstatPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpSetstatPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Path) +\n\t\t4 // uint32 + uint64\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_SETSTAT)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Path)\n\tb = marshalUint32(b, p.Flags)\n\tb = marshal(b, p.Attrs)\n\treturn b, nil\n}\n\nfunc (p sshFxpFsetstatPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\t4 + len(p.Handle) +\n\t\t4 // uint32 + uint64\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_FSETSTAT)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Handle)\n\tb = marshalUint32(b, p.Flags)\n\tb = marshal(b, p.Attrs)\n\treturn b, nil\n}\n\nfunc (p *sshFxpSetstatPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Path, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Flags, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\tp.Attrs = b\n\treturn nil\n}\n\nfunc (p *sshFxpFsetstatPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Handle, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Flags, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t}\n\tp.Attrs = b\n\treturn nil\n}\n\ntype sshFxpHandlePacket struct {\n\tID     uint32\n\tHandle string\n}\n\nfunc (p sshFxpHandlePacket) MarshalBinary() ([]byte, error) {\n\tb := []byte{ssh_FXP_HANDLE}\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, p.Handle)\n\treturn b, nil\n}\n\ntype sshFxpStatusPacket struct {\n\tID uint32\n\tStatusError\n}\n\nfunc (p sshFxpStatusPacket) MarshalBinary() ([]byte, error) {\n\tb := []byte{ssh_FXP_STATUS}\n\tb = marshalUint32(b, p.ID)\n\tb = marshalStatus(b, p.StatusError)\n\treturn b, nil\n}\n\ntype sshFxpDataPacket struct {\n\tID     uint32\n\tLength uint32\n\tData   []byte\n}\n\nfunc (p sshFxpDataPacket) MarshalBinary() ([]byte, error) {\n\tb := []byte{ssh_FXP_DATA}\n\tb = marshalUint32(b, p.ID)\n\tb = marshalUint32(b, p.Length)\n\tb = append(b, p.Data[:p.Length]...)\n\treturn b, nil\n}\n\nfunc (p *sshFxpDataPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.Length, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if uint32(len(b)) < p.Length {\n\t\treturn errors.New(\"truncated packet\")\n\t}\n\n\tp.Data = make([]byte, p.Length)\n\tcopy(p.Data, b)\n\treturn nil\n}\n\ntype sshFxpStatvfsPacket struct {\n\tID   uint32\n\tPath string\n}\n\nfunc (p sshFxpStatvfsPacket) id() uint32 { return p.ID }\n\nfunc (p sshFxpStatvfsPacket) MarshalBinary() ([]byte, error) {\n\tl := 1 + 4 + // type(byte) + uint32\n\t\tlen(p.Path) +\n\t\tlen(\"statvfs@openssh.com\")\n\n\tb := make([]byte, 0, l)\n\tb = append(b, ssh_FXP_EXTENDED)\n\tb = marshalUint32(b, p.ID)\n\tb = marshalString(b, \"statvfs@openssh.com\")\n\tb = marshalString(b, p.Path)\n\treturn b, nil\n}\n\n// A StatVFS contains statistics about a filesystem.\ntype StatVFS struct {\n\tID      uint32\n\tBsize   uint64 /* file system block size */\n\tFrsize  uint64 /* fundamental fs block size */\n\tBlocks  uint64 /* number of blocks (unit f_frsize) */\n\tBfree   uint64 /* free blocks in file system */\n\tBavail  uint64 /* free blocks for non-root */\n\tFiles   uint64 /* total file inodes */\n\tFfree   uint64 /* free file inodes */\n\tFavail  uint64 /* free file inodes for to non-root */\n\tFsid    uint64 /* file system id */\n\tFlag    uint64 /* bit mask of f_flag values */\n\tNamemax uint64 /* maximum filename length */\n}\n\n// TotalSpace calculates the amount of total space in a filesystem.\nfunc (p *StatVFS) TotalSpace() uint64 {\n\treturn p.Frsize * p.Blocks\n}\n\n// FreeSpace calculates the amount of free space in a filesystem.\nfunc (p *StatVFS) FreeSpace() uint64 {\n\treturn p.Frsize * p.Bfree\n}\n\n// Convert to ssh_FXP_EXTENDED_REPLY packet binary format\nfunc (p *StatVFS) MarshalBinary() ([]byte, error) {\n\tvar buf bytes.Buffer\n\tbuf.Write([]byte{ssh_FXP_EXTENDED_REPLY})\n\terr := binary.Write(&buf, binary.BigEndian, p)\n\treturn buf.Bytes(), err\n}\n\ntype sshFxpExtendedPacket struct {\n\tID              uint32\n\tExtendedRequest string\n\tSpecificPacket  interface {\n\t\tserverRespondablePacket\n\t\treadonly() bool\n\t}\n}\n\nfunc (p sshFxpExtendedPacket) id() uint32     { return p.ID }\nfunc (p sshFxpExtendedPacket) readonly() bool { return p.SpecificPacket.readonly() }\n\nfunc (p sshFxpExtendedPacket) respond(svr *Server) error {\n\treturn p.SpecificPacket.respond(svr)\n}\n\nfunc (p *sshFxpExtendedPacket) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tbOrig := b\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.ExtendedRequest, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t}\n\n\t// specific unmarshalling\n\tswitch p.ExtendedRequest {\n\tcase \"statvfs@openssh.com\":\n\t\tp.SpecificPacket = &sshFxpExtendedPacketStatVFS{}\n\tdefault:\n\t\treturn errUnknownExtendedPacket\n\t}\n\n\treturn p.SpecificPacket.UnmarshalBinary(bOrig)\n}\n\ntype sshFxpExtendedPacketStatVFS struct {\n\tID              uint32\n\tExtendedRequest string\n\tPath            string\n}\n\nfunc (p sshFxpExtendedPacketStatVFS) id() uint32     { return p.ID }\nfunc (p sshFxpExtendedPacketStatVFS) readonly() bool { return true }\nfunc (p *sshFxpExtendedPacketStatVFS) UnmarshalBinary(b []byte) error {\n\tvar err error\n\tif p.ID, b, err = unmarshalUint32Safe(b); err != nil {\n\t\treturn err\n\t} else if p.ExtendedRequest, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t} else if p.Path, b, err = unmarshalStringSafe(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/release.go",
    "content": "// +build !debug\n\npackage sftp\n\nfunc debug(fmt string, args ...interface{}) {}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request-example.go",
    "content": "package sftp\n\n// This serves as an example of how to implement the request server handler as\n// well as a dummy backend for testing. It implements an in-memory backend that\n// works as a very simple filesystem with simple flat key-value lookup system.\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\t\"time\"\n)\n\n// InMemHandler returns a Hanlders object with the test handlers\nfunc InMemHandler() Handlers {\n\troot := &root{\n\t\tfiles: make(map[string]*memFile),\n\t}\n\troot.memFile = newMemFile(\"/\", true)\n\treturn Handlers{root, root, root, root}\n}\n\n// Handlers\nfunc (fs *root) Fileread(r Request) (io.ReaderAt, error) {\n\tfs.filesLock.Lock()\n\tdefer fs.filesLock.Unlock()\n\tfile, err := fs.fetch(r.Filepath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif file.symlink != \"\" {\n\t\tfile, err = fs.fetch(file.symlink)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn file.ReaderAt()\n}\n\nfunc (fs *root) Filewrite(r Request) (io.WriterAt, error) {\n\tfs.filesLock.Lock()\n\tdefer fs.filesLock.Unlock()\n\tfile, err := fs.fetch(r.Filepath)\n\tif err == os.ErrNotExist {\n\t\tdir, err := fs.fetch(filepath.Dir(r.Filepath))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !dir.isdir {\n\t\t\treturn nil, os.ErrInvalid\n\t\t}\n\t\tfile = newMemFile(r.Filepath, false)\n\t\tfs.files[r.Filepath] = file\n\t}\n\treturn file.WriterAt()\n}\n\nfunc (fs *root) Filecmd(r Request) error {\n\tfs.filesLock.Lock()\n\tdefer fs.filesLock.Unlock()\n\tswitch r.Method {\n\tcase \"SetStat\":\n\t\treturn nil\n\tcase \"Rename\":\n\t\tfile, err := fs.fetch(r.Filepath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, ok := fs.files[r.Target]; ok {\n\t\t\treturn &os.LinkError{Op: \"rename\", Old: r.Filepath, New: r.Target,\n\t\t\t\tErr: fmt.Errorf(\"dest file exists\")}\n\t\t}\n\t\tfs.files[r.Target] = file\n\t\tdelete(fs.files, r.Filepath)\n\tcase \"Rmdir\", \"Remove\":\n\t\t_, err := fs.fetch(filepath.Dir(r.Filepath))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdelete(fs.files, r.Filepath)\n\tcase \"Mkdir\":\n\t\t_, err := fs.fetch(filepath.Dir(r.Filepath))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfs.files[r.Filepath] = newMemFile(r.Filepath, true)\n\tcase \"Symlink\":\n\t\t_, err := fs.fetch(r.Filepath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlink := newMemFile(r.Target, false)\n\t\tlink.symlink = r.Filepath\n\t\tfs.files[r.Target] = link\n\t}\n\treturn nil\n}\n\nfunc (fs *root) Fileinfo(r Request) ([]os.FileInfo, error) {\n\tfs.filesLock.Lock()\n\tdefer fs.filesLock.Unlock()\n\tswitch r.Method {\n\tcase \"List\":\n\t\tlist := []os.FileInfo{}\n\t\tfor fn, fi := range fs.files {\n\t\t\tif filepath.Dir(fn) == r.Filepath {\n\t\t\t\tlist = append(list, fi)\n\t\t\t}\n\t\t}\n\t\treturn list, nil\n\tcase \"Stat\":\n\t\tfile, err := fs.fetch(r.Filepath)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn []os.FileInfo{file}, nil\n\tcase \"Readlink\":\n\t\tfile, err := fs.fetch(r.Filepath)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif file.symlink != \"\" {\n\t\t\tfile, err = fs.fetch(file.symlink)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn []os.FileInfo{file}, nil\n\t}\n\treturn nil, nil\n}\n\n// In memory file-system-y thing that the Hanlders live on\ntype root struct {\n\t*memFile\n\tfiles     map[string]*memFile\n\tfilesLock sync.Mutex\n}\n\nfunc (fs *root) fetch(path string) (*memFile, error) {\n\tif path == \"/\" {\n\t\treturn fs.memFile, nil\n\t}\n\tif file, ok := fs.files[path]; ok {\n\t\treturn file, nil\n\t}\n\treturn nil, os.ErrNotExist\n}\n\n// Implements os.FileInfo, Reader and Writer interfaces.\n// These are the 3 interfaces necessary for the Handlers.\ntype memFile struct {\n\tname        string\n\tmodtime     time.Time\n\tsymlink     string\n\tisdir       bool\n\tcontent     []byte\n\tcontentLock sync.RWMutex\n}\n\n// factory to make sure modtime is set\nfunc newMemFile(name string, isdir bool) *memFile {\n\treturn &memFile{\n\t\tname:    name,\n\t\tmodtime: time.Now(),\n\t\tisdir:   isdir,\n\t}\n}\n\n// Have memFile fulfill os.FileInfo interface\nfunc (f *memFile) Name() string { return filepath.Base(f.name) }\nfunc (f *memFile) Size() int64  { return int64(len(f.content)) }\nfunc (f *memFile) Mode() os.FileMode {\n\tret := os.FileMode(0644)\n\tif f.isdir {\n\t\tret = os.FileMode(0755) | os.ModeDir\n\t}\n\tif f.symlink != \"\" {\n\t\tret = os.FileMode(0777) | os.ModeSymlink\n\t}\n\treturn ret\n}\nfunc (f *memFile) ModTime() time.Time { return f.modtime }\nfunc (f *memFile) IsDir() bool        { return f.isdir }\nfunc (f *memFile) Sys() interface{} {\n\treturn fakeFileInfoSys()\n}\n\n// Read/Write\nfunc (f *memFile) ReaderAt() (io.ReaderAt, error) {\n\tif f.isdir {\n\t\treturn nil, os.ErrInvalid\n\t}\n\treturn bytes.NewReader(f.content), nil\n}\n\nfunc (f *memFile) WriterAt() (io.WriterAt, error) {\n\tif f.isdir {\n\t\treturn nil, os.ErrInvalid\n\t}\n\treturn f, nil\n}\nfunc (f *memFile) WriteAt(p []byte, off int64) (int, error) {\n\t// fmt.Println(string(p), off)\n\t// mimic write delays, should be optional\n\ttime.Sleep(time.Microsecond * time.Duration(len(p)))\n\tf.contentLock.Lock()\n\tdefer f.contentLock.Unlock()\n\tplen := len(p) + int(off)\n\tif plen >= len(f.content) {\n\t\tnc := make([]byte, plen)\n\t\tcopy(nc, f.content)\n\t\tf.content = nc\n\t}\n\tcopy(f.content[off:], p)\n\treturn len(p), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request-interfaces.go",
    "content": "package sftp\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\n// Interfaces are differentiated based on required returned values.\n// All input arguments are to be pulled from Request (the only arg).\n\n// FileReader should return an io.Reader for the filepath\ntype FileReader interface {\n\tFileread(Request) (io.ReaderAt, error)\n}\n\n// FileWriter should return an io.Writer for the filepath\ntype FileWriter interface {\n\tFilewrite(Request) (io.WriterAt, error)\n}\n\n// FileCmder should return an error (rename, remove, setstate, etc.)\ntype FileCmder interface {\n\tFilecmd(Request) error\n}\n\n// FileInfoer should return file listing info and errors (readdir, stat)\n// note stat requests would return a list of 1\ntype FileInfoer interface {\n\tFileinfo(Request) ([]os.FileInfo, error)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request-server.go",
    "content": "package sftp\n\nimport (\n\t\"encoding\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/pkg/errors\"\n)\n\nvar maxTxPacket uint32 = 1 << 15\n\ntype handleHandler func(string) string\n\n// Handlers contains the 4 SFTP server request handlers.\ntype Handlers struct {\n\tFileGet  FileReader\n\tFilePut  FileWriter\n\tFileCmd  FileCmder\n\tFileInfo FileInfoer\n}\n\n// RequestServer abstracts the sftp protocol with an http request-like protocol\ntype RequestServer struct {\n\tserverConn\n\tHandlers        Handlers\n\tpktChan         chan requestPacket\n\tpktMgr          packetManager\n\topenRequests    map[string]Request\n\topenRequestLock sync.RWMutex\n\thandleCount     int\n}\n\n// NewRequestServer creates/allocates/returns new RequestServer.\n// Normally there there will be one server per user-session.\nfunc NewRequestServer(rwc io.ReadWriteCloser, h Handlers) *RequestServer {\n\tsvrConn := serverConn{\n\t\tconn: conn{\n\t\t\tReader:      rwc,\n\t\t\tWriteCloser: rwc,\n\t\t},\n\t}\n\treturn &RequestServer{\n\t\tserverConn:   svrConn,\n\t\tHandlers:     h,\n\t\tpktChan:      make(chan requestPacket, sftpServerWorkerCount),\n\t\tpktMgr:       newPktMgr(&svrConn),\n\t\topenRequests: make(map[string]Request),\n\t}\n}\n\nfunc (rs *RequestServer) nextRequest(r Request) string {\n\trs.openRequestLock.Lock()\n\tdefer rs.openRequestLock.Unlock()\n\trs.handleCount++\n\thandle := strconv.Itoa(rs.handleCount)\n\trs.openRequests[handle] = r\n\treturn handle\n}\n\nfunc (rs *RequestServer) getRequest(handle string) (Request, bool) {\n\trs.openRequestLock.RLock()\n\tdefer rs.openRequestLock.RUnlock()\n\tr, ok := rs.openRequests[handle]\n\treturn r, ok\n}\n\nfunc (rs *RequestServer) closeRequest(handle string) {\n\trs.openRequestLock.Lock()\n\tdefer rs.openRequestLock.Unlock()\n\tif r, ok := rs.openRequests[handle]; ok {\n\t\tr.close()\n\t\tdelete(rs.openRequests, handle)\n\t}\n}\n\n// Close the read/write/closer to trigger exiting the main server loop\nfunc (rs *RequestServer) Close() error { return rs.conn.Close() }\n\n// Serve requests for user session\nfunc (rs *RequestServer) Serve() error {\n\tvar wg sync.WaitGroup\n\twg.Add(sftpServerWorkerCount)\n\tfor i := 0; i < sftpServerWorkerCount; i++ {\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tif err := rs.packetWorker(); err != nil {\n\t\t\t\trs.conn.Close() // shuts down recvPacket\n\t\t\t}\n\t\t}()\n\t}\n\n\tvar err error\n\tvar pkt requestPacket\n\tvar pktType uint8\n\tvar pktBytes []byte\n\tfor {\n\t\tpktType, pktBytes, err = rs.recvPacket()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tpkt, err = makePacket(rxPacket{fxp(pktType), pktBytes})\n\t\tif err != nil {\n\t\t\tdebug(\"makePacket err: %v\", err)\n\t\t\trs.conn.Close() // shuts down recvPacket\n\t\t\tbreak\n\t\t}\n\t\trs.pktMgr.incomingPacket(pkt)\n\t\trs.pktChan <- pkt\n\t}\n\n\tclose(rs.pktChan) // shuts down sftpServerWorkers\n\twg.Wait()         // wait for all workers to exit\n\trs.pktMgr.close() // shuts down packetManager\n\treturn err\n}\n\nfunc (rs *RequestServer) packetWorker() error {\n\tfor pkt := range rs.pktChan {\n\t\tvar rpkt responsePacket\n\t\tswitch pkt := pkt.(type) {\n\t\tcase *sshFxInitPacket:\n\t\t\trpkt = sshFxVersionPacket{sftpProtocolVersion, nil}\n\t\tcase *sshFxpClosePacket:\n\t\t\thandle := pkt.getHandle()\n\t\t\trs.closeRequest(handle)\n\t\t\trpkt = statusFromError(pkt, nil)\n\t\tcase *sshFxpRealpathPacket:\n\t\t\trpkt = cleanPath(pkt)\n\t\tcase isOpener:\n\t\t\thandle := rs.nextRequest(requestFromPacket(pkt))\n\t\t\trpkt = sshFxpHandlePacket{pkt.id(), handle}\n\t\tcase hasHandle:\n\t\t\thandle := pkt.getHandle()\n\t\t\trequest, ok := rs.getRequest(handle)\n\t\t\trequest.update(pkt)\n\t\t\tif !ok {\n\t\t\t\trpkt = statusFromError(pkt, syscall.EBADF)\n\t\t\t} else {\n\t\t\t\trpkt = rs.handle(request, pkt)\n\t\t\t}\n\t\tcase hasPath:\n\t\t\trequest := requestFromPacket(pkt)\n\t\t\trpkt = rs.handle(request, pkt)\n\t\tdefault:\n\t\t\treturn errors.Errorf(\"unexpected packet type %T\", pkt)\n\t\t}\n\n\t\terr := rs.sendPacket(rpkt)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc cleanPath(pkt *sshFxpRealpathPacket) responsePacket {\n\tpath := pkt.getPath()\n\tif !filepath.IsAbs(path) {\n\t\tpath = \"/\" + path\n\t} // all paths are absolute\n\n\tcleaned_path := filepath.Clean(path)\n\treturn &sshFxpNamePacket{\n\t\tID: pkt.id(),\n\t\tNameAttrs: []sshFxpNameAttr{{\n\t\t\tName:     cleaned_path,\n\t\t\tLongName: cleaned_path,\n\t\t\tAttrs:    emptyFileStat,\n\t\t}},\n\t}\n}\n\nfunc (rs *RequestServer) handle(request Request, pkt requestPacket) responsePacket {\n\t// fmt.Println(\"Request Method: \", request.Method)\n\trpkt, err := request.handle(rs.Handlers)\n\tif err != nil {\n\t\terr = errorAdapter(err)\n\t\trpkt = statusFromError(pkt, err)\n\t}\n\treturn rpkt\n}\n\n// Wrap underlying connection methods to use packetManager\nfunc (rs *RequestServer) sendPacket(m encoding.BinaryMarshaler) error {\n\tif pkt, ok := m.(responsePacket); ok {\n\t\trs.pktMgr.readyPacket(pkt)\n\t} else {\n\t\treturn errors.Errorf(\"unexpected packet type %T\", m)\n\t}\n\treturn nil\n}\n\nfunc (rs *RequestServer) sendError(p ider, err error) error {\n\treturn rs.sendPacket(statusFromError(p, err))\n}\n\n// os.ErrNotExist should convert to ssh_FX_NO_SUCH_FILE, but is not recognized\n// by statusFromError. So we convert to syscall.ENOENT which it does.\nfunc errorAdapter(err error) error {\n\tif err == os.ErrNotExist {\n\t\treturn syscall.ENOENT\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request-unix.go",
    "content": "// +build !windows\n\npackage sftp\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n)\n\nfunc fakeFileInfoSys() interface{} {\n\treturn &syscall.Stat_t{Uid: 65534, Gid: 65534}\n}\n\nfunc testOsSys(sys interface{}) error {\n\tfstat := sys.(*FileStat)\n\tif fstat.UID != uint32(65534) {\n\t\treturn errors.New(\"Uid failed to match.\")\n\t}\n\tif fstat.GID != uint32(65534) {\n\t\treturn errors.New(\"Gid failed to match:\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request.go",
    "content": "package sftp\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/pkg/errors\"\n)\n\n// Request contains the data and state for the incoming service request.\ntype Request struct {\n\t// Get, Put, SetStat, Stat, Rename, Remove\n\t// Rmdir, Mkdir, List, Readlink, Symlink\n\tMethod   string\n\tFilepath string\n\tAttrs    []byte // convert to sub-struct\n\tTarget   string // for renames and sym-links\n\t// packet data\n\tpkt_id  uint32\n\tpackets chan packet_data\n\t// reader/writer/readdir from handlers\n\tstateLock *sync.RWMutex\n\tstate     *state\n}\n\ntype state struct {\n\twriterAt io.WriterAt\n\treaderAt io.ReaderAt\n\tendofdir bool // need to track when to send EOF for readdir\n}\n\ntype packet_data struct {\n\tid     uint32\n\tdata   []byte\n\tlength uint32\n\toffset int64\n}\n\n// New Request initialized based on packet data\nfunc requestFromPacket(pkt hasPath) Request {\n\tmethod := requestMethod(pkt)\n\trequest := NewRequest(method, pkt.getPath())\n\trequest.pkt_id = pkt.id()\n\tswitch p := pkt.(type) {\n\tcase *sshFxpSetstatPacket:\n\t\trequest.Attrs = p.Attrs.([]byte)\n\tcase *sshFxpRenamePacket:\n\t\trequest.Target = filepath.Clean(p.Newpath)\n\tcase *sshFxpSymlinkPacket:\n\t\trequest.Target = filepath.Clean(p.Linkpath)\n\t}\n\treturn request\n}\n\n// NewRequest creates a new Request object.\nfunc NewRequest(method, path string) Request {\n\trequest := Request{Method: method, Filepath: filepath.Clean(path)}\n\trequest.packets = make(chan packet_data, sftpServerWorkerCount)\n\trequest.state = &state{}\n\trequest.stateLock = &sync.RWMutex{}\n\treturn request\n}\n\n// manage state\nfunc (r Request) setState(s interface{}) {\n\tr.stateLock.Lock()\n\tdefer r.stateLock.Unlock()\n\tswitch s := s.(type) {\n\tcase io.WriterAt:\n\t\tr.state.writerAt = s\n\tcase io.ReaderAt:\n\t\tr.state.readerAt = s\n\tcase bool:\n\t\tr.state.endofdir = s\n\t}\n}\n\nfunc (r Request) getWriter() io.WriterAt {\n\tr.stateLock.RLock()\n\tdefer r.stateLock.RUnlock()\n\treturn r.state.writerAt\n}\n\nfunc (r Request) getReader() io.ReaderAt {\n\tr.stateLock.RLock()\n\tdefer r.stateLock.RUnlock()\n\treturn r.state.readerAt\n}\n\nfunc (r Request) getEOD() bool {\n\tr.stateLock.RLock()\n\tdefer r.stateLock.RUnlock()\n\treturn r.state.endofdir\n}\n\n// Close reader/writer if possible\nfunc (r Request) close() {\n\trd := r.getReader()\n\tif c, ok := rd.(io.Closer); ok {\n\t\tc.Close()\n\t}\n\twt := r.getWriter()\n\tif c, ok := wt.(io.Closer); ok {\n\t\tc.Close()\n\t}\n}\n\n// push packet_data into fifo\nfunc (r Request) pushPacket(pd packet_data) {\n\tr.packets <- pd\n}\n\n// pop packet_data into fifo\nfunc (r *Request) popPacket() packet_data {\n\treturn <-r.packets\n}\n\n// called from worker to handle packet/request\nfunc (r Request) handle(handlers Handlers) (responsePacket, error) {\n\tvar err error\n\tvar rpkt responsePacket\n\tswitch r.Method {\n\tcase \"Get\":\n\t\trpkt, err = fileget(handlers.FileGet, r)\n\tcase \"Put\": // add \"Append\" to this to handle append only file writes\n\t\trpkt, err = fileput(handlers.FilePut, r)\n\tcase \"SetStat\", \"Rename\", \"Rmdir\", \"Mkdir\", \"Symlink\", \"Remove\":\n\t\trpkt, err = filecmd(handlers.FileCmd, r)\n\tcase \"List\", \"Stat\", \"Readlink\":\n\t\trpkt, err = fileinfo(handlers.FileInfo, r)\n\t}\n\treturn rpkt, err\n}\n\n// wrap FileReader handler\nfunc fileget(h FileReader, r Request) (responsePacket, error) {\n\tvar err error\n\treader := r.getReader()\n\tif reader == nil {\n\t\treader, err = h.Fileread(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr.setState(reader)\n\t}\n\n\tpd := r.popPacket()\n\tdata := make([]byte, clamp(pd.length, maxTxPacket))\n\tn, err := reader.ReadAt(data, pd.offset)\n\tif err != nil && (err != io.EOF || n == 0) {\n\t\treturn nil, err\n\t}\n\treturn &sshFxpDataPacket{\n\t\tID:     pd.id,\n\t\tLength: uint32(n),\n\t\tData:   data[:n],\n\t}, nil\n}\n\n// wrap FileWriter handler\nfunc fileput(h FileWriter, r Request) (responsePacket, error) {\n\tvar err error\n\twriter := r.getWriter()\n\tif writer == nil {\n\t\twriter, err = h.Filewrite(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr.setState(writer)\n\t}\n\n\tpd := r.popPacket()\n\t_, err = writer.WriteAt(pd.data, pd.offset)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &sshFxpStatusPacket{\n\t\tID: pd.id,\n\t\tStatusError: StatusError{\n\t\t\tCode: ssh_FX_OK,\n\t\t}}, nil\n}\n\n// wrap FileCmder handler\nfunc filecmd(h FileCmder, r Request) (responsePacket, error) {\n\terr := h.Filecmd(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &sshFxpStatusPacket{\n\t\tID: r.pkt_id,\n\t\tStatusError: StatusError{\n\t\t\tCode: ssh_FX_OK,\n\t\t}}, nil\n}\n\n// wrap FileInfoer handler\nfunc fileinfo(h FileInfoer, r Request) (responsePacket, error) {\n\tif r.getEOD() {\n\t\treturn nil, io.EOF\n\t}\n\tfinfo, err := h.Fileinfo(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch r.Method {\n\tcase \"List\":\n\t\tpd := r.popPacket()\n\t\tdirname := path.Base(r.Filepath)\n\t\tret := &sshFxpNamePacket{ID: pd.id}\n\t\tfor _, fi := range finfo {\n\t\t\tret.NameAttrs = append(ret.NameAttrs, sshFxpNameAttr{\n\t\t\t\tName:     fi.Name(),\n\t\t\t\tLongName: runLs(dirname, fi),\n\t\t\t\tAttrs:    []interface{}{fi},\n\t\t\t})\n\t\t}\n\t\tr.setState(true)\n\t\treturn ret, nil\n\tcase \"Stat\":\n\t\tif len(finfo) == 0 {\n\t\t\terr = &os.PathError{Op: \"stat\", Path: r.Filepath,\n\t\t\t\tErr: syscall.ENOENT}\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &sshFxpStatResponse{\n\t\t\tID:   r.pkt_id,\n\t\t\tinfo: finfo[0],\n\t\t}, nil\n\tcase \"Readlink\":\n\t\tif len(finfo) == 0 {\n\t\t\terr = &os.PathError{Op: \"readlink\", Path: r.Filepath,\n\t\t\t\tErr: syscall.ENOENT}\n\t\t\treturn nil, err\n\t\t}\n\t\tfilename := finfo[0].Name()\n\t\treturn &sshFxpNamePacket{\n\t\t\tID: r.pkt_id,\n\t\t\tNameAttrs: []sshFxpNameAttr{{\n\t\t\t\tName:     filename,\n\t\t\t\tLongName: filename,\n\t\t\t\tAttrs:    emptyFileStat,\n\t\t\t}},\n\t\t}, nil\n\t}\n\treturn nil, err\n}\n\n// file data for additional read/write packets\nfunc (r *Request) update(p hasHandle) error {\n\tpd := packet_data{id: p.id()}\n\tswitch p := p.(type) {\n\tcase *sshFxpReadPacket:\n\t\tr.Method = \"Get\"\n\t\tpd.length = p.Len\n\t\tpd.offset = int64(p.Offset)\n\tcase *sshFxpWritePacket:\n\t\tr.Method = \"Put\"\n\t\tpd.data = p.Data\n\t\tpd.length = p.Length\n\t\tpd.offset = int64(p.Offset)\n\tcase *sshFxpReaddirPacket:\n\t\tr.Method = \"List\"\n\tcase *sshFxpFsetstatPacket:\n\t\tr.Method = \"Setstat\"\n\t\tr.Attrs = p.Attrs.([]byte)\n\tcase *sshFxpFstatPacket:\n\t\tr.Method = \"Stat\"\n\tdefault:\n\t\treturn errors.Errorf(\"unexpected packet type %T\", p)\n\t}\n\tr.pushPacket(pd)\n\treturn nil\n}\n\n// init attributes of request object from packet data\nfunc requestMethod(p hasPath) (method string) {\n\tswitch p.(type) {\n\tcase *sshFxpOpenPacket, *sshFxpOpendirPacket:\n\t\tmethod = \"Open\"\n\tcase *sshFxpSetstatPacket:\n\t\tmethod = \"Setstat\"\n\tcase *sshFxpRenamePacket:\n\t\tmethod = \"Rename\"\n\tcase *sshFxpSymlinkPacket:\n\t\tmethod = \"Symlink\"\n\tcase *sshFxpRemovePacket:\n\t\tmethod = \"Remove\"\n\tcase *sshFxpStatPacket, *sshFxpLstatPacket:\n\t\tmethod = \"Stat\"\n\tcase *sshFxpRmdirPacket:\n\t\tmethod = \"Rmdir\"\n\tcase *sshFxpReadlinkPacket:\n\t\tmethod = \"Readlink\"\n\tcase *sshFxpMkdirPacket:\n\t\tmethod = \"Mkdir\"\n\t}\n\treturn method\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/request_windows.go",
    "content": "package sftp\n\nimport \"syscall\"\n\nfunc fakeFileInfoSys() interface{} {\n\treturn syscall.Win32FileAttributeData{}\n}\n\nfunc testOsSys(sys interface{}) error {\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server.go",
    "content": "package sftp\n\n// sftp server counterpart\n\nimport (\n\t\"encoding\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/pkg/errors\"\n)\n\nconst (\n\tsftpServerWorkerCount = 8\n)\n\n// Server is an SSH File Transfer Protocol (sftp) server.\n// This is intended to provide the sftp subsystem to an ssh server daemon.\n// This implementation currently supports most of sftp server protocol version 3,\n// as specified at http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02\ntype Server struct {\n\tserverConn\n\tdebugStream   io.Writer\n\treadOnly      bool\n\tpktMgr        packetManager\n\topenFiles     map[string]*os.File\n\topenFilesLock sync.RWMutex\n\thandleCount   int\n\tmaxTxPacket   uint32\n}\n\nfunc (svr *Server) nextHandle(f *os.File) string {\n\tsvr.openFilesLock.Lock()\n\tdefer svr.openFilesLock.Unlock()\n\tsvr.handleCount++\n\thandle := strconv.Itoa(svr.handleCount)\n\tsvr.openFiles[handle] = f\n\treturn handle\n}\n\nfunc (svr *Server) closeHandle(handle string) error {\n\tsvr.openFilesLock.Lock()\n\tdefer svr.openFilesLock.Unlock()\n\tif f, ok := svr.openFiles[handle]; ok {\n\t\tdelete(svr.openFiles, handle)\n\t\treturn f.Close()\n\t}\n\n\treturn syscall.EBADF\n}\n\nfunc (svr *Server) getHandle(handle string) (*os.File, bool) {\n\tsvr.openFilesLock.RLock()\n\tdefer svr.openFilesLock.RUnlock()\n\tf, ok := svr.openFiles[handle]\n\treturn f, ok\n}\n\ntype serverRespondablePacket interface {\n\tencoding.BinaryUnmarshaler\n\tid() uint32\n\trespond(svr *Server) error\n}\n\n// NewServer creates a new Server instance around the provided streams, serving\n// content from the root of the filesystem.  Optionally, ServerOption\n// functions may be specified to further configure the Server.\n//\n// A subsequent call to Serve() is required to begin serving files over SFTP.\nfunc NewServer(rwc io.ReadWriteCloser, options ...ServerOption) (*Server, error) {\n\tsvrConn := serverConn{\n\t\tconn: conn{\n\t\t\tReader:      rwc,\n\t\t\tWriteCloser: rwc,\n\t\t},\n\t}\n\ts := &Server{\n\t\tserverConn:  svrConn,\n\t\tdebugStream: ioutil.Discard,\n\t\tpktMgr:      newPktMgr(&svrConn),\n\t\topenFiles:   make(map[string]*os.File),\n\t\tmaxTxPacket: 1 << 15,\n\t}\n\n\tfor _, o := range options {\n\t\tif err := o(s); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\n// A ServerOption is a function which applies configuration to a Server.\ntype ServerOption func(*Server) error\n\n// WithDebug enables Server debugging output to the supplied io.Writer.\nfunc WithDebug(w io.Writer) ServerOption {\n\treturn func(s *Server) error {\n\t\ts.debugStream = w\n\t\treturn nil\n\t}\n}\n\n// ReadOnly configures a Server to serve files in read-only mode.\nfunc ReadOnly() ServerOption {\n\treturn func(s *Server) error {\n\t\ts.readOnly = true\n\t\treturn nil\n\t}\n}\n\ntype rxPacket struct {\n\tpktType  fxp\n\tpktBytes []byte\n}\n\n// Up to N parallel servers\nfunc (svr *Server) sftpServerWorker(pktChan chan requestPacket) error {\n\tfor pkt := range pktChan {\n\n\t\t// readonly checks\n\t\treadonly := true\n\t\tswitch pkt := pkt.(type) {\n\t\tcase notReadOnly:\n\t\t\treadonly = false\n\t\tcase *sshFxpOpenPacket:\n\t\t\treadonly = pkt.readonly()\n\t\tcase *sshFxpExtendedPacket:\n\t\t\treadonly = pkt.SpecificPacket.readonly()\n\t\t}\n\n\t\t// If server is operating read-only and a write operation is requested,\n\t\t// return permission denied\n\t\tif !readonly && svr.readOnly {\n\t\t\tif err := svr.sendError(pkt, syscall.EPERM); err != nil {\n\t\t\t\treturn errors.Wrap(err, \"failed to send read only packet response\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := handlePacket(svr, pkt); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc handlePacket(s *Server, p interface{}) error {\n\tswitch p := p.(type) {\n\tcase *sshFxInitPacket:\n\t\treturn s.sendPacket(sshFxVersionPacket{sftpProtocolVersion, nil})\n\tcase *sshFxpStatPacket:\n\t\t// stat the requested file\n\t\tinfo, err := os.Stat(p.Path)\n\t\tif err != nil {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\t\treturn s.sendPacket(sshFxpStatResponse{\n\t\t\tID:   p.ID,\n\t\t\tinfo: info,\n\t\t})\n\tcase *sshFxpLstatPacket:\n\t\t// stat the requested file\n\t\tinfo, err := os.Lstat(p.Path)\n\t\tif err != nil {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\t\treturn s.sendPacket(sshFxpStatResponse{\n\t\t\tID:   p.ID,\n\t\t\tinfo: info,\n\t\t})\n\tcase *sshFxpFstatPacket:\n\t\tf, ok := s.getHandle(p.Handle)\n\t\tif !ok {\n\t\t\treturn s.sendError(p, syscall.EBADF)\n\t\t}\n\n\t\tinfo, err := f.Stat()\n\t\tif err != nil {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\n\t\treturn s.sendPacket(sshFxpStatResponse{\n\t\t\tID:   p.ID,\n\t\t\tinfo: info,\n\t\t})\n\tcase *sshFxpMkdirPacket:\n\t\t// TODO FIXME: ignore flags field\n\t\terr := os.Mkdir(p.Path, 0755)\n\t\treturn s.sendError(p, err)\n\tcase *sshFxpRmdirPacket:\n\t\terr := os.Remove(p.Path)\n\t\treturn s.sendError(p, err)\n\tcase *sshFxpRemovePacket:\n\t\terr := os.Remove(p.Filename)\n\t\treturn s.sendError(p, err)\n\tcase *sshFxpRenamePacket:\n\t\terr := os.Rename(p.Oldpath, p.Newpath)\n\t\treturn s.sendError(p, err)\n\tcase *sshFxpSymlinkPacket:\n\t\terr := os.Symlink(p.Targetpath, p.Linkpath)\n\t\treturn s.sendError(p, err)\n\tcase *sshFxpClosePacket:\n\t\treturn s.sendError(p, s.closeHandle(p.Handle))\n\tcase *sshFxpReadlinkPacket:\n\t\tf, err := os.Readlink(p.Path)\n\t\tif err != nil {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\n\t\treturn s.sendPacket(sshFxpNamePacket{\n\t\t\tID: p.ID,\n\t\t\tNameAttrs: []sshFxpNameAttr{{\n\t\t\t\tName:     f,\n\t\t\t\tLongName: f,\n\t\t\t\tAttrs:    emptyFileStat,\n\t\t\t}},\n\t\t})\n\n\tcase *sshFxpRealpathPacket:\n\t\tf, err := filepath.Abs(p.Path)\n\t\tif err != nil {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\t\tf = filepath.Clean(f)\n\t\tf = filepath.ToSlash(f) // make path more Unix like on windows servers\n\t\treturn s.sendPacket(sshFxpNamePacket{\n\t\t\tID: p.ID,\n\t\t\tNameAttrs: []sshFxpNameAttr{{\n\t\t\t\tName:     f,\n\t\t\t\tLongName: f,\n\t\t\t\tAttrs:    emptyFileStat,\n\t\t\t}},\n\t\t})\n\tcase *sshFxpOpendirPacket:\n\t\treturn sshFxpOpenPacket{\n\t\t\tID:     p.ID,\n\t\t\tPath:   p.Path,\n\t\t\tPflags: ssh_FXF_READ,\n\t\t}.respond(s)\n\tcase *sshFxpReadPacket:\n\t\tf, ok := s.getHandle(p.Handle)\n\t\tif !ok {\n\t\t\treturn s.sendError(p, syscall.EBADF)\n\t\t}\n\n\t\tdata := make([]byte, clamp(p.Len, s.maxTxPacket))\n\t\tn, err := f.ReadAt(data, int64(p.Offset))\n\t\tif err != nil && (err != io.EOF || n == 0) {\n\t\t\treturn s.sendError(p, err)\n\t\t}\n\t\treturn s.sendPacket(sshFxpDataPacket{\n\t\t\tID:     p.ID,\n\t\t\tLength: uint32(n),\n\t\t\tData:   data[:n],\n\t\t})\n\tcase *sshFxpWritePacket:\n\t\tf, ok := s.getHandle(p.Handle)\n\t\tif !ok {\n\t\t\treturn s.sendError(p, syscall.EBADF)\n\t\t}\n\n\t\t_, err := f.WriteAt(p.Data, int64(p.Offset))\n\t\treturn s.sendError(p, err)\n\tcase serverRespondablePacket:\n\t\terr := p.respond(s)\n\t\treturn errors.Wrap(err, \"pkt.respond failed\")\n\tdefault:\n\t\treturn errors.Errorf(\"unexpected packet type %T\", p)\n\t}\n}\n\ntype requestChan chan requestPacket\n\nfunc (svr *Server) sftpServerWorkers(worker func(requestChan)) requestChan {\n\n\trwChan := make(chan requestPacket, sftpServerWorkerCount)\n\tfor i := 0; i < sftpServerWorkerCount; i++ {\n\t\tgo worker(rwChan)\n\t}\n\n\tcmdChan := make(chan requestPacket)\n\tgo worker(cmdChan)\n\n\tpktChan := make(chan requestPacket, sftpServerWorkerCount)\n\tgo func() {\n\t\t// start with cmdChan\n\t\tcurChan := cmdChan\n\t\tfor pkt := range pktChan {\n\t\t\t// on file open packet, switch to rwChan\n\t\t\tswitch pkt.(type) {\n\t\t\tcase *sshFxpOpenPacket:\n\t\t\t\tcurChan = rwChan\n\t\t\t// on file close packet, switch back to cmdChan\n\t\t\t// after waiting for any reads/writes to finish\n\t\t\tcase *sshFxpClosePacket:\n\t\t\t\t// wait for rwChan to finish\n\t\t\t\tsvr.pktMgr.working.Wait()\n\t\t\t\t// stop using rwChan\n\t\t\t\tcurChan = cmdChan\n\t\t\t}\n\t\t\tsvr.pktMgr.incomingPacket(pkt)\n\t\t\tcurChan <- pkt\n\t\t}\n\t\tclose(rwChan)\n\t\tclose(cmdChan)\n\t}()\n\n\treturn pktChan\n}\n\n// Serve serves SFTP connections until the streams stop or the SFTP subsystem\n// is stopped.\nfunc (svr *Server) Serve() error {\n\tvar wg sync.WaitGroup\n\twg.Add(1)\n\tworkerFunc := func(ch requestChan) {\n\t\twg.Add(1)\n\t\tdefer wg.Done()\n\t\tif err := svr.sftpServerWorker(ch); err != nil {\n\t\t\tsvr.conn.Close() // shuts down recvPacket\n\t\t}\n\t}\n\tpktChan := svr.sftpServerWorkers(workerFunc)\n\n\tvar err error\n\tvar pkt requestPacket\n\tvar pktType uint8\n\tvar pktBytes []byte\n\tfor {\n\t\tpktType, pktBytes, err = svr.recvPacket()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\n\t\tpkt, err = makePacket(rxPacket{fxp(pktType), pktBytes})\n\t\tif err != nil {\n\t\t\tdebug(\"makePacket err: %v\", err)\n\t\t\tsvr.conn.Close() // shuts down recvPacket\n\t\t\tbreak\n\t\t}\n\n\t\tpktChan <- pkt\n\t}\n\twg.Done()\n\n\tclose(pktChan)     // shuts down sftpServerWorkers\n\twg.Wait()          // wait for all workers to exit\n\tsvr.pktMgr.close() // shuts down packetManager\n\n\t// close any still-open files\n\tfor handle, file := range svr.openFiles {\n\t\tfmt.Fprintf(svr.debugStream, \"sftp server file with handle %q left open: %v\\n\", handle, file.Name())\n\t\tfile.Close()\n\t}\n\treturn err // error from recvPacket\n}\n\n// Wrap underlying connection methods to use packetManager\nfunc (svr *Server) sendPacket(m encoding.BinaryMarshaler) error {\n\tif pkt, ok := m.(responsePacket); ok {\n\t\tsvr.pktMgr.readyPacket(pkt)\n\t} else {\n\t\treturn errors.Errorf(\"unexpected packet type %T\", m)\n\t}\n\treturn nil\n}\n\nfunc (svr *Server) sendError(p ider, err error) error {\n\treturn svr.sendPacket(statusFromError(p, err))\n}\n\ntype ider interface {\n\tid() uint32\n}\n\n// The init packet has no ID, so we just return a zero-value ID\nfunc (p sshFxInitPacket) id() uint32 { return 0 }\n\ntype sshFxpStatResponse struct {\n\tID   uint32\n\tinfo os.FileInfo\n}\n\nfunc (p sshFxpStatResponse) MarshalBinary() ([]byte, error) {\n\tb := []byte{ssh_FXP_ATTRS}\n\tb = marshalUint32(b, p.ID)\n\tb = marshalFileInfo(b, p.info)\n\treturn b, nil\n}\n\nvar emptyFileStat = []interface{}{uint32(0)}\n\nfunc (p sshFxpOpenPacket) readonly() bool {\n\treturn !p.hasPflags(ssh_FXF_WRITE)\n}\n\nfunc (p sshFxpOpenPacket) hasPflags(flags ...uint32) bool {\n\tfor _, f := range flags {\n\t\tif p.Pflags&f == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (p sshFxpOpenPacket) respond(svr *Server) error {\n\tvar osFlags int\n\tif p.hasPflags(ssh_FXF_READ, ssh_FXF_WRITE) {\n\t\tosFlags |= os.O_RDWR\n\t} else if p.hasPflags(ssh_FXF_WRITE) {\n\t\tosFlags |= os.O_WRONLY\n\t} else if p.hasPflags(ssh_FXF_READ) {\n\t\tosFlags |= os.O_RDONLY\n\t} else {\n\t\t// how are they opening?\n\t\treturn svr.sendError(p, syscall.EINVAL)\n\t}\n\n\tif p.hasPflags(ssh_FXF_APPEND) {\n\t\tosFlags |= os.O_APPEND\n\t}\n\tif p.hasPflags(ssh_FXF_CREAT) {\n\t\tosFlags |= os.O_CREATE\n\t}\n\tif p.hasPflags(ssh_FXF_TRUNC) {\n\t\tosFlags |= os.O_TRUNC\n\t}\n\tif p.hasPflags(ssh_FXF_EXCL) {\n\t\tosFlags |= os.O_EXCL\n\t}\n\n\tf, err := os.OpenFile(p.Path, osFlags, 0644)\n\tif err != nil {\n\t\treturn svr.sendError(p, err)\n\t}\n\n\thandle := svr.nextHandle(f)\n\treturn svr.sendPacket(sshFxpHandlePacket{p.ID, handle})\n}\n\nfunc (p sshFxpReaddirPacket) respond(svr *Server) error {\n\tf, ok := svr.getHandle(p.Handle)\n\tif !ok {\n\t\treturn svr.sendError(p, syscall.EBADF)\n\t}\n\n\tdirname := f.Name()\n\tdirents, err := f.Readdir(128)\n\tif err != nil {\n\t\treturn svr.sendError(p, err)\n\t}\n\n\tret := sshFxpNamePacket{ID: p.ID}\n\tfor _, dirent := range dirents {\n\t\tret.NameAttrs = append(ret.NameAttrs, sshFxpNameAttr{\n\t\t\tName:     dirent.Name(),\n\t\t\tLongName: runLs(dirname, dirent),\n\t\t\tAttrs:    []interface{}{dirent},\n\t\t})\n\t}\n\treturn svr.sendPacket(ret)\n}\n\nfunc (p sshFxpSetstatPacket) respond(svr *Server) error {\n\t// additional unmarshalling is required for each possibility here\n\tb := p.Attrs.([]byte)\n\tvar err error\n\n\tdebug(\"setstat name \\\"%s\\\"\", p.Path)\n\tif (p.Flags & ssh_FILEXFER_ATTR_SIZE) != 0 {\n\t\tvar size uint64\n\t\tif size, b, err = unmarshalUint64Safe(b); err == nil {\n\t\t\terr = os.Truncate(p.Path, int64(size))\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_PERMISSIONS) != 0 {\n\t\tvar mode uint32\n\t\tif mode, b, err = unmarshalUint32Safe(b); err == nil {\n\t\t\terr = os.Chmod(p.Path, os.FileMode(mode))\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_ACMODTIME) != 0 {\n\t\tvar atime uint32\n\t\tvar mtime uint32\n\t\tif atime, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else if mtime, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else {\n\t\t\tatimeT := time.Unix(int64(atime), 0)\n\t\t\tmtimeT := time.Unix(int64(mtime), 0)\n\t\t\terr = os.Chtimes(p.Path, atimeT, mtimeT)\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_UIDGID) != 0 {\n\t\tvar uid uint32\n\t\tvar gid uint32\n\t\tif uid, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else if gid, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else {\n\t\t\terr = os.Chown(p.Path, int(uid), int(gid))\n\t\t}\n\t}\n\n\treturn svr.sendError(p, err)\n}\n\nfunc (p sshFxpFsetstatPacket) respond(svr *Server) error {\n\tf, ok := svr.getHandle(p.Handle)\n\tif !ok {\n\t\treturn svr.sendError(p, syscall.EBADF)\n\t}\n\n\t// additional unmarshalling is required for each possibility here\n\tb := p.Attrs.([]byte)\n\tvar err error\n\n\tdebug(\"fsetstat name \\\"%s\\\"\", f.Name())\n\tif (p.Flags & ssh_FILEXFER_ATTR_SIZE) != 0 {\n\t\tvar size uint64\n\t\tif size, b, err = unmarshalUint64Safe(b); err == nil {\n\t\t\terr = f.Truncate(int64(size))\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_PERMISSIONS) != 0 {\n\t\tvar mode uint32\n\t\tif mode, b, err = unmarshalUint32Safe(b); err == nil {\n\t\t\terr = f.Chmod(os.FileMode(mode))\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_ACMODTIME) != 0 {\n\t\tvar atime uint32\n\t\tvar mtime uint32\n\t\tif atime, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else if mtime, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else {\n\t\t\tatimeT := time.Unix(int64(atime), 0)\n\t\t\tmtimeT := time.Unix(int64(mtime), 0)\n\t\t\terr = os.Chtimes(f.Name(), atimeT, mtimeT)\n\t\t}\n\t}\n\tif (p.Flags & ssh_FILEXFER_ATTR_UIDGID) != 0 {\n\t\tvar uid uint32\n\t\tvar gid uint32\n\t\tif uid, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else if gid, b, err = unmarshalUint32Safe(b); err != nil {\n\t\t} else {\n\t\t\terr = f.Chown(int(uid), int(gid))\n\t\t}\n\t}\n\n\treturn svr.sendError(p, err)\n}\n\n// translateErrno translates a syscall error number to a SFTP error code.\nfunc translateErrno(errno syscall.Errno) uint32 {\n\tswitch errno {\n\tcase 0:\n\t\treturn ssh_FX_OK\n\tcase syscall.ENOENT:\n\t\treturn ssh_FX_NO_SUCH_FILE\n\tcase syscall.EPERM:\n\t\treturn ssh_FX_PERMISSION_DENIED\n\t}\n\n\treturn ssh_FX_FAILURE\n}\n\nfunc statusFromError(p ider, err error) sshFxpStatusPacket {\n\tret := sshFxpStatusPacket{\n\t\tID: p.id(),\n\t\tStatusError: StatusError{\n\t\t\t// ssh_FX_OK                = 0\n\t\t\t// ssh_FX_EOF               = 1\n\t\t\t// ssh_FX_NO_SUCH_FILE      = 2 ENOENT\n\t\t\t// ssh_FX_PERMISSION_DENIED = 3\n\t\t\t// ssh_FX_FAILURE           = 4\n\t\t\t// ssh_FX_BAD_MESSAGE       = 5\n\t\t\t// ssh_FX_NO_CONNECTION     = 6\n\t\t\t// ssh_FX_CONNECTION_LOST   = 7\n\t\t\t// ssh_FX_OP_UNSUPPORTED    = 8\n\t\t\tCode: ssh_FX_OK,\n\t\t},\n\t}\n\tif err != nil {\n\t\tdebug(\"statusFromError: error is %T %#v\", err, err)\n\t\tret.StatusError.Code = ssh_FX_FAILURE\n\t\tret.StatusError.msg = err.Error()\n\t\tif err == io.EOF {\n\t\t\tret.StatusError.Code = ssh_FX_EOF\n\t\t} else if errno, ok := err.(syscall.Errno); ok {\n\t\t\tret.StatusError.Code = translateErrno(errno)\n\t\t} else if pathError, ok := err.(*os.PathError); ok {\n\t\t\tdebug(\"statusFromError: error is %T %#v\", pathError.Err, pathError.Err)\n\t\t\tif errno, ok := pathError.Err.(syscall.Errno); ok {\n\t\t\t\tret.StatusError.Code = translateErrno(errno)\n\t\t\t}\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc clamp(v, max uint32) uint32 {\n\tif v > max {\n\t\treturn max\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_standalone/main.go",
    "content": "package main\n\n// small wrapper around sftp server that allows it to be used as a separate process subsystem call by the ssh server.\n// in practice this will statically link; however this allows unit testing from the sftp client.\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\n\t\"github.com/pkg/sftp\"\n)\n\nfunc main() {\n\tvar (\n\t\treadOnly    bool\n\t\tdebugStderr bool\n\t\tdebugLevel  string\n\t\toptions     []sftp.ServerOption\n\t)\n\n\tflag.BoolVar(&readOnly, \"R\", false, \"read-only server\")\n\tflag.BoolVar(&debugStderr, \"e\", false, \"debug to stderr\")\n\tflag.StringVar(&debugLevel, \"l\", \"none\", \"debug level (ignored)\")\n\tflag.Parse()\n\n\tdebugStream := ioutil.Discard\n\tif debugStderr {\n\t\tdebugStream = os.Stderr\n\t}\n\toptions = append(options, sftp.WithDebug(debugStream))\n\n\tif readOnly {\n\t\toptions = append(options, sftp.ReadOnly())\n\t}\n\n\tsvr, _ := sftp.NewServer(\n\t\tstruct {\n\t\t\tio.Reader\n\t\t\tio.WriteCloser\n\t\t}{os.Stdin,\n\t\t\tos.Stdout,\n\t\t},\n\t\toptions...,\n\t)\n\tif err := svr.Serve(); err != nil {\n\t\tfmt.Fprintf(debugStream, \"sftp server completed with error: %v\", err)\n\t\tos.Exit(1)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_statvfs_darwin.go",
    "content": "package sftp\n\nimport (\n\t\"syscall\"\n)\n\nfunc statvfsFromStatfst(stat *syscall.Statfs_t) (*StatVFS, error) {\n\treturn &StatVFS{\n\t\tBsize:   uint64(stat.Bsize),\n\t\tFrsize:  uint64(stat.Bsize), // fragment size is a linux thing; use block size here\n\t\tBlocks:  stat.Blocks,\n\t\tBfree:   stat.Bfree,\n\t\tBavail:  stat.Bavail,\n\t\tFiles:   stat.Files,\n\t\tFfree:   stat.Ffree,\n\t\tFavail:  stat.Ffree,                                                      // not sure how to calculate Favail\n\t\tFsid:    uint64(uint64(stat.Fsid.Val[1])<<32 | uint64(stat.Fsid.Val[0])), // endianness?\n\t\tFlag:    uint64(stat.Flags),                                              // assuming POSIX?\n\t\tNamemax: 1024,                                                            // man 2 statfs shows: #define MAXPATHLEN      1024\n\t}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_statvfs_impl.go",
    "content": "// +build darwin linux,!gccgo\n\n// fill in statvfs structure with OS specific values\n// Statfs_t is different per-kernel, and only exists on some unixes (not Solaris for instance)\n\npackage sftp\n\nimport (\n\t\"syscall\"\n)\n\nfunc (p sshFxpExtendedPacketStatVFS) respond(svr *Server) error {\n\tstat := &syscall.Statfs_t{}\n\tif err := syscall.Statfs(p.Path, stat); err != nil {\n\t\treturn svr.sendPacket(statusFromError(p, err))\n\t}\n\n\tretPkt, err := statvfsFromStatfst(stat)\n\tif err != nil {\n\t\treturn svr.sendPacket(statusFromError(p, err))\n\t}\n\tretPkt.ID = p.ID\n\n\treturn svr.sendPacket(retPkt)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_statvfs_linux.go",
    "content": "// +build !gccgo,linux\n\npackage sftp\n\nimport (\n\t\"syscall\"\n)\n\nfunc statvfsFromStatfst(stat *syscall.Statfs_t) (*StatVFS, error) {\n\treturn &StatVFS{\n\t\tBsize:   uint64(stat.Bsize),\n\t\tFrsize:  uint64(stat.Frsize),\n\t\tBlocks:  stat.Blocks,\n\t\tBfree:   stat.Bfree,\n\t\tBavail:  stat.Bavail,\n\t\tFiles:   stat.Files,\n\t\tFfree:   stat.Ffree,\n\t\tFavail:  stat.Ffree,         // not sure how to calculate Favail\n\t\tFlag:    uint64(stat.Flags), // assuming POSIX?\n\t\tNamemax: uint64(stat.Namelen),\n\t}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_statvfs_stubs.go",
    "content": "// +build !darwin,!linux gccgo\n\npackage sftp\n\nimport (\n\t\"syscall\"\n)\n\nfunc (p sshFxpExtendedPacketStatVFS) respond(svr *Server) error {\n\treturn syscall.ENOTSUP\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_stubs.go",
    "content": "// +build !cgo,!plan9 windows android\n\npackage sftp\n\nimport (\n\t\"os\"\n\t\"path\"\n)\n\nfunc runLs(dirname string, dirent os.FileInfo) string {\n\treturn path.Join(dirname, dirent.Name())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/server_unix.go",
    "content": "// +build darwin dragonfly freebsd !android,linux netbsd openbsd solaris\n// +build cgo\n\npackage sftp\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"syscall\"\n\t\"time\"\n)\n\nfunc runLsTypeWord(dirent os.FileInfo) string {\n\t// find first character, the type char\n\t// b     Block special file.\n\t// c     Character special file.\n\t// d     Directory.\n\t// l     Symbolic link.\n\t// s     Socket link.\n\t// p     FIFO.\n\t// -     Regular file.\n\ttc := '-'\n\tmode := dirent.Mode()\n\tif (mode & os.ModeDir) != 0 {\n\t\ttc = 'd'\n\t} else if (mode & os.ModeDevice) != 0 {\n\t\ttc = 'b'\n\t\tif (mode & os.ModeCharDevice) != 0 {\n\t\t\ttc = 'c'\n\t\t}\n\t} else if (mode & os.ModeSymlink) != 0 {\n\t\ttc = 'l'\n\t} else if (mode & os.ModeSocket) != 0 {\n\t\ttc = 's'\n\t} else if (mode & os.ModeNamedPipe) != 0 {\n\t\ttc = 'p'\n\t}\n\n\t// owner\n\torc := '-'\n\tif (mode & 0400) != 0 {\n\t\torc = 'r'\n\t}\n\towc := '-'\n\tif (mode & 0200) != 0 {\n\t\towc = 'w'\n\t}\n\toxc := '-'\n\tox := (mode & 0100) != 0\n\tsetuid := (mode & os.ModeSetuid) != 0\n\tif ox && setuid {\n\t\toxc = 's'\n\t} else if setuid {\n\t\toxc = 'S'\n\t} else if ox {\n\t\toxc = 'x'\n\t}\n\n\t// group\n\tgrc := '-'\n\tif (mode & 040) != 0 {\n\t\tgrc = 'r'\n\t}\n\tgwc := '-'\n\tif (mode & 020) != 0 {\n\t\tgwc = 'w'\n\t}\n\tgxc := '-'\n\tgx := (mode & 010) != 0\n\tsetgid := (mode & os.ModeSetgid) != 0\n\tif gx && setgid {\n\t\tgxc = 's'\n\t} else if setgid {\n\t\tgxc = 'S'\n\t} else if gx {\n\t\tgxc = 'x'\n\t}\n\n\t// all / others\n\tarc := '-'\n\tif (mode & 04) != 0 {\n\t\tarc = 'r'\n\t}\n\tawc := '-'\n\tif (mode & 02) != 0 {\n\t\tawc = 'w'\n\t}\n\taxc := '-'\n\tax := (mode & 01) != 0\n\tsticky := (mode & os.ModeSticky) != 0\n\tif ax && sticky {\n\t\taxc = 't'\n\t} else if sticky {\n\t\taxc = 'T'\n\t} else if ax {\n\t\taxc = 'x'\n\t}\n\n\treturn fmt.Sprintf(\"%c%c%c%c%c%c%c%c%c%c\", tc, orc, owc, oxc, grc, gwc, gxc, arc, awc, axc)\n}\n\nfunc runLsStatt(dirname string, dirent os.FileInfo, statt *syscall.Stat_t) string {\n\t// example from openssh sftp server:\n\t// crw-rw-rw-    1 root     wheel           0 Jul 31 20:52 ttyvd\n\t// format:\n\t// {directory / char device / etc}{rwxrwxrwx}  {number of links} owner group size month day [time (this year) | year (otherwise)] name\n\n\ttypeword := runLsTypeWord(dirent)\n\tnumLinks := statt.Nlink\n\tuid := statt.Uid\n\tgid := statt.Gid\n\tusername := fmt.Sprintf(\"%d\", uid)\n\tgroupname := fmt.Sprintf(\"%d\", gid)\n\t// TODO FIXME: uid -> username, gid -> groupname lookup for ls -l format output\n\n\tmtime := dirent.ModTime()\n\tmonthStr := mtime.Month().String()[0:3]\n\tday := mtime.Day()\n\tyear := mtime.Year()\n\tnow := time.Now()\n\tisOld := mtime.Before(now.Add(-time.Hour * 24 * 365 / 2))\n\n\tyearOrTime := fmt.Sprintf(\"%02d:%02d\", mtime.Hour(), mtime.Minute())\n\tif isOld {\n\t\tyearOrTime = fmt.Sprintf(\"%d\", year)\n\t}\n\n\treturn fmt.Sprintf(\"%s %4d %-8s %-8s %8d %s %2d %5s %s\", typeword, numLinks, username, groupname, dirent.Size(), monthStr, day, yearOrTime, dirent.Name())\n}\n\n// ls -l style output for a file, which is in the 'long output' section of a readdir response packet\n// this is a very simple (lazy) implementation, just enough to look almost like openssh in a few basic cases\nfunc runLs(dirname string, dirent os.FileInfo) string {\n\tdsys := dirent.Sys()\n\tif dsys == nil {\n\t} else if statt, ok := dsys.(*syscall.Stat_t); !ok {\n\t} else {\n\t\treturn runLsStatt(dirname, dirent, statt)\n\t}\n\n\treturn path.Join(dirname, dirent.Name())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/pkg/sftp/sftp.go",
    "content": "// Package sftp implements the SSH File Transfer Protocol as described in\n// https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt\npackage sftp\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pkg/errors\"\n)\n\nconst (\n\tssh_FXP_INIT           = 1\n\tssh_FXP_VERSION        = 2\n\tssh_FXP_OPEN           = 3\n\tssh_FXP_CLOSE          = 4\n\tssh_FXP_READ           = 5\n\tssh_FXP_WRITE          = 6\n\tssh_FXP_LSTAT          = 7\n\tssh_FXP_FSTAT          = 8\n\tssh_FXP_SETSTAT        = 9\n\tssh_FXP_FSETSTAT       = 10\n\tssh_FXP_OPENDIR        = 11\n\tssh_FXP_READDIR        = 12\n\tssh_FXP_REMOVE         = 13\n\tssh_FXP_MKDIR          = 14\n\tssh_FXP_RMDIR          = 15\n\tssh_FXP_REALPATH       = 16\n\tssh_FXP_STAT           = 17\n\tssh_FXP_RENAME         = 18\n\tssh_FXP_READLINK       = 19\n\tssh_FXP_SYMLINK        = 20\n\tssh_FXP_STATUS         = 101\n\tssh_FXP_HANDLE         = 102\n\tssh_FXP_DATA           = 103\n\tssh_FXP_NAME           = 104\n\tssh_FXP_ATTRS          = 105\n\tssh_FXP_EXTENDED       = 200\n\tssh_FXP_EXTENDED_REPLY = 201\n)\n\nconst (\n\tssh_FX_OK                = 0\n\tssh_FX_EOF               = 1\n\tssh_FX_NO_SUCH_FILE      = 2\n\tssh_FX_PERMISSION_DENIED = 3\n\tssh_FX_FAILURE           = 4\n\tssh_FX_BAD_MESSAGE       = 5\n\tssh_FX_NO_CONNECTION     = 6\n\tssh_FX_CONNECTION_LOST   = 7\n\tssh_FX_OP_UNSUPPORTED    = 8\n\n\t// see draft-ietf-secsh-filexfer-13\n\t// https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.1\n\tssh_FX_INVALID_HANDLE              = 9\n\tssh_FX_NO_SUCH_PATH                = 10\n\tssh_FX_FILE_ALREADY_EXISTS         = 11\n\tssh_FX_WRITE_PROTECT               = 12\n\tssh_FX_NO_MEDIA                    = 13\n\tssh_FX_NO_SPACE_ON_FILESYSTEM      = 14\n\tssh_FX_QUOTA_EXCEEDED              = 15\n\tssh_FX_UNKNOWN_PRINCIPAL           = 16\n\tssh_FX_LOCK_CONFLICT               = 17\n\tssh_FX_DIR_NOT_EMPTY               = 18\n\tssh_FX_NOT_A_DIRECTORY             = 19\n\tssh_FX_INVALID_FILENAME            = 20\n\tssh_FX_LINK_LOOP                   = 21\n\tssh_FX_CANNOT_DELETE               = 22\n\tssh_FX_INVALID_PARAMETER           = 23\n\tssh_FX_FILE_IS_A_DIRECTORY         = 24\n\tssh_FX_BYTE_RANGE_LOCK_CONFLICT    = 25\n\tssh_FX_BYTE_RANGE_LOCK_REFUSED     = 26\n\tssh_FX_DELETE_PENDING              = 27\n\tssh_FX_FILE_CORRUPT                = 28\n\tssh_FX_OWNER_INVALID               = 29\n\tssh_FX_GROUP_INVALID               = 30\n\tssh_FX_NO_MATCHING_BYTE_RANGE_LOCK = 31\n)\n\nconst (\n\tssh_FXF_READ   = 0x00000001\n\tssh_FXF_WRITE  = 0x00000002\n\tssh_FXF_APPEND = 0x00000004\n\tssh_FXF_CREAT  = 0x00000008\n\tssh_FXF_TRUNC  = 0x00000010\n\tssh_FXF_EXCL   = 0x00000020\n)\n\ntype fxp uint8\n\nfunc (f fxp) String() string {\n\tswitch f {\n\tcase ssh_FXP_INIT:\n\t\treturn \"SSH_FXP_INIT\"\n\tcase ssh_FXP_VERSION:\n\t\treturn \"SSH_FXP_VERSION\"\n\tcase ssh_FXP_OPEN:\n\t\treturn \"SSH_FXP_OPEN\"\n\tcase ssh_FXP_CLOSE:\n\t\treturn \"SSH_FXP_CLOSE\"\n\tcase ssh_FXP_READ:\n\t\treturn \"SSH_FXP_READ\"\n\tcase ssh_FXP_WRITE:\n\t\treturn \"SSH_FXP_WRITE\"\n\tcase ssh_FXP_LSTAT:\n\t\treturn \"SSH_FXP_LSTAT\"\n\tcase ssh_FXP_FSTAT:\n\t\treturn \"SSH_FXP_FSTAT\"\n\tcase ssh_FXP_SETSTAT:\n\t\treturn \"SSH_FXP_SETSTAT\"\n\tcase ssh_FXP_FSETSTAT:\n\t\treturn \"SSH_FXP_FSETSTAT\"\n\tcase ssh_FXP_OPENDIR:\n\t\treturn \"SSH_FXP_OPENDIR\"\n\tcase ssh_FXP_READDIR:\n\t\treturn \"SSH_FXP_READDIR\"\n\tcase ssh_FXP_REMOVE:\n\t\treturn \"SSH_FXP_REMOVE\"\n\tcase ssh_FXP_MKDIR:\n\t\treturn \"SSH_FXP_MKDIR\"\n\tcase ssh_FXP_RMDIR:\n\t\treturn \"SSH_FXP_RMDIR\"\n\tcase ssh_FXP_REALPATH:\n\t\treturn \"SSH_FXP_REALPATH\"\n\tcase ssh_FXP_STAT:\n\t\treturn \"SSH_FXP_STAT\"\n\tcase ssh_FXP_RENAME:\n\t\treturn \"SSH_FXP_RENAME\"\n\tcase ssh_FXP_READLINK:\n\t\treturn \"SSH_FXP_READLINK\"\n\tcase ssh_FXP_SYMLINK:\n\t\treturn \"SSH_FXP_SYMLINK\"\n\tcase ssh_FXP_STATUS:\n\t\treturn \"SSH_FXP_STATUS\"\n\tcase ssh_FXP_HANDLE:\n\t\treturn \"SSH_FXP_HANDLE\"\n\tcase ssh_FXP_DATA:\n\t\treturn \"SSH_FXP_DATA\"\n\tcase ssh_FXP_NAME:\n\t\treturn \"SSH_FXP_NAME\"\n\tcase ssh_FXP_ATTRS:\n\t\treturn \"SSH_FXP_ATTRS\"\n\tcase ssh_FXP_EXTENDED:\n\t\treturn \"SSH_FXP_EXTENDED\"\n\tcase ssh_FXP_EXTENDED_REPLY:\n\t\treturn \"SSH_FXP_EXTENDED_REPLY\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\ntype fx uint8\n\nfunc (f fx) String() string {\n\tswitch f {\n\tcase ssh_FX_OK:\n\t\treturn \"SSH_FX_OK\"\n\tcase ssh_FX_EOF:\n\t\treturn \"SSH_FX_EOF\"\n\tcase ssh_FX_NO_SUCH_FILE:\n\t\treturn \"SSH_FX_NO_SUCH_FILE\"\n\tcase ssh_FX_PERMISSION_DENIED:\n\t\treturn \"SSH_FX_PERMISSION_DENIED\"\n\tcase ssh_FX_FAILURE:\n\t\treturn \"SSH_FX_FAILURE\"\n\tcase ssh_FX_BAD_MESSAGE:\n\t\treturn \"SSH_FX_BAD_MESSAGE\"\n\tcase ssh_FX_NO_CONNECTION:\n\t\treturn \"SSH_FX_NO_CONNECTION\"\n\tcase ssh_FX_CONNECTION_LOST:\n\t\treturn \"SSH_FX_CONNECTION_LOST\"\n\tcase ssh_FX_OP_UNSUPPORTED:\n\t\treturn \"SSH_FX_OP_UNSUPPORTED\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\ntype unexpectedPacketErr struct {\n\twant, got uint8\n}\n\nfunc (u *unexpectedPacketErr) Error() string {\n\treturn fmt.Sprintf(\"sftp: unexpected packet: want %v, got %v\", fxp(u.want), fxp(u.got))\n}\n\nfunc unimplementedPacketErr(u uint8) error {\n\treturn errors.Errorf(\"sftp: unimplemented packet type: got %v\", fxp(u))\n}\n\ntype unexpectedIDErr struct{ want, got uint32 }\n\nfunc (u *unexpectedIDErr) Error() string {\n\treturn fmt.Sprintf(\"sftp: unexpected id: want %v, got %v\", u.want, u.got)\n}\n\nfunc unimplementedSeekWhence(whence int) error {\n\treturn errors.Errorf(\"sftp: unimplemented seek whence %v\", whence)\n}\n\nfunc unexpectedCount(want, got uint32) error {\n\treturn errors.Errorf(\"sftp: unexpected count: want %v, got %v\", want, got)\n}\n\ntype unexpectedVersionErr struct{ want, got uint32 }\n\nfunc (u *unexpectedVersionErr) Error() string {\n\treturn fmt.Sprintf(\"sftp: unexpected server version: want %v, got %v\", u.want, u.got)\n}\n\n// A StatusError is returned when an SFTP operation fails, and provides\n// additional information about the failure.\ntype StatusError struct {\n\tCode      uint32\n\tmsg, lang string\n}\n\nfunc (s *StatusError) Error() string { return fmt.Sprintf(\"sftp: %q (%v)\", s.msg, fx(s.Code)) }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/afero/basepath.go",
    "content": "package afero\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n)\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\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 \"\", 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.PathError{Op: \"realPath\", Path: name, Err: errors.New(\"got a real OS path instead of a virtual\")}\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\treturn b.source.OpenFile(name, flag, mode)\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\treturn b.source.Open(name)\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\treturn b.source.Create(name)\n}\n\n// vim: ts=4 sw=4 noexpandtab nolist syn=go\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 {\n\t\treturn cacheMiss, nil, nil\n\t}\n\tvar ok bool\n\tif err, ok = err.(*os.PathError); ok {\n\t\tif err == os.ErrNotExist {\n\t\t\treturn cacheMiss, nil, nil\n\t\t}\n\t}\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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\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\torigErr := err\n\t\tif e, ok := err.(*os.PathError); ok {\n\t\t\terr = e.Err\n\t\t}\n\t\tif err == syscall.ENOENT || err == syscall.ENOTDIR {\n\t\t\treturn u.base.Stat(name)\n\t\t}\n\t\treturn nil, origErr\n\t}\n\treturn fi, nil\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 syscall.EEXIST\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\treturn syscall.EEXIST\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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.name = newname\n}\n\nfunc SetMode(f *FileData, mode os.FileMode) {\n\tf.mode = mode\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\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 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\t_, name := filepath.Split(s.name)\n\treturn name\n}\nfunc (s *FileInfo) Mode() os.FileMode  { return s.mode }\nfunc (s *FileInfo) ModTime() time.Time { return s.modtime }\nfunc (s *FileInfo) IsDir() bool        { return s.dir }\nfunc (s *FileInfo) Sys() interface{}   { return nil }\nfunc (s *FileInfo) Size() int64 {\n\tif s.IsDir() {\n\t\treturn int64(42)\n\t}\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": "12fa-docker-golang/chapter3/viper/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\tmem.RemoveFromMemDir(parent, f)\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\tmem.InitializeDir(parent)\n\tmem.AddToMemDir(parent, f)\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)\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} else {\n\t\t\treturn err\n\t\t}\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/afero/memradix.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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 := lstatIfOs(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 is OsFs use Lstat, else use fs.Stat\nfunc lstatIfOs(fs Fs, path string) (info os.FileInfo, err error) {\n\t_, ok := fs.(*OsFs)\n\tif ok {\n\t\tinfo, err = os.Lstat(path)\n\t} else {\n\t\tinfo, err = fs.Stat(path)\n\t}\n\treturn\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 := lstatIfOs(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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/afero/readonlyfs.go",
    "content": "package afero\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\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) 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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/afero/sftpfs/file.go",
    "content": "// Copyright © 2015 Jerry Jacobs <jerry.jacobs@xor-gate.org>.\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 sftpfs\n\nimport (\n\t\"github.com/pkg/sftp\"\n\t\"os\"\n)\n\ntype File struct {\n\tfd *sftp.File\n}\n\nfunc FileOpen(s *sftp.Client, name string) (*File, error) {\n\tfd, err := s.Open(name)\n\tif err != nil {\n\t\treturn &File{}, err\n\t}\n\treturn &File{fd: fd}, nil\n}\n\nfunc FileCreate(s *sftp.Client, name string) (*File, error) {\n\tfd, err := s.Create(name)\n\tif err != nil {\n\t\treturn &File{}, err\n\t}\n\treturn &File{fd: fd}, nil\n}\n\nfunc (f *File) Close() error {\n\treturn f.fd.Close()\n}\n\nfunc (f *File) Name() string {\n\treturn f.fd.Name()\n}\n\nfunc (f *File) Stat() (os.FileInfo, error) {\n\treturn f.fd.Stat()\n}\n\nfunc (f *File) Sync() error {\n\treturn nil\n}\n\nfunc (f *File) Truncate(size int64) error {\n\treturn f.fd.Truncate(size)\n}\n\nfunc (f *File) Read(b []byte) (n int, err error) {\n\treturn f.fd.Read(b)\n}\n\n// TODO\nfunc (f *File) ReadAt(b []byte, off int64) (n int, err error) {\n\treturn 0, nil\n}\n\n// TODO\nfunc (f *File) Readdir(count int) (res []os.FileInfo, err error) {\n\treturn nil, nil\n}\n\n// TODO\nfunc (f *File) Readdirnames(n int) (names []string, err error) {\n\treturn nil, nil\n}\n\nfunc (f *File) Seek(offset int64, whence int) (int64, error) {\n\treturn f.fd.Seek(offset, whence)\n}\n\nfunc (f *File) Write(b []byte) (n int, err error) {\n\treturn f.fd.Write(b)\n}\n\n// TODO\nfunc (f *File) WriteAt(b []byte, off int64) (n int, err error) {\n\treturn 0, nil\n}\n\nfunc (f *File) WriteString(s string) (ret int, err error) {\n\treturn f.fd.Write([]byte(s))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/afero/sftpfs/sftp.go",
    "content": "// Copyright © 2015 Jerry Jacobs <jerry.jacobs@xor-gate.org>.\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 sftpfs\n\nimport (\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/pkg/sftp\"\n\t\"github.com/spf13/afero\"\n)\n\n// Fs is a afero.Fs implementation that uses functions provided by the sftp package.\n//\n// For details in any method, check the documentation of the sftp package\n// (github.com/pkg/sftp).\ntype Fs struct {\n\tclient *sftp.Client\n}\n\nfunc New(client *sftp.Client) afero.Fs {\n\treturn &Fs{client: client}\n}\n\nfunc (s Fs) Name() string { return \"sftpfs\" }\n\nfunc (s Fs) Create(name string) (afero.File, error) {\n\treturn FileCreate(s.client, name)\n}\n\nfunc (s Fs) Mkdir(name string, perm os.FileMode) error {\n\terr := s.client.Mkdir(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.client.Chmod(name, perm)\n}\n\nfunc (s Fs) MkdirAll(path string, perm os.FileMode) error {\n\t// Fast path: if we can tell whether path is a directory or file, stop with success or error.\n\tdir, err := s.Stat(path)\n\tif err == nil {\n\t\tif dir.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\t// Slow path: make sure parent exists and then call Mkdir for path.\n\ti := len(path)\n\tfor i > 0 && os.IsPathSeparator(path[i-1]) { // Skip trailing path separator.\n\t\ti--\n\t}\n\n\tj := i\n\tfor j > 0 && !os.IsPathSeparator(path[j-1]) { // Scan backward over element.\n\t\tj--\n\t}\n\n\tif j > 1 {\n\t\t// Create parent\n\t\terr = s.MkdirAll(path[0:j-1], perm)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Parent now exists; invoke Mkdir and use its result.\n\terr = s.Mkdir(path, perm)\n\tif err != nil {\n\t\t// Handle arguments like \"foo/.\" by\n\t\t// double-checking that directory doesn't exist.\n\t\tdir, err1 := s.Lstat(path)\n\t\tif err1 == nil && dir.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (s Fs) Open(name string) (afero.File, error) {\n\treturn FileOpen(s.client, name)\n}\n\nfunc (s Fs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {\n\treturn nil, nil\n}\n\nfunc (s Fs) Remove(name string) error {\n\treturn s.client.Remove(name)\n}\n\nfunc (s Fs) RemoveAll(path string) error {\n\t// TODO have a look at os.RemoveAll\n\t// https://github.com/golang/go/blob/master/src/os/path.go#L66\n\treturn nil\n}\n\nfunc (s Fs) Rename(oldname, newname string) error {\n\treturn s.client.Rename(oldname, newname)\n}\n\nfunc (s Fs) Stat(name string) (os.FileInfo, error) {\n\treturn s.client.Stat(name)\n}\n\nfunc (s Fs) Lstat(p string) (os.FileInfo, error) {\n\treturn s.client.Lstat(p)\n}\n\nfunc (s Fs) Chmod(name string, mode os.FileMode) error {\n\treturn s.client.Chmod(name, mode)\n}\n\nfunc (s Fs) Chtimes(name string, atime time.Time, mtime time.Time) error {\n\treturn s.client.Chtimes(name, atime, mtime)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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// Readdir will weave the two directories together and\n// return a single view of the overlayed directories\nfunc (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) {\n\tif f.off == 0 {\n\t\tvar files = make(map[string]os.FileInfo)\n\t\tvar rfi []os.FileInfo\n\t\tif f.layer != nil {\n\t\t\trfi, 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\tfor _, fi := range rfi {\n\t\t\t\tfiles[fi.Name()] = fi\n\t\t\t}\n\t\t}\n\n\t\tif f.base != nil {\n\t\t\trfi, err = f.base.Readdir(-1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor _, fi := range rfi {\n\t\t\t\tif _, exists := files[fi.Name()]; !exists {\n\t\t\t\t\tfiles[fi.Name()] = fi\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor _, fi := range files {\n\t\t\tf.files = append(f.files, fi)\n\t\t}\n\t}\n\tif c == -1 {\n\t\treturn f.files[f.off:], nil\n\t}\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": "12fa-docker-golang/chapter3/viper/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\"log\"\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\tlog.Panicln(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 plan 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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/cast/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Steve Francia\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/cast/cast.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\n// Package cast provides easy and safe casting in Go.\npackage cast\n\nimport \"time\"\n\n// ToBool casts an interface to a bool type.\nfunc ToBool(i interface{}) bool {\n\tv, _ := ToBoolE(i)\n\treturn v\n}\n\n// ToTime casts an interface to a time.Time type.\nfunc ToTime(i interface{}) time.Time {\n\tv, _ := ToTimeE(i)\n\treturn v\n}\n\n// ToDuration casts an interface to a time.Duration type.\nfunc ToDuration(i interface{}) time.Duration {\n\tv, _ := ToDurationE(i)\n\treturn v\n}\n\n// ToFloat64 casts an interface to a float64 type.\nfunc ToFloat64(i interface{}) float64 {\n\tv, _ := ToFloat64E(i)\n\treturn v\n}\n\n// ToFloat32 casts an interface to a float32 type.\nfunc ToFloat32(i interface{}) float32 {\n\tv, _ := ToFloat32E(i)\n\treturn v\n}\n\n// ToInt64 casts an interface to an int64 type.\nfunc ToInt64(i interface{}) int64 {\n\tv, _ := ToInt64E(i)\n\treturn v\n}\n\n// ToInt32 casts an interface to an int32 type.\nfunc ToInt32(i interface{}) int32 {\n\tv, _ := ToInt32E(i)\n\treturn v\n}\n\n// ToInt16 casts an interface to an int16 type.\nfunc ToInt16(i interface{}) int16 {\n\tv, _ := ToInt16E(i)\n\treturn v\n}\n\n// ToInt8 casts an interface to an int8 type.\nfunc ToInt8(i interface{}) int8 {\n\tv, _ := ToInt8E(i)\n\treturn v\n}\n\n// ToInt casts an interface to an int type.\nfunc ToInt(i interface{}) int {\n\tv, _ := ToIntE(i)\n\treturn v\n}\n\n// ToUint casts an interface to a uint type.\nfunc ToUint(i interface{}) uint {\n\tv, _ := ToUintE(i)\n\treturn v\n}\n\n// ToUint64 casts an interface to a uint64 type.\nfunc ToUint64(i interface{}) uint64 {\n\tv, _ := ToUint64E(i)\n\treturn v\n}\n\n// ToUint32 casts an interface to a uint32 type.\nfunc ToUint32(i interface{}) uint32 {\n\tv, _ := ToUint32E(i)\n\treturn v\n}\n\n// ToUint16 casts an interface to a uint16 type.\nfunc ToUint16(i interface{}) uint16 {\n\tv, _ := ToUint16E(i)\n\treturn v\n}\n\n// ToUint8 casts an interface to a uint8 type.\nfunc ToUint8(i interface{}) uint8 {\n\tv, _ := ToUint8E(i)\n\treturn v\n}\n\n// ToString casts an interface to a string type.\nfunc ToString(i interface{}) string {\n\tv, _ := ToStringE(i)\n\treturn v\n}\n\n// ToStringMapString casts an interface to a map[string]string type.\nfunc ToStringMapString(i interface{}) map[string]string {\n\tv, _ := ToStringMapStringE(i)\n\treturn v\n}\n\n// ToStringMapStringSlice casts an interface to a map[string][]string type.\nfunc ToStringMapStringSlice(i interface{}) map[string][]string {\n\tv, _ := ToStringMapStringSliceE(i)\n\treturn v\n}\n\n// ToStringMapBool casts an interface to a map[string]bool type.\nfunc ToStringMapBool(i interface{}) map[string]bool {\n\tv, _ := ToStringMapBoolE(i)\n\treturn v\n}\n\n// ToStringMap casts an interface to a map[string]interface{} type.\nfunc ToStringMap(i interface{}) map[string]interface{} {\n\tv, _ := ToStringMapE(i)\n\treturn v\n}\n\n// ToSlice casts an interface to a []interface{} type.\nfunc ToSlice(i interface{}) []interface{} {\n\tv, _ := ToSliceE(i)\n\treturn v\n}\n\n// ToBoolSlice casts an interface to a []bool type.\nfunc ToBoolSlice(i interface{}) []bool {\n\tv, _ := ToBoolSliceE(i)\n\treturn v\n}\n\n// ToStringSlice casts an interface to a []string type.\nfunc ToStringSlice(i interface{}) []string {\n\tv, _ := ToStringSliceE(i)\n\treturn v\n}\n\n// ToIntSlice casts an interface to a []int type.\nfunc ToIntSlice(i interface{}) []int {\n\tv, _ := ToIntSliceE(i)\n\treturn v\n}\n\n// ToDurationSlice casts an interface to a []time.Duration type.\nfunc ToDurationSlice(i interface{}) []time.Duration {\n\tv, _ := ToDurationSliceE(i)\n\treturn v\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/cast/caste.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\npackage cast\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"html/template\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar errNegativeNotAllowed = errors.New(\"unable to cast negative value\")\n\n// ToTimeE casts an interface to a time.Time type.\nfunc ToTimeE(i interface{}) (tim time.Time, err error) {\n\ti = indirect(i)\n\n\tswitch v := i.(type) {\n\tcase time.Time:\n\t\treturn v, nil\n\tcase string:\n\t\treturn StringToDate(v)\n\tcase int:\n\t\treturn time.Unix(int64(v), 0), nil\n\tcase int64:\n\t\treturn time.Unix(v, 0), nil\n\tcase int32:\n\t\treturn time.Unix(int64(v), 0), nil\n\tcase uint:\n\t\treturn time.Unix(int64(v), 0), nil\n\tcase uint64:\n\t\treturn time.Unix(int64(v), 0), nil\n\tcase uint32:\n\t\treturn time.Unix(int64(v), 0), nil\n\tdefault:\n\t\treturn time.Time{}, fmt.Errorf(\"unable to cast %#v of type %T to Time\", i, i)\n\t}\n}\n\n// ToDurationE casts an interface to a time.Duration type.\nfunc ToDurationE(i interface{}) (d time.Duration, err error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase time.Duration:\n\t\treturn s, nil\n\tcase int, int64, int32, int16, int8, uint, uint64, uint32, uint16, uint8:\n\t\td = time.Duration(ToInt64(s))\n\t\treturn\n\tcase float32, float64:\n\t\td = time.Duration(ToFloat64(s))\n\t\treturn\n\tcase string:\n\t\tif strings.ContainsAny(s, \"nsuµmh\") {\n\t\t\td, err = time.ParseDuration(s)\n\t\t} else {\n\t\t\td, err = time.ParseDuration(s + \"ns\")\n\t\t}\n\t\treturn\n\tdefault:\n\t\terr = fmt.Errorf(\"unable to cast %#v of type %T to Duration\", i, i)\n\t\treturn\n\t}\n}\n\n// ToBoolE casts an interface to a bool type.\nfunc ToBoolE(i interface{}) (bool, error) {\n\ti = indirect(i)\n\n\tswitch b := i.(type) {\n\tcase bool:\n\t\treturn b, nil\n\tcase nil:\n\t\treturn false, nil\n\tcase int:\n\t\tif i.(int) != 0 {\n\t\t\treturn true, nil\n\t\t}\n\t\treturn false, nil\n\tcase string:\n\t\treturn strconv.ParseBool(i.(string))\n\tdefault:\n\t\treturn false, fmt.Errorf(\"unable to cast %#v of type %T to bool\", i, i)\n\t}\n}\n\n// ToFloat64E casts an interface to a float64 type.\nfunc ToFloat64E(i interface{}) (float64, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase float64:\n\t\treturn s, nil\n\tcase float32:\n\t\treturn float64(s), nil\n\tcase int:\n\t\treturn float64(s), nil\n\tcase int64:\n\t\treturn float64(s), nil\n\tcase int32:\n\t\treturn float64(s), nil\n\tcase int16:\n\t\treturn float64(s), nil\n\tcase int8:\n\t\treturn float64(s), nil\n\tcase uint:\n\t\treturn float64(s), nil\n\tcase uint64:\n\t\treturn float64(s), nil\n\tcase uint32:\n\t\treturn float64(s), nil\n\tcase uint16:\n\t\treturn float64(s), nil\n\tcase uint8:\n\t\treturn float64(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseFloat(s, 64)\n\t\tif err == nil {\n\t\t\treturn v, nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to float64\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to float64\", i, i)\n\t}\n}\n\n// ToFloat32E casts an interface to a float32 type.\nfunc ToFloat32E(i interface{}) (float32, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase float64:\n\t\treturn float32(s), nil\n\tcase float32:\n\t\treturn s, nil\n\tcase int:\n\t\treturn float32(s), nil\n\tcase int64:\n\t\treturn float32(s), nil\n\tcase int32:\n\t\treturn float32(s), nil\n\tcase int16:\n\t\treturn float32(s), nil\n\tcase int8:\n\t\treturn float32(s), nil\n\tcase uint:\n\t\treturn float32(s), nil\n\tcase uint64:\n\t\treturn float32(s), nil\n\tcase uint32:\n\t\treturn float32(s), nil\n\tcase uint16:\n\t\treturn float32(s), nil\n\tcase uint8:\n\t\treturn float32(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseFloat(s, 32)\n\t\tif err == nil {\n\t\t\treturn float32(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to float32\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to float32\", i, i)\n\t}\n}\n\n// ToInt64E casts an interface to an int64 type.\nfunc ToInt64E(i interface{}) (int64, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase int:\n\t\treturn int64(s), nil\n\tcase int64:\n\t\treturn s, nil\n\tcase int32:\n\t\treturn int64(s), nil\n\tcase int16:\n\t\treturn int64(s), nil\n\tcase int8:\n\t\treturn int64(s), nil\n\tcase uint:\n\t\treturn int64(s), nil\n\tcase uint64:\n\t\treturn int64(s), nil\n\tcase uint32:\n\t\treturn int64(s), nil\n\tcase uint16:\n\t\treturn int64(s), nil\n\tcase uint8:\n\t\treturn int64(s), nil\n\tcase float64:\n\t\treturn int64(s), nil\n\tcase float32:\n\t\treturn int64(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseInt(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn v, nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int64\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int64\", i, i)\n\t}\n}\n\n// ToInt32E casts an interface to an int32 type.\nfunc ToInt32E(i interface{}) (int32, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase int:\n\t\treturn int32(s), nil\n\tcase int64:\n\t\treturn int32(s), nil\n\tcase int32:\n\t\treturn s, nil\n\tcase int16:\n\t\treturn int32(s), nil\n\tcase int8:\n\t\treturn int32(s), nil\n\tcase uint:\n\t\treturn int32(s), nil\n\tcase uint64:\n\t\treturn int32(s), nil\n\tcase uint32:\n\t\treturn int32(s), nil\n\tcase uint16:\n\t\treturn int32(s), nil\n\tcase uint8:\n\t\treturn int32(s), nil\n\tcase float64:\n\t\treturn int32(s), nil\n\tcase float32:\n\t\treturn int32(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseInt(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn int32(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int32\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int32\", i, i)\n\t}\n}\n\n// ToInt16E casts an interface to an int16 type.\nfunc ToInt16E(i interface{}) (int16, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase int:\n\t\treturn int16(s), nil\n\tcase int64:\n\t\treturn int16(s), nil\n\tcase int32:\n\t\treturn int16(s), nil\n\tcase int16:\n\t\treturn s, nil\n\tcase int8:\n\t\treturn int16(s), nil\n\tcase uint:\n\t\treturn int16(s), nil\n\tcase uint64:\n\t\treturn int16(s), nil\n\tcase uint32:\n\t\treturn int16(s), nil\n\tcase uint16:\n\t\treturn int16(s), nil\n\tcase uint8:\n\t\treturn int16(s), nil\n\tcase float64:\n\t\treturn int16(s), nil\n\tcase float32:\n\t\treturn int16(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseInt(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn int16(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int16\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int16\", i, i)\n\t}\n}\n\n// ToInt8E casts an interface to an int8 type.\nfunc ToInt8E(i interface{}) (int8, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase int:\n\t\treturn int8(s), nil\n\tcase int64:\n\t\treturn int8(s), nil\n\tcase int32:\n\t\treturn int8(s), nil\n\tcase int16:\n\t\treturn int8(s), nil\n\tcase int8:\n\t\treturn s, nil\n\tcase uint:\n\t\treturn int8(s), nil\n\tcase uint64:\n\t\treturn int8(s), nil\n\tcase uint32:\n\t\treturn int8(s), nil\n\tcase uint16:\n\t\treturn int8(s), nil\n\tcase uint8:\n\t\treturn int8(s), nil\n\tcase float64:\n\t\treturn int8(s), nil\n\tcase float32:\n\t\treturn int8(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseInt(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn int8(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int8\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int8\", i, i)\n\t}\n}\n\n// ToIntE casts an interface to an int type.\nfunc ToIntE(i interface{}) (int, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase int:\n\t\treturn s, nil\n\tcase int64:\n\t\treturn int(s), nil\n\tcase int32:\n\t\treturn int(s), nil\n\tcase int16:\n\t\treturn int(s), nil\n\tcase int8:\n\t\treturn int(s), nil\n\tcase uint:\n\t\treturn int(s), nil\n\tcase uint64:\n\t\treturn int(s), nil\n\tcase uint32:\n\t\treturn int(s), nil\n\tcase uint16:\n\t\treturn int(s), nil\n\tcase uint8:\n\t\treturn int(s), nil\n\tcase float64:\n\t\treturn int(s), nil\n\tcase float32:\n\t\treturn int(s), nil\n\tcase string:\n\t\tv, err := strconv.ParseInt(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn int(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int\", i, i)\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to int\", i, i)\n\t}\n}\n\n// ToUintE casts an interface to a uint type.\nfunc ToUintE(i interface{}) (uint, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\tv, err := strconv.ParseUint(s, 0, 0)\n\t\tif err == nil {\n\t\t\treturn uint(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v to uint: %s\", i, err)\n\tcase int:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase int64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase int32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase int16:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase int8:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase uint:\n\t\treturn s, nil\n\tcase uint64:\n\t\treturn uint(s), nil\n\tcase uint32:\n\t\treturn uint(s), nil\n\tcase uint16:\n\t\treturn uint(s), nil\n\tcase uint8:\n\t\treturn uint(s), nil\n\tcase float64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase float32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint(s), nil\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to uint\", i, i)\n\t}\n}\n\n// ToUint64E casts an interface to a uint64 type.\nfunc ToUint64E(i interface{}) (uint64, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\tv, err := strconv.ParseUint(s, 0, 64)\n\t\tif err == nil {\n\t\t\treturn v, nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v to uint64: %s\", i, err)\n\tcase int:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase int64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase int32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase int16:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase int8:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase uint:\n\t\treturn uint64(s), nil\n\tcase uint64:\n\t\treturn s, nil\n\tcase uint32:\n\t\treturn uint64(s), nil\n\tcase uint16:\n\t\treturn uint64(s), nil\n\tcase uint8:\n\t\treturn uint64(s), nil\n\tcase float32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase float64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint64(s), nil\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to uint64\", i, i)\n\t}\n}\n\n// ToUint32E casts an interface to a uint32 type.\nfunc ToUint32E(i interface{}) (uint32, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\tv, err := strconv.ParseUint(s, 0, 32)\n\t\tif err == nil {\n\t\t\treturn uint32(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v to uint32: %s\", i, err)\n\tcase int:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase int64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase int32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase int16:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase int8:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase uint:\n\t\treturn uint32(s), nil\n\tcase uint64:\n\t\treturn uint32(s), nil\n\tcase uint32:\n\t\treturn s, nil\n\tcase uint16:\n\t\treturn uint32(s), nil\n\tcase uint8:\n\t\treturn uint32(s), nil\n\tcase float64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase float32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint32(s), nil\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to uint32\", i, i)\n\t}\n}\n\n// ToUint16E casts an interface to a uint16 type.\nfunc ToUint16E(i interface{}) (uint16, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\tv, err := strconv.ParseUint(s, 0, 16)\n\t\tif err == nil {\n\t\t\treturn uint16(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v to uint16: %s\", i, err)\n\tcase int:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase int64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase int32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase int16:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase int8:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase uint:\n\t\treturn uint16(s), nil\n\tcase uint64:\n\t\treturn uint16(s), nil\n\tcase uint32:\n\t\treturn uint16(s), nil\n\tcase uint16:\n\t\treturn s, nil\n\tcase uint8:\n\t\treturn uint16(s), nil\n\tcase float64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase float32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint16(s), nil\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to uint16\", i, i)\n\t}\n}\n\n// ToUint8E casts an interface to a uint type.\nfunc ToUint8E(i interface{}) (uint8, error) {\n\ti = indirect(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\tv, err := strconv.ParseUint(s, 0, 8)\n\t\tif err == nil {\n\t\t\treturn uint8(v), nil\n\t\t}\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v to uint8: %s\", i, err)\n\tcase int:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase int64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase int32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase int16:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase int8:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase uint:\n\t\treturn uint8(s), nil\n\tcase uint64:\n\t\treturn uint8(s), nil\n\tcase uint32:\n\t\treturn uint8(s), nil\n\tcase uint16:\n\t\treturn uint8(s), nil\n\tcase uint8:\n\t\treturn s, nil\n\tcase float64:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase float32:\n\t\tif s < 0 {\n\t\t\treturn 0, errNegativeNotAllowed\n\t\t}\n\t\treturn uint8(s), nil\n\tcase bool:\n\t\tif s {\n\t\t\treturn 1, nil\n\t\t}\n\t\treturn 0, nil\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unable to cast %#v of type %T to uint8\", i, i)\n\t}\n}\n\n// From html/template/content.go\n// Copyright 2011 The Go Authors. All rights reserved.\n// indirect returns the value, after dereferencing as many times\n// as necessary to reach the base type (or nil).\nfunc indirect(a interface{}) interface{} {\n\tif a == nil {\n\t\treturn nil\n\t}\n\tif t := reflect.TypeOf(a); t.Kind() != reflect.Ptr {\n\t\t// Avoid creating a reflect.Value if it's not a pointer.\n\t\treturn a\n\t}\n\tv := reflect.ValueOf(a)\n\tfor v.Kind() == reflect.Ptr && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\treturn v.Interface()\n}\n\n// From html/template/content.go\n// Copyright 2011 The Go Authors. All rights reserved.\n// indirectToStringerOrError returns the value, after dereferencing as many times\n// as necessary to reach the base type (or nil) or an implementation of fmt.Stringer\n// or error,\nfunc indirectToStringerOrError(a interface{}) interface{} {\n\tif a == nil {\n\t\treturn nil\n\t}\n\n\tvar errorType = reflect.TypeOf((*error)(nil)).Elem()\n\tvar fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()\n\n\tv := reflect.ValueOf(a)\n\tfor !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\treturn v.Interface()\n}\n\n// ToStringE casts an interface to a string type.\nfunc ToStringE(i interface{}) (string, error) {\n\ti = indirectToStringerOrError(i)\n\n\tswitch s := i.(type) {\n\tcase string:\n\t\treturn s, nil\n\tcase bool:\n\t\treturn strconv.FormatBool(s), nil\n\tcase float64:\n\t\treturn strconv.FormatFloat(s, 'f', -1, 64), nil\n\tcase float32:\n\t\treturn strconv.FormatFloat(float64(s), 'f', -1, 32), nil\n\tcase int:\n\t\treturn strconv.Itoa(s), nil\n\tcase int64:\n\t\treturn strconv.FormatInt(s, 10), nil\n\tcase int32:\n\t\treturn strconv.Itoa(int(s)), nil\n\tcase int16:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase int8:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase uint:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase uint64:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase uint32:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase uint16:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase uint8:\n\t\treturn strconv.FormatInt(int64(s), 10), nil\n\tcase []byte:\n\t\treturn string(s), nil\n\tcase template.HTML:\n\t\treturn string(s), nil\n\tcase template.URL:\n\t\treturn string(s), nil\n\tcase template.JS:\n\t\treturn string(s), nil\n\tcase template.CSS:\n\t\treturn string(s), nil\n\tcase template.HTMLAttr:\n\t\treturn string(s), nil\n\tcase nil:\n\t\treturn \"\", nil\n\tcase fmt.Stringer:\n\t\treturn s.String(), nil\n\tcase error:\n\t\treturn s.Error(), nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unable to cast %#v of type %T to string\", i, i)\n\t}\n}\n\n// ToStringMapStringE casts an interface to a map[string]string type.\nfunc ToStringMapStringE(i interface{}) (map[string]string, error) {\n\tvar m = map[string]string{}\n\n\tswitch v := i.(type) {\n\tcase map[string]string:\n\t\treturn v, nil\n\tcase map[string]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToString(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}]string:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToString(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToString(val)\n\t\t}\n\t\treturn m, nil\n\tdefault:\n\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string]string\", i, i)\n\t}\n}\n\n// ToStringMapStringSliceE casts an interface to a map[string][]string type.\nfunc ToStringMapStringSliceE(i interface{}) (map[string][]string, error) {\n\tvar m = map[string][]string{}\n\n\tswitch v := i.(type) {\n\tcase map[string][]string:\n\t\treturn v, nil\n\tcase map[string][]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToStringSlice(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[string]string:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = []string{val}\n\t\t}\n\tcase map[string]interface{}:\n\t\tfor k, val := range v {\n\t\t\tswitch vt := val.(type) {\n\t\t\tcase []interface{}:\n\t\t\t\tm[ToString(k)] = ToStringSlice(vt)\n\t\t\tcase []string:\n\t\t\t\tm[ToString(k)] = vt\n\t\t\tdefault:\n\t\t\t\tm[ToString(k)] = []string{ToString(val)}\n\t\t\t}\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}][]string:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToStringSlice(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}]string:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToStringSlice(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}][]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToStringSlice(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[interface{}]interface{}:\n\t\tfor k, val := range v {\n\t\t\tkey, err := ToStringE(k)\n\t\t\tif err != nil {\n\t\t\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string][]string\", i, i)\n\t\t\t}\n\t\t\tvalue, err := ToStringSliceE(val)\n\t\t\tif err != nil {\n\t\t\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string][]string\", i, i)\n\t\t\t}\n\t\t\tm[key] = value\n\t\t}\n\tdefault:\n\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string][]string\", i, i)\n\t}\n\treturn m, nil\n}\n\n// ToStringMapBoolE casts an interface to a map[string]bool type.\nfunc ToStringMapBoolE(i interface{}) (map[string]bool, error) {\n\tvar m = map[string]bool{}\n\n\tswitch v := i.(type) {\n\tcase map[interface{}]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToBool(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[string]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = ToBool(val)\n\t\t}\n\t\treturn m, nil\n\tcase map[string]bool:\n\t\treturn v, nil\n\tdefault:\n\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string]bool\", i, i)\n\t}\n}\n\n// ToStringMapE casts an interface to a map[string]interface{} type.\nfunc ToStringMapE(i interface{}) (map[string]interface{}, error) {\n\tvar m = map[string]interface{}{}\n\n\tswitch v := i.(type) {\n\tcase map[interface{}]interface{}:\n\t\tfor k, val := range v {\n\t\t\tm[ToString(k)] = val\n\t\t}\n\t\treturn m, nil\n\tcase map[string]interface{}:\n\t\treturn v, nil\n\tdefault:\n\t\treturn m, fmt.Errorf(\"unable to cast %#v of type %T to map[string]interface{}\", i, i)\n\t}\n}\n\n// ToSliceE casts an interface to a []interface{} type.\nfunc ToSliceE(i interface{}) ([]interface{}, error) {\n\tvar s []interface{}\n\n\tswitch v := i.(type) {\n\tcase []interface{}:\n\t\treturn append(s, v...), nil\n\tcase []map[string]interface{}:\n\t\tfor _, u := range v {\n\t\t\ts = append(s, u)\n\t\t}\n\t\treturn s, nil\n\tdefault:\n\t\treturn s, fmt.Errorf(\"unable to cast %#v of type %T to []interface{}\", i, i)\n\t}\n}\n\n// ToBoolSliceE casts an interface to a []bool type.\nfunc ToBoolSliceE(i interface{}) ([]bool, error) {\n\tif i == nil {\n\t\treturn []bool{}, fmt.Errorf(\"unable to cast %#v of type %T to []bool\", i, i)\n\t}\n\n\tswitch v := i.(type) {\n\tcase []bool:\n\t\treturn v, nil\n\t}\n\n\tkind := reflect.TypeOf(i).Kind()\n\tswitch kind {\n\tcase reflect.Slice, reflect.Array:\n\t\ts := reflect.ValueOf(i)\n\t\ta := make([]bool, s.Len())\n\t\tfor j := 0; j < s.Len(); j++ {\n\t\t\tval, err := ToBoolE(s.Index(j).Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn []bool{}, fmt.Errorf(\"unable to cast %#v of type %T to []bool\", i, i)\n\t\t\t}\n\t\t\ta[j] = val\n\t\t}\n\t\treturn a, nil\n\tdefault:\n\t\treturn []bool{}, fmt.Errorf(\"unable to cast %#v of type %T to []bool\", i, i)\n\t}\n}\n\n// ToStringSliceE casts an interface to a []string type.\nfunc ToStringSliceE(i interface{}) ([]string, error) {\n\tvar a []string\n\n\tswitch v := i.(type) {\n\tcase []interface{}:\n\t\tfor _, u := range v {\n\t\t\ta = append(a, ToString(u))\n\t\t}\n\t\treturn a, nil\n\tcase []string:\n\t\treturn v, nil\n\tcase string:\n\t\treturn strings.Fields(v), nil\n\tcase interface{}:\n\t\tstr, err := ToStringE(v)\n\t\tif err != nil {\n\t\t\treturn a, fmt.Errorf(\"unable to cast %#v of type %T to []string\", i, i)\n\t\t}\n\t\treturn []string{str}, nil\n\tdefault:\n\t\treturn a, fmt.Errorf(\"unable to cast %#v of type %T to []string\", i, i)\n\t}\n}\n\n// ToIntSliceE casts an interface to a []int type.\nfunc ToIntSliceE(i interface{}) ([]int, error) {\n\tif i == nil {\n\t\treturn []int{}, fmt.Errorf(\"unable to cast %#v of type %T to []int\", i, i)\n\t}\n\n\tswitch v := i.(type) {\n\tcase []int:\n\t\treturn v, nil\n\t}\n\n\tkind := reflect.TypeOf(i).Kind()\n\tswitch kind {\n\tcase reflect.Slice, reflect.Array:\n\t\ts := reflect.ValueOf(i)\n\t\ta := make([]int, s.Len())\n\t\tfor j := 0; j < s.Len(); j++ {\n\t\t\tval, err := ToIntE(s.Index(j).Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn []int{}, fmt.Errorf(\"unable to cast %#v of type %T to []int\", i, i)\n\t\t\t}\n\t\t\ta[j] = val\n\t\t}\n\t\treturn a, nil\n\tdefault:\n\t\treturn []int{}, fmt.Errorf(\"unable to cast %#v of type %T to []int\", i, i)\n\t}\n}\n\n// ToDurationSliceE casts an interface to a []time.Duration type.\nfunc ToDurationSliceE(i interface{}) ([]time.Duration, error) {\n\tif i == nil {\n\t\treturn []time.Duration{}, fmt.Errorf(\"unable to cast %#v of type %T to []time.Duration\", i, i)\n\t}\n\n\tswitch v := i.(type) {\n\tcase []time.Duration:\n\t\treturn v, nil\n\t}\n\n\tkind := reflect.TypeOf(i).Kind()\n\tswitch kind {\n\tcase reflect.Slice, reflect.Array:\n\t\ts := reflect.ValueOf(i)\n\t\ta := make([]time.Duration, s.Len())\n\t\tfor j := 0; j < s.Len(); j++ {\n\t\t\tval, err := ToDurationE(s.Index(j).Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn []time.Duration{}, fmt.Errorf(\"unable to cast %#v of type %T to []time.Duration\", i, i)\n\t\t\t}\n\t\t\ta[j] = val\n\t\t}\n\t\treturn a, nil\n\tdefault:\n\t\treturn []time.Duration{}, fmt.Errorf(\"unable to cast %#v of type %T to []time.Duration\", i, i)\n\t}\n}\n\n// StringToDate attempts to parse a string into a time.Time type using a\n// predefined list of formats.  If no suitable format is found, an error is\n// returned.\nfunc StringToDate(s string) (time.Time, error) {\n\treturn parseDateWith(s, []string{\n\t\ttime.RFC3339,\n\t\t\"2006-01-02T15:04:05\", // iso8601 without timezone\n\t\ttime.RFC1123Z,\n\t\ttime.RFC1123,\n\t\ttime.RFC822Z,\n\t\ttime.RFC822,\n\t\ttime.RFC850,\n\t\ttime.ANSIC,\n\t\ttime.UnixDate,\n\t\ttime.RubyDate,\n\t\t\"2006-01-02 15:04:05.999999999 -0700 MST\", // Time.String()\n\t\t\"2006-01-02\",\n\t\t\"02 Jan 2006\",\n\t\t\"2006-01-02 15:04:05 -07:00\",\n\t\t\"2006-01-02 15:04:05 -0700\",\n\t\t\"2006-01-02 15:04:05Z07:00\", // RFC3339 without T\n\t\t\"2006-01-02 15:04:05\",\n\t\ttime.Kitchen,\n\t\ttime.Stamp,\n\t\ttime.StampMilli,\n\t\ttime.StampMicro,\n\t\ttime.StampNano,\n\t})\n}\n\nfunc parseDateWith(s string, dates []string) (d time.Time, e error) {\n\tfor _, dateType := range dates {\n\t\tif d, e = time.Parse(dateType, s); e == nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn d, fmt.Errorf(\"unable to parse date: %s\", s)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/jwalterweatherman/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Steve Francia\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/jwalterweatherman/default_notepad.go",
    "content": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\npackage jwalterweatherman\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n)\n\nvar (\n\tTRACE    *log.Logger\n\tDEBUG    *log.Logger\n\tINFO     *log.Logger\n\tWARN     *log.Logger\n\tERROR    *log.Logger\n\tCRITICAL *log.Logger\n\tFATAL    *log.Logger\n\n\tLOG      *log.Logger\n\tFEEDBACK *Feedback\n\n\tdefaultNotepad *Notepad\n)\n\nfunc reloadDefaultNotepad() {\n\tTRACE = defaultNotepad.TRACE\n\tDEBUG = defaultNotepad.DEBUG\n\tINFO = defaultNotepad.INFO\n\tWARN = defaultNotepad.WARN\n\tERROR = defaultNotepad.ERROR\n\tCRITICAL = defaultNotepad.CRITICAL\n\tFATAL = defaultNotepad.FATAL\n\n\tLOG = defaultNotepad.LOG\n\tFEEDBACK = defaultNotepad.FEEDBACK\n}\n\nfunc init() {\n\tdefaultNotepad = NewNotepad(LevelError, LevelWarn, os.Stdout, ioutil.Discard, \"\", log.Ldate|log.Ltime)\n\treloadDefaultNotepad()\n}\n\n// SetLogThreshold set the log threshold for the default notepad. Trace by default.\nfunc SetLogThreshold(threshold Threshold) {\n\tdefaultNotepad.SetLogThreshold(threshold)\n\treloadDefaultNotepad()\n}\n\n// SetLogOutput set the log output for the default notepad. Discarded by default.\nfunc SetLogOutput(handle io.Writer) {\n\tdefaultNotepad.SetLogOutput(handle)\n\treloadDefaultNotepad()\n}\n\n// SetStdoutThreshold set the standard output threshold for the default notepad.\n// Info by default.\nfunc SetStdoutThreshold(threshold Threshold) {\n\tdefaultNotepad.SetStdoutThreshold(threshold)\n\treloadDefaultNotepad()\n}\n\n// SetPrefix set the prefix for the default logger. Empty by default.\nfunc SetPrefix(prefix string) {\n\tdefaultNotepad.SetPrefix(prefix)\n\treloadDefaultNotepad()\n}\n\n// SetFlags set the flags for the default logger. \"log.Ldate | log.Ltime\" by default.\nfunc SetFlags(flags int) {\n\tdefaultNotepad.SetFlags(flags)\n\treloadDefaultNotepad()\n}\n\n// Level returns the current global log threshold.\nfunc LogThreshold() Threshold {\n\treturn defaultNotepad.logThreshold\n}\n\n// Level returns the current global output threshold.\nfunc StdoutThreshold() Threshold {\n\treturn defaultNotepad.stdoutThreshold\n}\n\n// GetStdoutThreshold returns the defined Treshold for the log logger.\nfunc GetLogThreshold() Threshold {\n\treturn defaultNotepad.GetLogThreshold()\n}\n\n// GetStdoutThreshold returns the Treshold for the stdout logger.\nfunc GetStdoutThreshold() Threshold {\n\treturn defaultNotepad.GetStdoutThreshold()\n}\n\n// LogCountForLevel returns the number of log invocations for a given threshold.\nfunc LogCountForLevel(l Threshold) uint64 {\n\treturn defaultNotepad.LogCountForLevel(l)\n}\n\n// LogCountForLevelsGreaterThanorEqualTo returns the number of log invocations\n// greater than or equal to a given threshold.\nfunc LogCountForLevelsGreaterThanorEqualTo(threshold Threshold) uint64 {\n\treturn defaultNotepad.LogCountForLevelsGreaterThanorEqualTo(threshold)\n}\n\n// ResetLogCounters resets the invocation counters for all levels.\nfunc ResetLogCounters() {\n\tdefaultNotepad.ResetLogCounters()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/jwalterweatherman/log_counter.go",
    "content": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\npackage jwalterweatherman\n\nimport (\n\t\"sync/atomic\"\n)\n\ntype logCounter struct {\n\tcounter uint64\n}\n\nfunc (c *logCounter) incr() {\n\tatomic.AddUint64(&c.counter, 1)\n}\n\nfunc (c *logCounter) resetCounter() {\n\tatomic.StoreUint64(&c.counter, 0)\n}\n\nfunc (c *logCounter) getCount() uint64 {\n\treturn atomic.LoadUint64(&c.counter)\n}\n\nfunc (c *logCounter) Write(p []byte) (n int, err error) {\n\tc.incr()\n\n\treturn len(p), nil\n}\n\n// LogCountForLevel returns the number of log invocations for a given threshold.\nfunc (n *Notepad) LogCountForLevel(l Threshold) uint64 {\n\treturn n.logCounters[l].getCount()\n}\n\n// LogCountForLevelsGreaterThanorEqualTo returns the number of log invocations\n// greater than or equal to a given threshold.\nfunc (n *Notepad) LogCountForLevelsGreaterThanorEqualTo(threshold Threshold) uint64 {\n\tvar cnt uint64\n\n\tfor i := int(threshold); i < len(n.logCounters); i++ {\n\t\tcnt += n.LogCountForLevel(Threshold(i))\n\t}\n\n\treturn cnt\n}\n\n// ResetLogCounters resets the invocation counters for all levels.\nfunc (n *Notepad) ResetLogCounters() {\n\tfor _, np := range n.logCounters {\n\t\tnp.resetCounter()\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/jwalterweatherman/notepad.go",
    "content": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\npackage jwalterweatherman\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n)\n\ntype Threshold int\n\nfunc (t Threshold) String() string {\n\treturn prefixes[t]\n}\n\nconst (\n\tLevelTrace Threshold = iota\n\tLevelDebug\n\tLevelInfo\n\tLevelWarn\n\tLevelError\n\tLevelCritical\n\tLevelFatal\n)\n\nvar prefixes map[Threshold]string = map[Threshold]string{\n\tLevelTrace:    \"TRACE\",\n\tLevelDebug:    \"DEBUG\",\n\tLevelInfo:     \"INFO\",\n\tLevelWarn:     \"WARN\",\n\tLevelError:    \"ERROR\",\n\tLevelCritical: \"CRITICAL\",\n\tLevelFatal:    \"FATAL\",\n}\n\nfunc prefix(t Threshold) string {\n\treturn t.String() + \" \"\n}\n\n// Notepad is where you leave a note !\ntype Notepad struct {\n\tTRACE    *log.Logger\n\tDEBUG    *log.Logger\n\tINFO     *log.Logger\n\tWARN     *log.Logger\n\tERROR    *log.Logger\n\tCRITICAL *log.Logger\n\tFATAL    *log.Logger\n\n\tLOG      *log.Logger\n\tFEEDBACK *Feedback\n\n\tloggers         []**log.Logger\n\tlogHandle       io.Writer\n\toutHandle       io.Writer\n\tlogThreshold    Threshold\n\tstdoutThreshold Threshold\n\tprefix          string\n\tflags           int\n\n\t// One per Threshold\n\tlogCounters [7]*logCounter\n}\n\n// NewNotepad create a new notepad.\nfunc NewNotepad(outThreshold Threshold, logThreshold Threshold, outHandle, logHandle io.Writer, prefix string, flags int) *Notepad {\n\tn := &Notepad{}\n\n\tn.loggers = append(n.loggers, &n.TRACE, &n.DEBUG, &n.INFO, &n.WARN, &n.ERROR, &n.CRITICAL, &n.FATAL)\n\tn.logHandle = logHandle\n\tn.outHandle = outHandle\n\tn.logThreshold = logThreshold\n\tn.stdoutThreshold = outThreshold\n\n\tif len(prefix) != 0 {\n\t\tn.prefix = \"[\" + prefix + \"] \"\n\t} else {\n\t\tn.prefix = \"\"\n\t}\n\n\tn.flags = flags\n\n\tn.LOG = log.New(n.logHandle,\n\t\t\"LOG:   \",\n\t\tn.flags)\n\n\tn.FEEDBACK = &Feedback{n}\n\n\tn.init()\n\n\treturn n\n}\n\n// Feedback is special. It writes plainly to the output while\n// logging with the standard extra information (date, file, etc)\n// Only Println and Printf are currently provided for this\ntype Feedback struct {\n\t*Notepad\n}\n\n// init create the loggers for each level depending on the notepad thresholds\nfunc (n *Notepad) init() {\n\tbothHandle := io.MultiWriter(n.outHandle, n.logHandle)\n\n\tfor t, logger := range n.loggers {\n\t\tthreshold := Threshold(t)\n\t\tcounter := &logCounter{}\n\t\tn.logCounters[t] = counter\n\n\t\tswitch {\n\t\tcase threshold >= n.logThreshold && threshold >= n.stdoutThreshold:\n\t\t\t*logger = log.New(io.MultiWriter(counter, bothHandle), n.prefix+prefix(threshold), n.flags)\n\n\t\tcase threshold >= n.logThreshold:\n\t\t\t*logger = log.New(io.MultiWriter(counter, n.logHandle), n.prefix+prefix(threshold), n.flags)\n\n\t\tcase threshold >= n.stdoutThreshold:\n\t\t\t*logger = log.New(io.MultiWriter(counter, os.Stdout), n.prefix+prefix(threshold), n.flags)\n\n\t\tdefault:\n\t\t\t*logger = log.New(counter, n.prefix+prefix(threshold), n.flags)\n\t\t}\n\t}\n}\n\n// SetLogThreshold change the threshold above which messages are written to the\n// log file\nfunc (n *Notepad) SetLogThreshold(threshold Threshold) {\n\tn.logThreshold = threshold\n\tn.init()\n}\n\n// SetLogOutput change the file where log messages are written\nfunc (n *Notepad) SetLogOutput(handle io.Writer) {\n\tn.logHandle = handle\n\tn.init()\n}\n\n// GetStdoutThreshold returns the defined Treshold for the log logger.\nfunc (n *Notepad) GetLogThreshold() Threshold {\n\treturn n.logThreshold\n}\n\n// SetStdoutThreshold change the threshold above which messages are written to the\n// standard output\nfunc (n *Notepad) SetStdoutThreshold(threshold Threshold) {\n\tn.stdoutThreshold = threshold\n\tn.init()\n}\n\n// GetStdoutThreshold returns the Treshold for the stdout logger.\nfunc (n *Notepad) GetStdoutThreshold() Threshold {\n\treturn n.stdoutThreshold\n}\n\n// SetPrefix change the prefix used by the notepad. Prefixes are displayed between\n// brackets at the begining of the line. An empty prefix won't be displayed at all.\nfunc (n *Notepad) SetPrefix(prefix string) {\n\tif len(prefix) != 0 {\n\t\tn.prefix = \"[\" + prefix + \"] \"\n\t} else {\n\t\tn.prefix = \"\"\n\t}\n\tn.init()\n}\n\n// SetFlags choose which flags the logger will display (after prefix and message\n// level). See the package log for more informations on this.\nfunc (n *Notepad) SetFlags(flags int) {\n\tn.flags = flags\n\tn.init()\n}\n\n// Feedback is special. It writes plainly to the output while\n// logging with the standard extra information (date, file, etc)\n// Only Println and Printf are currently provided for this\nfunc (fb *Feedback) Println(v ...interface{}) {\n\ts := fmt.Sprintln(v...)\n\tfmt.Print(s)\n\tfb.LOG.Output(2, s)\n}\n\n// Feedback is special. It writes plainly to the output while\n// logging with the standard extra information (date, file, etc)\n// Only Println and Printf are currently provided for this\nfunc (fb *Feedback) Printf(format string, v ...interface{}) {\n\ts := fmt.Sprintf(format, v...)\n\tfmt.Print(s)\n\tfb.LOG.Output(2, s)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/LICENSE",
    "content": "Copyright (c) 2012 Alex Ogier. All rights reserved.\nCopyright (c) 2012 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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/bool.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Type() string {\n\treturn \"bool\"\n}\n\nfunc (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\nfunc boolConv(sval string) (interface{}, error) {\n\treturn strconv.ParseBool(sval)\n}\n\n// GetBool return the bool value of a flag with the given name\nfunc (f *FlagSet) GetBool(name string) (bool, error) {\n\tval, err := f.getFlagType(name, \"bool\", boolConv)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn val.(bool), nil\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.BoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := f.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tBoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\treturn f.BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolP(name, shorthand string, value bool, usage string) *bool {\n\tb := CommandLine.BoolP(name, shorthand, value, usage)\n\treturn b\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/bool_slice.go",
    "content": "package pflag\n\nimport (\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- boolSlice Value\ntype boolSliceValue struct {\n\tvalue   *[]bool\n\tchanged bool\n}\n\nfunc newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue {\n\tbsv := new(boolSliceValue)\n\tbsv.value = p\n\t*bsv.value = val\n\treturn bsv\n}\n\n// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag.\n// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended.\nfunc (s *boolSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tboolStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse boolean values into slice\n\tout := make([]bool, 0, len(boolStrSlice))\n\tfor _, boolStr := range boolStrSlice {\n\t\tb, err := strconv.ParseBool(strings.TrimSpace(boolStr))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout = append(out, b)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *boolSliceValue) Type() string {\n\treturn \"boolSlice\"\n}\n\n// String defines a \"native\" format for this boolean slice flag value.\nfunc (s *boolSliceValue) String() string {\n\n\tboolStrSlice := make([]string, len(*s.value))\n\tfor i, b := range *s.value {\n\t\tboolStrSlice[i] = strconv.FormatBool(b)\n\t}\n\n\tout, _ := writeAsCSV(boolStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc boolSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []bool{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]bool, len(ss))\n\tfor i, t := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseBool(t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// GetBoolSlice returns the []bool value of a flag with the given name.\nfunc (f *FlagSet) GetBoolSlice(name string) ([]bool, error) {\n\tval, err := f.getFlagType(name, \"boolSlice\", boolSliceConv)\n\tif err != nil {\n\t\treturn []bool{}, err\n\t}\n\treturn val.([]bool), nil\n}\n\n// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSliceVar defines a []bool flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc BoolSlice(name string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, \"\", value, usage)\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/count.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- count Value\ntype countValue int\n\nfunc newCountValue(val int, p *int) *countValue {\n\t*p = val\n\treturn (*countValue)(p)\n}\n\nfunc (i *countValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t// -1 means that no specific value was passed, so increment\n\tif v == -1 {\n\t\t*i = countValue(*i + 1)\n\t} else {\n\t\t*i = countValue(v)\n\t}\n\treturn err\n}\n\nfunc (i *countValue) Type() string {\n\treturn \"count\"\n}\n\nfunc (i *countValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc countConv(sval string) (interface{}, error) {\n\ti, err := strconv.Atoi(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn i, nil\n}\n\n// GetCount return the int value of a flag with the given name\nfunc (f *FlagSet) GetCount(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"count\", countConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// CountVar defines a count flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\n// A count flag will add 1 to its value evey time it is found on the command line\nfunc (f *FlagSet) CountVar(p *int, name string, usage string) {\n\tf.CountVarP(p, name, \"\", usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {\n\tflag := f.VarPF(newCountValue(0, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"-1\"\n}\n\n// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set\nfunc CountVar(p *int, name string, usage string) {\n\tCommandLine.CountVar(p, name, usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc CountVarP(p *int, name, shorthand string, usage string) {\n\tCommandLine.CountVarP(p, name, shorthand, usage)\n}\n\n// Count defines a count flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\n// A count flag will add 1 to its value evey time it is found on the command line\nfunc (f *FlagSet) Count(name string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, \"\", usage)\n\treturn p\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc (f *FlagSet) CountP(name, shorthand string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, shorthand, usage)\n\treturn p\n}\n\n// Count like Count only the flag is placed on the CommandLine isntead of a given flag set\nfunc Count(name string, usage string) *int {\n\treturn CommandLine.CountP(name, \"\", usage)\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc CountP(name, shorthand string, usage string) *int {\n\treturn CommandLine.CountP(name, shorthand, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/duration.go",
    "content": "package pflag\n\nimport (\n\t\"time\"\n)\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Type() string {\n\treturn \"duration\"\n}\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\nfunc durationConv(sval string) (interface{}, error) {\n\treturn time.ParseDuration(sval)\n}\n\n// GetDuration return the duration value of a flag with the given name\nfunc (f *FlagSet) GetDuration(name string) (time.Duration, error) {\n\tval, err := f.getFlagType(name, \"duration\", durationConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(time.Duration), nil\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, \"\", value, usage)\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/flag.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/*\nPackage pflag is a drop-in replacement for Go's flag package, implementing\nPOSIX/GNU-style --flags.\n\npflag is compatible with the GNU extensions to the POSIX recommendations\nfor command-line options. See\nhttp://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html\n\nUsage:\n\npflag is a drop-in replacement of Go's native flag package. If you import\npflag under the name \"flag\" then all code should continue to function\nwith no changes.\n\n\timport flag \"github.com/spf13/pflag\"\n\nThere is one exception to this: if you directly instantiate the Flag struct\nthere is one more field \"Shorthand\" that you will need to set.\nMost code never instantiates this struct directly, and instead uses\nfunctions such as String(), BoolVar(), and Var(), and is therefore\nunaffected.\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\nIf you like, you can bind the flag to a variable using the Var() functions.\n\tvar flagvar int\n\tfunc init() {\n\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t}\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n\tflag.Parse()\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n\tfmt.Println(\"ip has value \", *ip)\n\tfmt.Println(\"flagvar has value \", flagvar)\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nThe pflag package also defines some new functions that are not in flag,\nthat give one-letter shorthands for flags. You can use these by appending\n'P' to the name of any function that defines a flag.\n\tvar ip = flag.IntP(\"flagname\", \"f\", 1234, \"help message\")\n\tvar flagvar bool\n\tfunc init() {\n\t\tflag.BoolVarP(\"boolname\", \"b\", true, \"help message\")\n\t}\n\tflag.VarP(&flagVar, \"varname\", \"v\", 1234, \"help message\")\nShorthand letters can be used with single dashes on the command line.\nBoolean shorthand flags can be combined with other shorthand flags.\n\nCommand line flag syntax:\n\t--flag    // boolean flags only\n\t--flag=x\n\nUnlike the flag package, a single dash before an option means something\ndifferent than a double dash. Single dashes signify a series of shorthand\nletters for flags. All but the last shorthand letter must be boolean flags.\n\t// boolean flags\n\t-f\n\t-abc\n\t// non-boolean flags\n\t-n 1234\n\t-Ifile\n\t// mixed\n\t-abcs \"hello\"\n\t-abcn1234\n\nFlag parsing stops after the terminator \"--\". Unlike the flag package,\nflags can be interspersed with arguments anywhere on the command line\nbefore this terminator.\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags (in their long form) accept 1, 0, t, f, true, false,\nTRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n*/\npackage pflag\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.\nvar ErrHelp = errors.New(\"pflag: help requested\")\n\n// ErrorHandling defines how to handle flag parsing errors.\ntype ErrorHandling int\n\nconst (\n\t// ContinueOnError will return an err from Parse() if an error is found\n\tContinueOnError ErrorHandling = iota\n\t// ExitOnError will call os.Exit(2) if an error is found when parsing\n\tExitOnError\n\t// PanicOnError will panic() if an error is found when parsing flags\n\tPanicOnError\n)\n\n// NormalizedName is a flag name that has been normalized according to rules\n// for the FlagSet (e.g. making '-' and '_' equivalent).\ntype NormalizedName string\n\n// A FlagSet represents a set of defined flags.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\t// SortFlags is used to indicate, if user wants to have sorted flags in\n\t// help/usage messages.\n\tSortFlags bool\n\n\tname              string\n\tparsed            bool\n\tactual            map[NormalizedName]*Flag\n\torderedActual     []*Flag\n\tsortedActual      []*Flag\n\tformal            map[NormalizedName]*Flag\n\torderedFormal     []*Flag\n\tsortedFormal      []*Flag\n\tshorthands        map[byte]*Flag\n\targs              []string // arguments after flags\n\targsLenAtDash     int      // len(args) when a '--' was located when parsing, or -1 if no --\n\terrorHandling     ErrorHandling\n\toutput            io.Writer // nil means stderr; use out() accessor\n\tinterspersed      bool      // allow interspersed option/non-option args\n\tnormalizeNameFunc func(f *FlagSet, name string) NormalizedName\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName                string              // name as it appears on command line\n\tShorthand           string              // one-letter abbreviated flag\n\tUsage               string              // help message\n\tValue               Value               // value as set\n\tDefValue            string              // default value (as text); for usage message\n\tChanged             bool                // If the user set the value (or if left to default)\n\tNoOptDefVal         string              // default value (as text); if the flag is on the command line without any options\n\tDeprecated          string              // If this flag is deprecated, this string is the new or now thing to use\n\tHidden              bool                // used by cobra.Command to allow flags to be hidden from help/usage text\n\tShorthandDeprecated string              // If the shorthand of this flag is deprecated, this string is the new or now thing to use\n\tAnnotations         map[string][]string // used by cobra.Command bash autocomple code\n}\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\ntype Value interface {\n\tString() string\n\tSet(string) error\n\tType() string\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[NormalizedName]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor k := range flags {\n\t\tlist[i] = string(k)\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[NormalizedName(name)]\n\t}\n\treturn result\n}\n\n// SetNormalizeFunc allows you to add a function which can translate flag names.\n// Flags added to the FlagSet will be translated and then when anything tries to\n// look up the flag that will also be translated. So it would be possible to create\n// a flag named \"getURL\" and have it translated to \"geturl\".  A user could then pass\n// \"--getUrl\" which may also be translated to \"geturl\" and everything will work.\nfunc (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) {\n\tf.normalizeNameFunc = n\n\tf.sortedFormal = f.sortedFormal[:0]\n\tfor k, v := range f.orderedFormal {\n\t\tdelete(f.formal, NormalizedName(v.Name))\n\t\tnname := f.normalizeFlagName(v.Name)\n\t\tv.Name = string(nname)\n\t\tf.formal[nname] = v\n\t\tf.orderedFormal[k] = v\n\t}\n}\n\n// GetNormalizeFunc returns the previously set NormalizeFunc of a function which\n// does no translation, if not set previously.\nfunc (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) NormalizedName {\n\tif f.normalizeNameFunc != nil {\n\t\treturn f.normalizeNameFunc\n\t}\n\treturn func(f *FlagSet, name string) NormalizedName { return NormalizedName(name) }\n}\n\nfunc (f *FlagSet) normalizeFlagName(name string) NormalizedName {\n\tn := f.GetNormalizeFunc()\n\treturn n(f, name)\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tif len(f.formal) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.formal) != len(f.sortedFormal) {\n\t\t\tf.sortedFormal = sortFlags(f.formal)\n\t\t}\n\t\tflags = f.sortedFormal\n\t} else {\n\t\tflags = f.orderedFormal\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// HasFlags returns a bool to indicate if the FlagSet has any flags definied.\nfunc (f *FlagSet) HasFlags() bool {\n\treturn len(f.formal) > 0\n}\n\n// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags\n// definied that are not hidden or deprecated.\nfunc (f *FlagSet) HasAvailableFlags() bool {\n\tfor _, flag := range f.formal {\n\t\tif !flag.Hidden && len(flag.Deprecated) == 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// VisitAll visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tif len(f.actual) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.actual) != len(f.sortedActual) {\n\t\t\tf.sortedActual = sortFlags(f.actual)\n\t\t}\n\t\tflags = f.sortedActual\n\t} else {\n\t\tflags = f.orderedActual\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.lookup(f.normalizeFlagName(name))\n}\n\n// lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) lookup(name NormalizedName) *Flag {\n\treturn f.formal[name]\n}\n\n// func to return a given type for a given flag name\nfunc (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\terr := fmt.Errorf(\"flag accessed but not defined: %s\", name)\n\t\treturn nil, err\n\t}\n\n\tif flag.Value.Type() != ftype {\n\t\terr := fmt.Errorf(\"trying to get %s value of flag of type %s\", ftype, flag.Value.Type())\n\t\treturn nil, err\n\t}\n\n\tsval := flag.Value.String()\n\tresult, err := convFunc(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result, nil\n}\n\n// ArgsLenAtDash will return the length of f.Args at the moment when a -- was\n// found during arg parsing. This allows your program to know which args were\n// before the -- and which came after.\nfunc (f *FlagSet) ArgsLenAtDash() int {\n\treturn f.argsLenAtDash\n}\n\n// MarkDeprecated indicated that a flag is deprecated in your program. It will\n// continue to function but will not show up in help or usage messages. Using\n// this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tif len(usageMessage) == 0 {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.Deprecated = usageMessage\n\treturn nil\n}\n\n// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your\n// program. It will continue to function but will not show up in help or usage\n// messages. Using this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tif len(usageMessage) == 0 {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.ShorthandDeprecated = usageMessage\n\treturn nil\n}\n\n// MarkHidden sets a flag to 'hidden' in your program. It will continue to\n// function but will not show up in help or usage messages.\nfunc (f *FlagSet) MarkHidden(name string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tflag.Hidden = true\n\treturn nil\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.Lookup(name)\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[NormalizedName]*Flag)\n\t}\n\tf.actual[normalName] = flag\n\tf.orderedActual = append(f.orderedActual, flag)\n\tflag.Changed = true\n\tif len(flag.Deprecated) > 0 {\n\t\tfmt.Fprintf(os.Stderr, \"Flag --%s has been deprecated, %s\\n\", flag.Name, flag.Deprecated)\n\t}\n\treturn nil\n}\n\n// SetAnnotation allows one to set arbitrary annotations on a flag in the FlagSet.\n// This is sometimes used by spf13/cobra programs which want to generate additional\n// bash completion information.\nfunc (f *FlagSet) SetAnnotation(name, key string, values []string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\tif flag.Annotations == nil {\n\t\tflag.Annotations = map[string][]string{}\n\t}\n\tflag.Annotations[key] = values\n\treturn nil\n}\n\n// Changed returns true if the flag was explicitly set during Parse() and false\n// otherwise\nfunc (f *FlagSet) Changed(name string) bool {\n\tflag := f.Lookup(name)\n\t// If a flag doesn't exist, it wasn't changed....\n\tif flag == nil {\n\t\treturn false\n\t}\n\treturn flag.Changed\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// PrintDefaults prints, to standard error unless configured\n// otherwise, the default values of all defined flags in the set.\nfunc (f *FlagSet) PrintDefaults() {\n\tusages := f.FlagUsages()\n\tfmt.Fprint(f.out(), usages)\n}\n\n// defaultIsZeroValue returns true if the default value for this flag represents\n// a zero value.\nfunc (f *Flag) defaultIsZeroValue() bool {\n\tswitch f.Value.(type) {\n\tcase boolFlag:\n\t\treturn f.DefValue == \"false\"\n\tcase *durationValue:\n\t\t// Beginning in Go 1.7, duration zero values are \"0s\"\n\t\treturn f.DefValue == \"0\" || f.DefValue == \"0s\"\n\tcase *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value:\n\t\treturn f.DefValue == \"0\"\n\tcase *stringValue:\n\t\treturn f.DefValue == \"\"\n\tcase *ipValue, *ipMaskValue, *ipNetValue:\n\t\treturn f.DefValue == \"<nil>\"\n\tcase *intSliceValue, *stringSliceValue, *stringArrayValue:\n\t\treturn f.DefValue == \"[]\"\n\tdefault:\n\t\tswitch f.Value.String() {\n\t\tcase \"false\":\n\t\t\treturn true\n\t\tcase \"<nil>\":\n\t\t\treturn true\n\t\tcase \"\":\n\t\t\treturn true\n\t\tcase \"0\":\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\n\tname = flag.Value.Type()\n\tswitch name {\n\tcase \"bool\":\n\t\tname = \"\"\n\tcase \"float64\":\n\t\tname = \"float\"\n\tcase \"int64\":\n\t\tname = \"int\"\n\tcase \"uint64\":\n\t\tname = \"uint\"\n\t}\n\n\treturn\n}\n\n// Splits the string `s` on whitespace into an initial substring up to\n// `i` runes in length and the remainder. Will go `slop` over `i` if\n// that encompasses the entire string (which allows the caller to\n// avoid short orphan words on the final line).\nfunc wrapN(i, slop int, s string) (string, string) {\n\tif i+slop > len(s) {\n\t\treturn s, \"\"\n\t}\n\n\tw := strings.LastIndexAny(s[:i], \" \\t\")\n\tif w <= 0 {\n\t\treturn s, \"\"\n\t}\n\n\treturn s[:w], s[w+1:]\n}\n\n// Wraps the string `s` to a maximum width `w` with leading indent\n// `i`. The first line is not indented (this is assumed to be done by\n// caller). Pass `w` == 0 to do no wrapping\nfunc wrap(i, w int, s string) string {\n\tif w == 0 {\n\t\treturn s\n\t}\n\n\t// space between indent i and end of line width w into which\n\t// we should wrap the text.\n\twrap := w - i\n\n\tvar r, l string\n\n\t// Not enough space for sensible wrapping. Wrap as a block on\n\t// the next line instead.\n\tif wrap < 24 {\n\t\ti = 16\n\t\twrap = w - i\n\t\tr += \"\\n\" + strings.Repeat(\" \", i)\n\t}\n\t// If still not enough space then don't even try to wrap.\n\tif wrap < 24 {\n\t\treturn s\n\t}\n\n\t// Try to avoid short orphan words on the final line, by\n\t// allowing wrapN to go a bit over if that would fit in the\n\t// remainder of the line.\n\tslop := 5\n\twrap = wrap - slop\n\n\t// Handle first line, which is indented by the caller (or the\n\t// special case above)\n\tl, s = wrapN(wrap, slop, s)\n\tr = r + l\n\n\t// Now wrap the rest\n\tfor s != \"\" {\n\t\tvar t string\n\n\t\tt, s = wrapN(wrap, slop, s)\n\t\tr = r + \"\\n\" + strings.Repeat(\" \", i) + t\n\t}\n\n\treturn r\n\n}\n\n// FlagUsagesWrapped returns a string containing the usage information\n// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no\n// wrapping)\nfunc (f *FlagSet) FlagUsagesWrapped(cols int) string {\n\tx := new(bytes.Buffer)\n\n\tlines := make([]string, 0, len(f.formal))\n\n\tmaxlen := 0\n\tf.VisitAll(func(flag *Flag) {\n\t\tif len(flag.Deprecated) > 0 || flag.Hidden {\n\t\t\treturn\n\t\t}\n\n\t\tline := \"\"\n\t\tif len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 {\n\t\t\tline = fmt.Sprintf(\"  -%s, --%s\", flag.Shorthand, flag.Name)\n\t\t} else {\n\t\t\tline = fmt.Sprintf(\"      --%s\", flag.Name)\n\t\t}\n\n\t\tvarname, usage := UnquoteUsage(flag)\n\t\tif len(varname) > 0 {\n\t\t\tline += \" \" + varname\n\t\t}\n\t\tif len(flag.NoOptDefVal) > 0 {\n\t\t\tswitch flag.Value.Type() {\n\t\t\tcase \"string\":\n\t\t\t\tline += fmt.Sprintf(\"[=\\\"%s\\\"]\", flag.NoOptDefVal)\n\t\t\tcase \"bool\":\n\t\t\t\tif flag.NoOptDefVal != \"true\" {\n\t\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t}\n\t\t}\n\n\t\t// This special character will be replaced with spacing once the\n\t\t// correct alignment is calculated\n\t\tline += \"\\x00\"\n\t\tif len(line) > maxlen {\n\t\t\tmaxlen = len(line)\n\t\t}\n\n\t\tline += usage\n\t\tif !flag.defaultIsZeroValue() {\n\t\t\tif flag.Value.Type() == \"string\" {\n\t\t\t\tline += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\tline += fmt.Sprintf(\" (default %s)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\n\t\tlines = append(lines, line)\n\t})\n\n\tfor _, line := range lines {\n\t\tsidx := strings.Index(line, \"\\x00\")\n\t\tspacing := strings.Repeat(\" \", maxlen-sidx)\n\t\t// maxlen + 2 comes from + 1 for the \\x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx\n\t\tfmt.Fprintln(x, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))\n\t}\n\n\treturn x.String()\n}\n\n// FlagUsages returns a string containing the usage information for all flags in\n// the FlagSet\nfunc (f *FlagSet) FlagUsages() string {\n\treturn f.FlagUsagesWrapped(0)\n}\n\n// PrintDefaults prints to standard error the default values of all defined command-line flags.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\tf.VarP(value, name, \"\", usage)\n}\n\n// VarPF is like VarP, but returns the flag created\nfunc (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:      name,\n\t\tShorthand: shorthand,\n\t\tUsage:     usage,\n\t\tValue:     value,\n\t\tDefValue:  value.String(),\n\t}\n\tf.AddFlag(flag)\n\treturn flag\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) VarP(value Value, name, shorthand, usage string) {\n\tf.VarPF(value, name, shorthand, usage)\n}\n\n// AddFlag will add the flag to the FlagSet\nfunc (f *FlagSet) AddFlag(flag *Flag) {\n\t// Call normalizeFlagName function only once\n\tnormalizedFlagName := f.normalizeFlagName(flag.Name)\n\n\t_, alreadythere := f.formal[normalizedFlagName]\n\tif alreadythere {\n\t\tmsg := fmt.Sprintf(\"%s flag redefined: %s\", f.name, flag.Name)\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[NormalizedName]*Flag)\n\t}\n\n\tflag.Name = string(normalizedFlagName)\n\tf.formal[normalizedFlagName] = flag\n\tf.orderedFormal = append(f.orderedFormal, flag)\n\n\tif len(flag.Shorthand) == 0 {\n\t\treturn\n\t}\n\tif len(flag.Shorthand) > 1 {\n\t\tfmt.Fprintf(f.out(), \"%s shorthand more than ASCII character: %s\\n\", f.name, flag.Shorthand)\n\t\tpanic(\"shorthand is more than one character\")\n\t}\n\tif f.shorthands == nil {\n\t\tf.shorthands = make(map[byte]*Flag)\n\t}\n\tc := flag.Shorthand[0]\n\told, alreadythere := f.shorthands[c]\n\tif alreadythere {\n\t\tfmt.Fprintf(f.out(), \"%s shorthand reused: %q for %s already used for %s\\n\", f.name, c, flag.Name, old.Name)\n\t\tpanic(\"shorthand redefinition\")\n\t}\n\tf.shorthands[c] = flag\n}\n\n// AddFlagSet adds one FlagSet to another. If a flag is already present in f\n// the flag from newSet will be ignored\nfunc (f *FlagSet) AddFlagSet(newSet *FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(flag *Flag) {\n\t\tif f.Lookup(flag.Name) == nil {\n\t\t\tf.AddFlag(flag)\n\t\t}\n\t})\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.VarP(value, name, \"\", usage)\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc VarP(value Value, name, shorthand, usage string) {\n\tCommandLine.VarP(value, name, shorthand, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set, or the usage function if\n// the flag set is CommandLine.\nfunc (f *FlagSet) usage() {\n\tif f == CommandLine {\n\t\tUsage()\n\t} else if f.Usage == nil {\n\t\tdefaultUsage(f)\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\nfunc (f *FlagSet) setFlag(flag *Flag, value string, origArg string) error {\n\tif err := flag.Value.Set(value); err != nil {\n\t\treturn f.failf(\"invalid argument %q for %s: %v\", value, origArg, err)\n\t}\n\t// mark as visited for Visit()\n\tif f.actual == nil {\n\t\tf.actual = make(map[NormalizedName]*Flag)\n\t}\n\tf.actual[f.normalizeFlagName(flag.Name)] = flag\n\tf.orderedActual = append(f.orderedActual, flag)\n\tflag.Changed = true\n\tif len(flag.Deprecated) > 0 {\n\t\tfmt.Fprintf(os.Stderr, \"Flag --%s has been deprecated, %s\\n\", flag.Name, flag.Deprecated)\n\t}\n\tif len(flag.ShorthandDeprecated) > 0 && containsShorthand(origArg, flag.Shorthand) {\n\t\tfmt.Fprintf(os.Stderr, \"Flag shorthand -%s has been deprecated, %s\\n\", flag.Shorthand, flag.ShorthandDeprecated)\n\t}\n\treturn nil\n}\n\nfunc containsShorthand(arg, shorthand string) bool {\n\t// filter out flags --<flag_name>\n\tif strings.HasPrefix(arg, \"-\") {\n\t\treturn false\n\t}\n\targ = strings.SplitN(arg, \"=\", 2)[0]\n\treturn strings.Contains(arg, shorthand)\n}\n\nfunc (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tname := s[2:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\terr = f.failf(\"bad flag syntax: %s\", s)\n\t\treturn\n\t}\n\tsplit := strings.SplitN(name, \"=\", 2)\n\tname = split[0]\n\tflag, alreadythere := f.formal[f.normalizeFlagName(name)]\n\tif !alreadythere {\n\t\tif name == \"help\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn a, ErrHelp\n\t\t}\n\t\terr = f.failf(\"unknown flag: --%s\", name)\n\t\treturn\n\t}\n\tvar value string\n\tif len(split) == 2 {\n\t\t// '--flag=arg'\n\t\tvalue = split[1]\n\t} else if len(flag.NoOptDefVal) > 0 {\n\t\t// '--flag' (arg was optional)\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(a) > 0 {\n\t\t// '--flag arg'\n\t\tvalue = a[0]\n\t\ta = a[1:]\n\t} else {\n\t\t// '--flag' (arg was required)\n\t\terr = f.failf(\"flag needs an argument: %s\", s)\n\t\treturn\n\t}\n\terr = fn(flag, value, s)\n\treturn\n}\n\nfunc (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) {\n\tif strings.HasPrefix(shorthands, \"test.\") {\n\t\treturn\n\t}\n\toutArgs = args\n\toutShorts = shorthands[1:]\n\tc := shorthands[0]\n\n\tflag, alreadythere := f.shorthands[c]\n\tif !alreadythere {\n\t\tif c == 'h' { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\terr = ErrHelp\n\t\t\treturn\n\t\t}\n\t\t//TODO continue on error\n\t\terr = f.failf(\"unknown shorthand flag: %q in -%s\", c, shorthands)\n\t\treturn\n\t}\n\tvar value string\n\tif len(shorthands) > 2 && shorthands[1] == '=' {\n\t\tvalue = shorthands[2:]\n\t\toutShorts = \"\"\n\t} else if len(flag.NoOptDefVal) > 0 {\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(shorthands) > 1 {\n\t\tvalue = shorthands[1:]\n\t\toutShorts = \"\"\n\t} else if len(args) > 0 {\n\t\tvalue = args[0]\n\t\toutArgs = args[1:]\n\t} else {\n\t\terr = f.failf(\"flag needs an argument: %q in -%s\", c, shorthands)\n\t\treturn\n\t}\n\terr = fn(flag, value, shorthands)\n\treturn\n}\n\nfunc (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tshorthands := s[1:]\n\n\tfor len(shorthands) > 0 {\n\t\tshorthands, a, err = f.parseSingleShortArg(shorthands, args, fn)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {\n\tfor len(args) > 0 {\n\t\ts := args[0]\n\t\targs = args[1:]\n\t\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\t\tif !f.interspersed {\n\t\t\t\tf.args = append(f.args, s)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tf.args = append(f.args, s)\n\t\t\tcontinue\n\t\t}\n\n\t\tif s[1] == '-' {\n\t\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\t\tf.argsLenAtDash = len(f.args)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\targs, err = f.parseLongArg(s, args, fn)\n\t\t} else {\n\t\t\targs, err = f.parseShortArg(s, args, fn)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name.  Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help was set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = make([]string, 0, len(arguments))\n\n\tassign := func(flag *Flag, value, origArg string) error {\n\t\treturn f.setFlag(flag, value, origArg)\n\t}\n\n\terr := f.parseArgs(arguments, assign)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype parseFunc func(flag *Flag, value, origArg string) error\n\n// ParseAll parses flag definitions from the argument list, which should not\n// include the command name. The arguments for fn are flag and value. Must be\n// called after all flags in the FlagSet are defined and before flags are\n// accessed by the program. The return value will be ErrHelp if -help was set\n// but not defined.\nfunc (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error {\n\tf.parsed = true\n\tf.args = make([]string, 0, len(arguments))\n\n\tassign := func(flag *Flag, value, origArg string) error {\n\t\treturn fn(flag, value)\n\t}\n\n\terr := f.parseArgs(arguments, assign)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// ParseAll parses the command-line flags from os.Args[1:] and called fn for each.\n// The arguments for fn are flag and value. Must be called after all flags are\n// defined and before flags are accessed by the program.\nfunc ParseAll(fn func(flag *Flag, value string) error) {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.ParseAll(os.Args[1:], fn)\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc SetInterspersed(interspersed bool) {\n\tCommandLine.SetInterspersed(interspersed)\n}\n\n// Parsed returns true if the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name,\n// error handling property and SortFlags set to true.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t\targsLenAtDash: -1,\n\t\tinterspersed:  true,\n\t\tSortFlags:     true,\n\t}\n\treturn f\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc (f *FlagSet) SetInterspersed(interspersed bool) {\n\tf.interspersed = interspersed\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.errorHandling = errorHandling\n\tf.argsLenAtDash = -1\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/float32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float32 Value\ntype float32Value float32\n\nfunc newFloat32Value(val float32, p *float32) *float32Value {\n\t*p = val\n\treturn (*float32Value)(p)\n}\n\nfunc (f *float32Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 32)\n\t*f = float32Value(v)\n\treturn err\n}\n\nfunc (f *float32Value) Type() string {\n\treturn \"float32\"\n}\n\nfunc (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }\n\nfunc float32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseFloat(sval, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn float32(v), nil\n}\n\n// GetFloat32 return the float32 value of a flag with the given name\nfunc (f *FlagSet) GetFloat32(name string) (float32, error) {\n\tval, err := f.getFlagType(name, \"float32\", float32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float32), nil\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc Float32Var(p *float32, name string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc (f *FlagSet) Float32(name string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32P(name, shorthand string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc Float32(name string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, \"\", value, usage)\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32P(name, shorthand string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/float64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Type() string {\n\treturn \"float64\"\n}\n\nfunc (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }\n\nfunc float64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseFloat(sval, 64)\n}\n\n// GetFloat64 return the float64 value of a flag with the given name\nfunc (f *FlagSet) GetFloat64(name string) (float64, error) {\n\tval, err := f.getFlagType(name, \"float64\", float64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float64), nil\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64P(name, shorthand string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, \"\", value, usage)\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64P(name, shorthand string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/golangflag.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\npackage pflag\n\nimport (\n\tgoflag \"flag\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// flagValueWrapper implements pflag.Value around a flag.Value.  The main\n// difference here is the addition of the Type method that returns a string\n// name of the type.  As this is generally unknown, we approximate that with\n// reflection.\ntype flagValueWrapper struct {\n\tinner    goflag.Value\n\tflagType string\n}\n\n// We are just copying the boolFlag interface out of goflag as that is what\n// they use to decide if a flag should get \"true\" when no arg is given.\ntype goBoolFlag interface {\n\tgoflag.Value\n\tIsBoolFlag() bool\n}\n\nfunc wrapFlagValue(v goflag.Value) Value {\n\t// If the flag.Value happens to also be a pflag.Value, just use it directly.\n\tif pv, ok := v.(Value); ok {\n\t\treturn pv\n\t}\n\n\tpv := &flagValueWrapper{\n\t\tinner: v,\n\t}\n\n\tt := reflect.TypeOf(v)\n\tif t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\n\tpv.flagType = strings.TrimSuffix(t.Name(), \"Value\")\n\treturn pv\n}\n\nfunc (v *flagValueWrapper) String() string {\n\treturn v.inner.String()\n}\n\nfunc (v *flagValueWrapper) Set(s string) error {\n\treturn v.inner.Set(s)\n}\n\nfunc (v *flagValueWrapper) Type() string {\n\treturn v.flagType\n}\n\n// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag\n// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei\n// with both `-v` and `--v` in flags. If the golang flag was more than a single\n// character (ex: `verbose`) it will only be accessible via `--verbose`\nfunc PFlagFromGoFlag(goflag *goflag.Flag) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:  goflag.Name,\n\t\tUsage: goflag.Usage,\n\t\tValue: wrapFlagValue(goflag.Value),\n\t\t// Looks like golang flags don't set DefValue correctly  :-(\n\t\t//DefValue: goflag.DefValue,\n\t\tDefValue: goflag.Value.String(),\n\t}\n\t// Ex: if the golang flag was -v, allow both -v and --v to work\n\tif len(flag.Name) == 1 {\n\t\tflag.Shorthand = flag.Name\n\t}\n\tif fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() {\n\t\tflag.NoOptDefVal = \"true\"\n\t}\n\treturn flag\n}\n\n// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlag(goflag *goflag.Flag) {\n\tif f.Lookup(goflag.Name) != nil {\n\t\treturn\n\t}\n\tnewflag := PFlagFromGoFlag(goflag)\n\tf.AddFlag(newflag)\n}\n\n// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(goflag *goflag.Flag) {\n\t\tf.AddGoFlag(goflag)\n\t})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/int.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Type() string {\n\treturn \"int\"\n}\n\nfunc (i *intValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc intConv(sval string) (interface{}, error) {\n\treturn strconv.Atoi(sval)\n}\n\n// GetInt return the int value of a flag with the given name\nfunc (f *FlagSet) GetInt(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"int\", intConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntP(name, shorthand string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, \"\", value, usage)\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc IntP(name, shorthand string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/int32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int32 Value\ntype int32Value int32\n\nfunc newInt32Value(val int32, p *int32) *int32Value {\n\t*p = val\n\treturn (*int32Value)(p)\n}\n\nfunc (i *int32Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 32)\n\t*i = int32Value(v)\n\treturn err\n}\n\nfunc (i *int32Value) Type() string {\n\treturn \"int32\"\n}\n\nfunc (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(v), nil\n}\n\n// GetInt32 return the int32 value of a flag with the given name\nfunc (f *FlagSet) GetInt32(name string) (int32, error) {\n\tval, err := f.getFlagType(name, \"int32\", int32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int32), nil\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc Int32Var(p *int32, name string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc (f *FlagSet) Int32(name string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32P(name, shorthand string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc Int32(name string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, \"\", value, usage)\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32P(name, shorthand string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/int64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Type() string {\n\treturn \"int64\"\n}\n\nfunc (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseInt(sval, 0, 64)\n}\n\n// GetInt64 return the int64 value of a flag with the given name\nfunc (f *FlagSet) GetInt64(name string) (int64, error) {\n\tval, err := f.getFlagType(name, \"int64\", int64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int64), nil\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64P(name, shorthand string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, \"\", value, usage)\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64P(name, shorthand string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/int8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int8 Value\ntype int8Value int8\n\nfunc newInt8Value(val int8, p *int8) *int8Value {\n\t*p = val\n\treturn (*int8Value)(p)\n}\n\nfunc (i *int8Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 8)\n\t*i = int8Value(v)\n\treturn err\n}\n\nfunc (i *int8Value) Type() string {\n\treturn \"int8\"\n}\n\nfunc (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int8(v), nil\n}\n\n// GetInt8 return the int8 value of a flag with the given name\nfunc (f *FlagSet) GetInt8(name string) (int8, error) {\n\tval, err := f.getFlagType(name, \"int8\", int8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int8), nil\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc Int8Var(p *int8, name string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc (f *FlagSet) Int8(name string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8P(name, shorthand string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc Int8(name string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, \"\", value, usage)\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8P(name, shorthand string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/int_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- intSlice Value\ntype intSliceValue struct {\n\tvalue   *[]int\n\tchanged bool\n}\n\nfunc newIntSliceValue(val []int, p *[]int) *intSliceValue {\n\tisv := new(intSliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *intSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *intSliceValue) Type() string {\n\treturn \"intSlice\"\n}\n\nfunc (s *intSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc intSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []int{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetIntSlice return the []int value of a flag with the given name\nfunc (f *FlagSet) GetIntSlice(name string) ([]int, error) {\n\tval, err := f.getFlagType(name, \"intSlice\", intSliceConv)\n\tif err != nil {\n\t\treturn []int{}, err\n\t}\n\treturn val.([]int), nil\n}\n\n// IntSliceVar defines a intSlice flag with specified name, default value, and usage string.\n// The argument p points to a []int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSliceVar defines a int[] flag with specified name, default value, and usage string.\n// The argument p points to a int[] variable in which to store the value of the flag.\nfunc IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc IntSlice(name string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, \"\", value, usage)\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/ip.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- net.IP value\ntype ipValue net.IP\n\nfunc newIPValue(val net.IP, p *net.IP) *ipValue {\n\t*p = val\n\treturn (*ipValue)(p)\n}\n\nfunc (i *ipValue) String() string { return net.IP(*i).String() }\nfunc (i *ipValue) Set(s string) error {\n\tip := net.ParseIP(strings.TrimSpace(s))\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP: %q\", s)\n\t}\n\t*i = ipValue(ip)\n\treturn nil\n}\n\nfunc (i *ipValue) Type() string {\n\treturn \"ip\"\n}\n\nfunc ipConv(sval string) (interface{}, error) {\n\tip := net.ParseIP(sval)\n\tif ip != nil {\n\t\treturn ip, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n}\n\n// GetIP return the net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIP(name string) (net.IP, error) {\n\tval, err := f.getFlagType(name, \"ip\", ipConv)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IP), nil\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc IP(name string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, \"\", value, usage)\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/ip_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- ipSlice Value\ntype ipSliceValue struct {\n\tvalue   *[]net.IP\n\tchanged bool\n}\n\nfunc newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue {\n\tipsv := new(ipSliceValue)\n\tipsv.value = p\n\t*ipsv.value = val\n\treturn ipsv\n}\n\n// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag.\n// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended.\nfunc (s *ipSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tipStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse ip values into slice\n\tout := make([]net.IP, 0, len(ipStrSlice))\n\tfor _, ipStr := range ipStrSlice {\n\t\tip := net.ParseIP(strings.TrimSpace(ipStr))\n\t\tif ip == nil {\n\t\t\treturn fmt.Errorf(\"invalid string being converted to IP address: %s\", ipStr)\n\t\t}\n\t\tout = append(out, ip)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *ipSliceValue) Type() string {\n\treturn \"ipSlice\"\n}\n\n// String defines a \"native\" format for this net.IP slice flag value.\nfunc (s *ipSliceValue) String() string {\n\n\tipStrSlice := make([]string, len(*s.value))\n\tfor i, ip := range *s.value {\n\t\tipStrSlice[i] = ip.String()\n\t}\n\n\tout, _ := writeAsCSV(ipStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc ipSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Emtpy string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []net.IP{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]net.IP, len(ss))\n\tfor i, sval := range ss {\n\t\tip := net.ParseIP(strings.TrimSpace(sval))\n\t\tif ip == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n\t\t}\n\t\tout[i] = ip\n\t}\n\treturn out, nil\n}\n\n// GetIPSlice returns the []net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) {\n\tval, err := f.getFlagType(name, \"ipSlice\", ipSliceConv)\n\tif err != nil {\n\t\treturn []net.IP{}, err\n\t}\n\treturn val.([]net.IP), nil\n}\n\n// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of that flag.\nfunc (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of the flag.\nfunc IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, \"\", value, usage)\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/ipmask.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n)\n\n// -- net.IPMask value\ntype ipMaskValue net.IPMask\n\nfunc newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {\n\t*p = val\n\treturn (*ipMaskValue)(p)\n}\n\nfunc (i *ipMaskValue) String() string { return net.IPMask(*i).String() }\nfunc (i *ipMaskValue) Set(s string) error {\n\tip := ParseIPv4Mask(s)\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP mask: %q\", s)\n\t}\n\t*i = ipMaskValue(ip)\n\treturn nil\n}\n\nfunc (i *ipMaskValue) Type() string {\n\treturn \"ipMask\"\n}\n\n// ParseIPv4Mask written in IP form (e.g. 255.255.255.0).\n// This function should really belong to the net package.\nfunc ParseIPv4Mask(s string) net.IPMask {\n\tmask := net.ParseIP(s)\n\tif mask == nil {\n\t\tif len(s) != 8 {\n\t\t\treturn nil\n\t\t}\n\t\t// net.IPMask.String() actually outputs things like ffffff00\n\t\t// so write a horrible parser for that as well  :-(\n\t\tm := []int{}\n\t\tfor i := 0; i < 4; i++ {\n\t\t\tb := \"0x\" + s[2*i:2*i+2]\n\t\t\td, err := strconv.ParseInt(b, 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tm = append(m, int(d))\n\t\t}\n\t\ts := fmt.Sprintf(\"%d.%d.%d.%d\", m[0], m[1], m[2], m[3])\n\t\tmask = net.ParseIP(s)\n\t\tif mask == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])\n}\n\nfunc parseIPv4Mask(sval string) (interface{}, error) {\n\tmask := ParseIPv4Mask(sval)\n\tif mask == nil {\n\t\treturn nil, fmt.Errorf(\"unable to parse %s as net.IPMask\", sval)\n\t}\n\treturn mask, nil\n}\n\n// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name\nfunc (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {\n\tval, err := f.getFlagType(name, \"ipMask\", parseIPv4Mask)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IPMask), nil\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPMaskP is like IPMask, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, \"\", value, usage)\n}\n\n// IPMaskP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/ipnet.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// IPNet adapts net.IPNet for use as a flag.\ntype ipNetValue net.IPNet\n\nfunc (ipnet ipNetValue) String() string {\n\tn := net.IPNet(ipnet)\n\treturn n.String()\n}\n\nfunc (ipnet *ipNetValue) Set(value string) error {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(value))\n\tif err != nil {\n\t\treturn err\n\t}\n\t*ipnet = ipNetValue(*n)\n\treturn nil\n}\n\nfunc (*ipNetValue) Type() string {\n\treturn \"ipNet\"\n}\n\nfunc newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {\n\t*p = val\n\treturn (*ipNetValue)(p)\n}\n\nfunc ipNetConv(sval string) (interface{}, error) {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(sval))\n\tif err == nil {\n\t\treturn *n, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IPNet: %s\", sval)\n}\n\n// GetIPNet return the net.IPNet value of a flag with the given name\nfunc (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {\n\tval, err := f.getFlagType(name, \"ipNet\", ipNetConv)\n\tif err != nil {\n\t\treturn net.IPNet{}, err\n\t}\n\treturn val.(net.IPNet), nil\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, \"\", value, usage)\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/string.go",
    "content": "package pflag\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\nfunc (s *stringValue) Type() string {\n\treturn \"string\"\n}\n\nfunc (s *stringValue) String() string { return string(*s) }\n\nfunc stringConv(sval string) (interface{}, error) {\n\treturn sval, nil\n}\n\n// GetString return the string value of a flag with the given name\nfunc (f *FlagSet) GetString(name string) (string, error) {\n\tval, err := f.getFlagType(name, \"string\", stringConv)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn val.(string), nil\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringP(name, shorthand string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, \"\", value, usage)\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc StringP(name, shorthand string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/string_array.go",
    "content": "package pflag\n\n// -- stringArray Value\ntype stringArrayValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringArrayValue(val []string, p *[]string) *stringArrayValue {\n\tssv := new(stringArrayValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc (s *stringArrayValue) Set(val string) error {\n\tif !s.changed {\n\t\t*s.value = []string{val}\n\t\ts.changed = true\n\t} else {\n\t\t*s.value = append(*s.value, val)\n\t}\n\treturn nil\n}\n\nfunc (s *stringArrayValue) Type() string {\n\treturn \"stringArray\"\n}\n\nfunc (s *stringArrayValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc stringArrayConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a array with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringArray return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringArray(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringArray\", stringArrayConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringArray(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, \"\", value, usage)\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/string_slice.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"strings\"\n)\n\n// -- stringSlice Value\ntype stringSliceValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringSliceValue(val []string, p *[]string) *stringSliceValue {\n\tssv := new(stringSliceValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc readAsCSV(val string) ([]string, error) {\n\tif val == \"\" {\n\t\treturn []string{}, nil\n\t}\n\tstringReader := strings.NewReader(val)\n\tcsvReader := csv.NewReader(stringReader)\n\treturn csvReader.Read()\n}\n\nfunc writeAsCSV(vals []string) (string, error) {\n\tb := &bytes.Buffer{}\n\tw := csv.NewWriter(b)\n\terr := w.Write(vals)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tw.Flush()\n\treturn strings.TrimSuffix(b.String(), \"\\n\"), nil\n}\n\nfunc (s *stringSliceValue) Set(val string) error {\n\tv, err := readAsCSV(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !s.changed {\n\t\t*s.value = v\n\t} else {\n\t\t*s.value = append(*s.value, v...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringSliceValue) Type() string {\n\treturn \"stringSlice\"\n}\n\nfunc (s *stringSliceValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc stringSliceConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a slice with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringSlice return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringSlice(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringSlice\", stringSliceConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\nfunc StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\nfunc (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\nfunc StringSlice(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, \"\", value, usage)\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Type() string {\n\treturn \"uint\"\n}\n\nfunc (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uintConv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint(v), nil\n}\n\n// GetUint return the uint value of a flag with the given name\nfunc (f *FlagSet) GetUint(name string) (uint, error) {\n\tval, err := f.getFlagType(name, \"uint\", uintConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint), nil\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintP(name, shorthand string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, \"\", value, usage)\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc UintP(name, shorthand string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint16.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint16 value\ntype uint16Value uint16\n\nfunc newUint16Value(val uint16, p *uint16) *uint16Value {\n\t*p = val\n\treturn (*uint16Value)(p)\n}\n\nfunc (i *uint16Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 16)\n\t*i = uint16Value(v)\n\treturn err\n}\n\nfunc (i *uint16Value) Type() string {\n\treturn \"uint16\"\n}\n\nfunc (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint16Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint16(v), nil\n}\n\n// GetUint16 return the uint16 value of a flag with the given name\nfunc (f *FlagSet) GetUint16(name string) (uint16, error) {\n\tval, err := f.getFlagType(name, \"uint16\", uint16Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint16), nil\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint16(name string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, \"\", value, usage)\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint32 value\ntype uint32Value uint32\n\nfunc newUint32Value(val uint32, p *uint32) *uint32Value {\n\t*p = val\n\treturn (*uint32Value)(p)\n}\n\nfunc (i *uint32Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 32)\n\t*i = uint32Value(v)\n\treturn err\n}\n\nfunc (i *uint32Value) Type() string {\n\treturn \"uint32\"\n}\n\nfunc (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint32(v), nil\n}\n\n// GetUint32 return the uint32 value of a flag with the given name\nfunc (f *FlagSet) GetUint32(name string) (uint32, error) {\n\tval, err := f.getFlagType(name, \"uint32\", uint32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint32), nil\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32  variable in which to store the value of the flag.\nfunc Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc Uint32(name string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, \"\", value, usage)\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Type() string {\n\treturn \"uint64\"\n}\n\nfunc (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint64Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(v), nil\n}\n\n// GetUint64 return the uint64 value of a flag with the given name\nfunc (f *FlagSet) GetUint64(name string) (uint64, error) {\n\tval, err := f.getFlagType(name, \"uint64\", uint64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint64), nil\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, \"\", value, usage)\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint8 Value\ntype uint8Value uint8\n\nfunc newUint8Value(val uint8, p *uint8) *uint8Value {\n\t*p = val\n\treturn (*uint8Value)(p)\n}\n\nfunc (i *uint8Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 8)\n\t*i = uint8Value(v)\n\treturn err\n}\n\nfunc (i *uint8Value) Type() string {\n\treturn \"uint8\"\n}\n\nfunc (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint8(v), nil\n}\n\n// GetUint8 return the uint8 value of a flag with the given name\nfunc (f *FlagSet) GetUint8(name string) (uint8, error) {\n\tval, err := f.getFlagType(name, \"uint8\", uint8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint8), nil\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc Uint8(name string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, \"\", value, usage)\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/pflag/uint_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- uintSlice Value\ntype uintSliceValue struct {\n\tvalue   *[]uint\n\tchanged bool\n}\n\nfunc newUintSliceValue(val []uint, p *[]uint) *uintSliceValue {\n\tuisv := new(uintSliceValue)\n\tuisv.value = p\n\t*uisv.value = val\n\treturn uisv\n}\n\nfunc (s *uintSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *uintSliceValue) Type() string {\n\treturn \"uintSlice\"\n}\n\nfunc (s *uintSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc uintSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []uint{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\treturn out, nil\n}\n\n// GetUintSlice returns the []uint value of a flag with the given name.\nfunc (f *FlagSet) GetUintSlice(name string) ([]uint, error) {\n\tval, err := f.getFlagType(name, \"uintSlice\", uintSliceConv)\n\tif err != nil {\n\t\treturn []uint{}, err\n\t}\n\treturn val.([]uint), nil\n}\n\n// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string.\n// The argument p points to a []uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSliceVar defines a uint[] flag with specified name, default value, and usage string.\n// The argument p points to a uint[] variable in which to store the value of the flag.\nfunc UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc UintSlice(name string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, \"\", value, usage)\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/viper/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Steve Francia\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/viper/flags.go",
    "content": "package viper\n\nimport \"github.com/spf13/pflag\"\n\n// FlagValueSet is an interface that users can implement\n// to bind a set of flags to viper.\ntype FlagValueSet interface {\n\tVisitAll(fn func(FlagValue))\n}\n\n// FlagValue is an interface that users can implement\n// to bind different flags to viper.\ntype FlagValue interface {\n\tHasChanged() bool\n\tName() string\n\tValueString() string\n\tValueType() string\n}\n\n// pflagValueSet is a wrapper around *pflag.ValueSet\n// that implements FlagValueSet.\ntype pflagValueSet struct {\n\tflags *pflag.FlagSet\n}\n\n// VisitAll iterates over all *pflag.Flag inside the *pflag.FlagSet.\nfunc (p pflagValueSet) VisitAll(fn func(flag FlagValue)) {\n\tp.flags.VisitAll(func(flag *pflag.Flag) {\n\t\tfn(pflagValue{flag})\n\t})\n}\n\n// pflagValue is a wrapper aroung *pflag.flag\n// that implements FlagValue\ntype pflagValue struct {\n\tflag *pflag.Flag\n}\n\n// HasChanges returns whether the flag has changes or not.\nfunc (p pflagValue) HasChanged() bool {\n\treturn p.flag.Changed\n}\n\n// Name returns the name of the flag.\nfunc (p pflagValue) Name() string {\n\treturn p.flag.Name\n}\n\n// ValueString returns the value of the flag as a string.\nfunc (p pflagValue) ValueString() string {\n\treturn p.flag.Value.String()\n}\n\n// ValueType returns the type of the flag as a string.\nfunc (p pflagValue) ValueType() string {\n\treturn p.flag.Value.Type()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/viper/remote/remote.go",
    "content": "// Copyright © 2015 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\n// Package remote integrates the remote features of Viper.\npackage remote\n\nimport (\n\t\"bytes\"\n\t\"github.com/spf13/viper\"\n\tcrypt \"github.com/xordataexchange/crypt/config\"\n\t\"io\"\n\t\"os\"\n)\n\ntype remoteConfigProvider struct{}\n\nfunc (rc remoteConfigProvider) Get(rp viper.RemoteProvider) (io.Reader, error) {\n\tcm, err := getConfigManager(rp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tb, err := cm.Get(rp.Path())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn bytes.NewReader(b), nil\n}\n\nfunc (rc remoteConfigProvider) Watch(rp viper.RemoteProvider) (io.Reader, error) {\n\tcm, err := getConfigManager(rp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp,err := cm.Get(rp.Path())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn bytes.NewReader(resp), nil\n}\nfunc (rc remoteConfigProvider) WatchChannel(rp viper.RemoteProvider) (<-chan *viper.RemoteResponse, chan bool) {\n\tcm, err := getConfigManager(rp)\n\tif err != nil {\n\t\treturn nil, nil\n\t}\n\tquit := make(chan bool)\n\tquitwc := make(chan bool)\n\tviperResponsCh := make(chan  *viper.RemoteResponse)\n\tcryptoResponseCh := cm.Watch(rp.Path(), quit)\n\t// need this function to convert the Channel response form crypt.Response to viper.Response\n\tgo func(cr <-chan *crypt.Response,vr chan<- *viper.RemoteResponse, quitwc <-chan bool, quit chan<- bool) {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <- quitwc:\n\t\t\t\tquit <- true\n\t\t\t\treturn\n\t\t\tcase resp := <-cr:\n\t\t\t\tvr <- &viper.RemoteResponse{\n\t\t\t\t\tError: resp.Error,\n\t\t\t\t\tValue: resp.Value,\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t}(cryptoResponseCh,viperResponsCh,quitwc,quit)\n\n\treturn  viperResponsCh,quitwc\n\n}\n\n\nfunc getConfigManager(rp viper.RemoteProvider) (crypt.ConfigManager, error) {\n\n\tvar cm crypt.ConfigManager\n\tvar err error\n\n\tif rp.SecretKeyring() != \"\" {\n\t\tkr, err := os.Open(rp.SecretKeyring())\n\t\tdefer kr.Close()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif rp.Provider() == \"etcd\" {\n\t\t\tcm, err = crypt.NewEtcdConfigManager([]string{rp.Endpoint()}, kr)\n\t\t} else {\n\t\t\tcm, err = crypt.NewConsulConfigManager([]string{rp.Endpoint()}, kr)\n\t\t}\n\t} else {\n\t\tif rp.Provider() == \"etcd\" {\n\t\t\tcm, err = crypt.NewStandardEtcdConfigManager([]string{rp.Endpoint()})\n\t\t} else {\n\t\t\tcm, err = crypt.NewStandardConsulConfigManager([]string{rp.Endpoint()})\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cm, nil\n\n}\n\nfunc init() {\n\tviper.RemoteConfig = &remoteConfigProvider{}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/viper/util.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\n// Viper is a application configuration system.\n// It believes that applications can be configured a variety of ways\n// via flags, ENVIRONMENT variables, configuration files retrieved\n// from the file system, or a remote key/value store.\n\npackage viper\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unicode\"\n\n\t\"github.com/hashicorp/hcl\"\n\t\"github.com/magiconair/properties\"\n\ttoml \"github.com/pelletier/go-toml\"\n\t\"github.com/spf13/cast\"\n\tjww \"github.com/spf13/jwalterweatherman\"\n\t\"gopkg.in/yaml.v2\"\n)\n\n// ConfigParseError denotes failing to parse configuration file.\ntype ConfigParseError struct {\n\terr error\n}\n\n// Error returns the formatted configuration error.\nfunc (pe ConfigParseError) Error() string {\n\treturn fmt.Sprintf(\"While parsing config: %s\", pe.err.Error())\n}\n\n// toCaseInsensitiveValue checks if the value is a  map;\n// if so, create a copy and lower-case the keys recursively.\nfunc toCaseInsensitiveValue(value interface{}) interface{} {\n\tswitch v := value.(type) {\n\tcase map[interface{}]interface{}:\n\t\tvalue = copyAndInsensitiviseMap(cast.ToStringMap(v))\n\tcase map[string]interface{}:\n\t\tvalue = copyAndInsensitiviseMap(v)\n\t}\n\n\treturn value\n}\n\n// copyAndInsensitiviseMap behaves like insensitiviseMap, but creates a copy of\n// any map it makes case insensitive.\nfunc copyAndInsensitiviseMap(m map[string]interface{}) map[string]interface{} {\n\tnm := make(map[string]interface{})\n\n\tfor key, val := range m {\n\t\tlkey := strings.ToLower(key)\n\t\tswitch v := val.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\tnm[lkey] = copyAndInsensitiviseMap(cast.ToStringMap(v))\n\t\tcase map[string]interface{}:\n\t\t\tnm[lkey] = copyAndInsensitiviseMap(v)\n\t\tdefault:\n\t\t\tnm[lkey] = v\n\t\t}\n\t}\n\n\treturn nm\n}\n\nfunc insensitiviseMap(m map[string]interface{}) {\n\tfor key, val := range m {\n\t\tswitch val.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\t// nested map: cast and recursively insensitivise\n\t\t\tval = cast.ToStringMap(val)\n\t\t\tinsensitiviseMap(val.(map[string]interface{}))\n\t\tcase map[string]interface{}:\n\t\t\t// nested map: recursively insensitivise\n\t\t\tinsensitiviseMap(val.(map[string]interface{}))\n\t\t}\n\n\t\tlower := strings.ToLower(key)\n\t\tif key != lower {\n\t\t\t// remove old key (not lower-cased)\n\t\t\tdelete(m, key)\n\t\t}\n\t\t// update map\n\t\tm[lower] = val\n\t}\n}\n\nfunc absPathify(inPath string) string {\n\tjww.INFO.Println(\"Trying to resolve absolute path to\", inPath)\n\n\tif strings.HasPrefix(inPath, \"$HOME\") {\n\t\tinPath = userHomeDir() + inPath[5:]\n\t}\n\n\tif strings.HasPrefix(inPath, \"$\") {\n\t\tend := strings.Index(inPath, string(os.PathSeparator))\n\t\tinPath = os.Getenv(inPath[1:end]) + inPath[end:]\n\t}\n\n\tif filepath.IsAbs(inPath) {\n\t\treturn filepath.Clean(inPath)\n\t}\n\n\tp, err := filepath.Abs(inPath)\n\tif err == nil {\n\t\treturn filepath.Clean(p)\n\t}\n\n\tjww.ERROR.Println(\"Couldn't discover absolute path\")\n\tjww.ERROR.Println(err)\n\treturn \"\"\n}\n\n// Check if File / Directory Exists\nfunc exists(path string) (bool, error) {\n\t_, err := v.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 stringInSlice(a string, list []string) bool {\n\tfor _, b := range list {\n\t\tif b == a {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc userHomeDir() string {\n\tif runtime.GOOS == \"windows\" {\n\t\thome := os.Getenv(\"HOMEDRIVE\") + os.Getenv(\"HOMEPATH\")\n\t\tif home == \"\" {\n\t\t\thome = os.Getenv(\"USERPROFILE\")\n\t\t}\n\t\treturn home\n\t}\n\treturn os.Getenv(\"HOME\")\n}\n\nfunc unmarshallConfigReader(in io.Reader, c map[string]interface{}, configType string) error {\n\tbuf := new(bytes.Buffer)\n\tbuf.ReadFrom(in)\n\n\tswitch strings.ToLower(configType) {\n\tcase \"yaml\", \"yml\":\n\t\tif err := yaml.Unmarshal(buf.Bytes(), &c); err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\n\tcase \"json\":\n\t\tif err := json.Unmarshal(buf.Bytes(), &c); err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\n\tcase \"hcl\":\n\t\tobj, err := hcl.Parse(string(buf.Bytes()))\n\t\tif err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\t\tif err = hcl.DecodeObject(&c, obj); err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\n\tcase \"toml\":\n\t\ttree, err := toml.LoadReader(buf)\n\t\tif err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\t\ttmap := tree.ToMap()\n\t\tfor k, v := range tmap {\n\t\t\tc[k] = v\n\t\t}\n\n\tcase \"properties\", \"props\", \"prop\":\n\t\tvar p *properties.Properties\n\t\tvar err error\n\t\tif p, err = properties.Load(buf.Bytes(), properties.UTF8); err != nil {\n\t\t\treturn ConfigParseError{err}\n\t\t}\n\t\tfor _, key := range p.Keys() {\n\t\t\tvalue, _ := p.Get(key)\n\t\t\t// recursively build nested maps\n\t\t\tpath := strings.Split(key, \".\")\n\t\t\tlastKey := strings.ToLower(path[len(path)-1])\n\t\t\tdeepestMap := deepSearch(c, path[0:len(path)-1])\n\t\t\t// set innermost value\n\t\t\tdeepestMap[lastKey] = value\n\t\t}\n\t}\n\n\tinsensitiviseMap(c)\n\treturn nil\n}\n\nfunc safeMul(a, b uint) uint {\n\tc := a * b\n\tif a > 1 && b > 1 && c/b != a {\n\t\treturn 0\n\t}\n\treturn c\n}\n\n// parseSizeInBytes converts strings like 1GB or 12 mb into an unsigned integer number of bytes\nfunc parseSizeInBytes(sizeStr string) uint {\n\tsizeStr = strings.TrimSpace(sizeStr)\n\tlastChar := len(sizeStr) - 1\n\tmultiplier := uint(1)\n\n\tif lastChar > 0 {\n\t\tif sizeStr[lastChar] == 'b' || sizeStr[lastChar] == 'B' {\n\t\t\tif lastChar > 1 {\n\t\t\t\tswitch unicode.ToLower(rune(sizeStr[lastChar-1])) {\n\t\t\t\tcase 'k':\n\t\t\t\t\tmultiplier = 1 << 10\n\t\t\t\t\tsizeStr = strings.TrimSpace(sizeStr[:lastChar-1])\n\t\t\t\tcase 'm':\n\t\t\t\t\tmultiplier = 1 << 20\n\t\t\t\t\tsizeStr = strings.TrimSpace(sizeStr[:lastChar-1])\n\t\t\t\tcase 'g':\n\t\t\t\t\tmultiplier = 1 << 30\n\t\t\t\t\tsizeStr = strings.TrimSpace(sizeStr[:lastChar-1])\n\t\t\t\tdefault:\n\t\t\t\t\tmultiplier = 1\n\t\t\t\t\tsizeStr = strings.TrimSpace(sizeStr[:lastChar])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsize := cast.ToInt(sizeStr)\n\tif size < 0 {\n\t\tsize = 0\n\t}\n\n\treturn safeMul(uint(size), multiplier)\n}\n\n// deepSearch scans deep maps, following the key indexes listed in the\n// sequence \"path\".\n// The last value is expected to be another map, and is returned.\n//\n// In case intermediate keys do not exist, or map to a non-map value,\n// a new map is created and inserted, and the search continues from there:\n// the initial map \"m\" may be modified!\nfunc deepSearch(m map[string]interface{}, path []string) map[string]interface{} {\n\tfor _, k := range path {\n\t\tm2, ok := m[k]\n\t\tif !ok {\n\t\t\t// intermediate key does not exist\n\t\t\t// => create it and continue from there\n\t\t\tm3 := make(map[string]interface{})\n\t\t\tm[k] = m3\n\t\t\tm = m3\n\t\t\tcontinue\n\t\t}\n\t\tm3, ok := m2.(map[string]interface{})\n\t\tif !ok {\n\t\t\t// intermediate key is a value\n\t\t\t// => replace with a new map\n\t\t\tm3 = make(map[string]interface{})\n\t\t\tm[k] = m3\n\t\t}\n\t\t// continue search from here\n\t\tm = m3\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/spf13/viper/viper.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Use of this source code is governed by an MIT-style\n// license that can be found in the LICENSE file.\n\n// Viper is a application configuration system.\n// It believes that applications can be configured a variety of ways\n// via flags, ENVIRONMENT variables, configuration files retrieved\n// from the file system, or a remote key/value store.\n\n// Each item takes precedence over the item below it:\n\n// overrides\n// flag\n// env\n// config\n// key/value store\n// default\n\npackage viper\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/fsnotify/fsnotify\"\n\t\"github.com/mitchellh/mapstructure\"\n\t\"github.com/spf13/afero\"\n\t\"github.com/spf13/cast\"\n\tjww \"github.com/spf13/jwalterweatherman\"\n\t\"github.com/spf13/pflag\"\n)\n\nvar v *Viper\n\ntype RemoteResponse struct {\n\tValue []byte\n\tError error\n}\n\nfunc init() {\n\tv = New()\n}\n\ntype remoteConfigFactory interface {\n\tGet(rp RemoteProvider) (io.Reader, error)\n\tWatch(rp RemoteProvider) (io.Reader, error)\n\tWatchChannel(rp RemoteProvider)(<-chan *RemoteResponse, chan bool)\n}\n\n// RemoteConfig is optional, see the remote package\nvar RemoteConfig remoteConfigFactory\n\n// UnsupportedConfigError denotes encountering an unsupported\n// configuration filetype.\ntype UnsupportedConfigError string\n\n// Error returns the formatted configuration error.\nfunc (str UnsupportedConfigError) Error() string {\n\treturn fmt.Sprintf(\"Unsupported Config Type %q\", string(str))\n}\n\n// UnsupportedRemoteProviderError denotes encountering an unsupported remote\n// provider. Currently only etcd and Consul are\n// supported.\ntype UnsupportedRemoteProviderError string\n\n// Error returns the formatted remote provider error.\nfunc (str UnsupportedRemoteProviderError) Error() string {\n\treturn fmt.Sprintf(\"Unsupported Remote Provider Type %q\", string(str))\n}\n\n// RemoteConfigError denotes encountering an error while trying to\n// pull the configuration from the remote provider.\ntype RemoteConfigError string\n\n// Error returns the formatted remote provider error\nfunc (rce RemoteConfigError) Error() string {\n\treturn fmt.Sprintf(\"Remote Configurations Error: %s\", string(rce))\n}\n\n// ConfigFileNotFoundError denotes failing to find configuration file.\ntype ConfigFileNotFoundError struct {\n\tname, locations string\n}\n\n// Error returns the formatted configuration error.\nfunc (fnfe ConfigFileNotFoundError) Error() string {\n\treturn fmt.Sprintf(\"Config File %q Not Found in %q\", fnfe.name, fnfe.locations)\n}\n\n// Viper is a prioritized configuration registry. It\n// maintains a set of configuration sources, fetches\n// values to populate those, and provides them according\n// to the source's priority.\n// The priority of the sources is the following:\n// 1. overrides\n// 2. flags\n// 3. env. variables\n// 4. config file\n// 5. key/value store\n// 6. defaults\n//\n// For example, if values from the following sources were loaded:\n//\n//  Defaults : {\n//  \t\"secret\": \"\",\n//  \t\"user\": \"default\",\n//  \t\"endpoint\": \"https://localhost\"\n//  }\n//  Config : {\n//  \t\"user\": \"root\"\n//  \t\"secret\": \"defaultsecret\"\n//  }\n//  Env : {\n//  \t\"secret\": \"somesecretkey\"\n//  }\n//\n// The resulting config will have the following values:\n//\n//\t{\n//\t\t\"secret\": \"somesecretkey\",\n//\t\t\"user\": \"root\",\n//\t\t\"endpoint\": \"https://localhost\"\n//\t}\ntype Viper struct {\n\t// Delimiter that separates a list of keys\n\t// used to access a nested value in one go\n\tkeyDelim string\n\n\t// A set of paths to look for the config file in\n\tconfigPaths []string\n\n\t// The filesystem to read config from.\n\tfs afero.Fs\n\n\t// A set of remote providers to search for the configuration\n\tremoteProviders []*defaultRemoteProvider\n\n\t// Name of file to look for inside the path\n\tconfigName string\n\tconfigFile string\n\tconfigType string\n\tenvPrefix  string\n\n\tautomaticEnvApplied bool\n\tenvKeyReplacer      *strings.Replacer\n\n\tconfig         map[string]interface{}\n\toverride       map[string]interface{}\n\tdefaults       map[string]interface{}\n\tkvstore        map[string]interface{}\n\tpflags         map[string]FlagValue\n\tenv            map[string]string\n\taliases        map[string]string\n\ttypeByDefValue bool\n\n\tonConfigChange func(fsnotify.Event)\n}\n\n// New returns an initialized Viper instance.\nfunc New() *Viper {\n\tv := new(Viper)\n\tv.keyDelim = \".\"\n\tv.configName = \"config\"\n\tv.fs = afero.NewOsFs()\n\tv.config = make(map[string]interface{})\n\tv.override = make(map[string]interface{})\n\tv.defaults = make(map[string]interface{})\n\tv.kvstore = make(map[string]interface{})\n\tv.pflags = make(map[string]FlagValue)\n\tv.env = make(map[string]string)\n\tv.aliases = make(map[string]string)\n\tv.typeByDefValue = false\n\n\treturn v\n}\n\n// Intended for testing, will reset all to default settings.\n// In the public interface for the viper package so applications\n// can use it in their testing as well.\nfunc Reset() {\n\tv = New()\n\tSupportedExts = []string{\"json\", \"toml\", \"yaml\", \"yml\", \"hcl\"}\n\tSupportedRemoteProviders = []string{\"etcd\", \"consul\"}\n}\n\ntype defaultRemoteProvider struct {\n\tprovider      string\n\tendpoint      string\n\tpath          string\n\tsecretKeyring string\n}\n\nfunc (rp defaultRemoteProvider) Provider() string {\n\treturn rp.provider\n}\n\nfunc (rp defaultRemoteProvider) Endpoint() string {\n\treturn rp.endpoint\n}\n\nfunc (rp defaultRemoteProvider) Path() string {\n\treturn rp.path\n}\n\nfunc (rp defaultRemoteProvider) SecretKeyring() string {\n\treturn rp.secretKeyring\n}\n\n// RemoteProvider stores the configuration necessary\n// to connect to a remote key/value store.\n// Optional secretKeyring to unencrypt encrypted values\n// can be provided.\ntype RemoteProvider interface {\n\tProvider() string\n\tEndpoint() string\n\tPath() string\n\tSecretKeyring() string\n}\n\n// SupportedExts are universally supported extensions.\nvar SupportedExts = []string{\"json\", \"toml\", \"yaml\", \"yml\", \"properties\", \"props\", \"prop\", \"hcl\"}\n\n// SupportedRemoteProviders are universally supported remote providers.\nvar SupportedRemoteProviders = []string{\"etcd\", \"consul\"}\n\nfunc OnConfigChange(run func(in fsnotify.Event)) { v.OnConfigChange(run) }\nfunc (v *Viper) OnConfigChange(run func(in fsnotify.Event)) {\n\tv.onConfigChange = run\n}\n\nfunc WatchConfig() { v.WatchConfig() }\nfunc (v *Viper) WatchConfig() {\n\tgo func() {\n\t\twatcher, err := fsnotify.NewWatcher()\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tdefer watcher.Close()\n\n\t\t// we have to watch the entire directory to pick up renames/atomic saves in a cross-platform way\n\t\tfilename, err := v.getConfigFile()\n\t\tif err != nil {\n\t\t\tlog.Println(\"error:\", err)\n\t\t\treturn\n\t\t}\n\n\t\tconfigFile := filepath.Clean(filename)\n\t\tconfigDir, _ := filepath.Split(configFile)\n\n\t\tdone := make(chan bool)\n\t\tgo func() {\n\t\t\tfor {\n\t\t\t\tselect {\n\t\t\t\tcase event := <-watcher.Events:\n\t\t\t\t\t// we only care about the config file\n\t\t\t\t\tif filepath.Clean(event.Name) == configFile {\n\t\t\t\t\t\tif event.Op&fsnotify.Write == fsnotify.Write || event.Op&fsnotify.Create == fsnotify.Create {\n\t\t\t\t\t\t\terr := v.ReadInConfig()\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\tlog.Println(\"error:\", err)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tv.onConfigChange(event)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase err := <-watcher.Errors:\n\t\t\t\t\tlog.Println(\"error:\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\twatcher.Add(configDir)\n\t\t<-done\n\t}()\n}\n\n// SetConfigFile explicitly defines the path, name and extension of the config file\n// Viper will use this and not check any of the config paths\nfunc SetConfigFile(in string) { v.SetConfigFile(in) }\nfunc (v *Viper) SetConfigFile(in string) {\n\tif in != \"\" {\n\t\tv.configFile = in\n\t}\n}\n\n// SetEnvPrefix defines a prefix that ENVIRONMENT variables will use.\n// E.g. if your prefix is \"spf\", the env registry\n// will look for env. variables that start with \"SPF_\"\nfunc SetEnvPrefix(in string) { v.SetEnvPrefix(in) }\nfunc (v *Viper) SetEnvPrefix(in string) {\n\tif in != \"\" {\n\t\tv.envPrefix = in\n\t}\n}\n\nfunc (v *Viper) mergeWithEnvPrefix(in string) string {\n\tif v.envPrefix != \"\" {\n\t\treturn strings.ToUpper(v.envPrefix + \"_\" + in)\n\t}\n\n\treturn strings.ToUpper(in)\n}\n\n// TODO: should getEnv logic be moved into find(). Can generalize the use of\n// rewriting keys many things, Ex: Get('someKey') -> some_key\n// (cammel case to snake case for JSON keys perhaps)\n\n// getEnv is a wrapper around os.Getenv which replaces characters in the original\n// key. This allows env vars which have different keys then the config object\n// keys\nfunc (v *Viper) getEnv(key string) string {\n\tif v.envKeyReplacer != nil {\n\t\tkey = v.envKeyReplacer.Replace(key)\n\t}\n\treturn os.Getenv(key)\n}\n\n// ConfigFileUsed returns the file used to populate the config registry\nfunc ConfigFileUsed() string            { return v.ConfigFileUsed() }\nfunc (v *Viper) ConfigFileUsed() string { return v.configFile }\n\n// AddConfigPath adds a path for Viper to search for the config file in.\n// Can be called multiple times to define multiple search paths.\nfunc AddConfigPath(in string) { v.AddConfigPath(in) }\nfunc (v *Viper) AddConfigPath(in string) {\n\tif in != \"\" {\n\t\tabsin := absPathify(in)\n\t\tjww.INFO.Println(\"adding\", absin, \"to paths to search\")\n\t\tif !stringInSlice(absin, v.configPaths) {\n\t\t\tv.configPaths = append(v.configPaths, absin)\n\t\t}\n\t}\n}\n\n// AddRemoteProvider adds a remote configuration source.\n// Remote Providers are searched in the order they are added.\n// provider is a string value, \"etcd\" or \"consul\" are currently supported.\n// endpoint is the url.  etcd requires http://ip:port  consul requires ip:port\n// path is the path in the k/v store to retrieve configuration\n// To retrieve a config file called myapp.json from /configs/myapp.json\n// you should set path to /configs and set config name (SetConfigName()) to\n// \"myapp\"\nfunc AddRemoteProvider(provider, endpoint, path string) error {\n\treturn v.AddRemoteProvider(provider, endpoint, path)\n}\nfunc (v *Viper) AddRemoteProvider(provider, endpoint, path string) error {\n\tif !stringInSlice(provider, SupportedRemoteProviders) {\n\t\treturn UnsupportedRemoteProviderError(provider)\n\t}\n\tif provider != \"\" && endpoint != \"\" {\n\t\tjww.INFO.Printf(\"adding %s:%s to remote provider list\", provider, endpoint)\n\t\trp := &defaultRemoteProvider{\n\t\t\tendpoint: endpoint,\n\t\t\tprovider: provider,\n\t\t\tpath:     path,\n\t\t}\n\t\tif !v.providerPathExists(rp) {\n\t\t\tv.remoteProviders = append(v.remoteProviders, rp)\n\t\t}\n\t}\n\treturn nil\n}\n\n// AddSecureRemoteProvider adds a remote configuration source.\n// Secure Remote Providers are searched in the order they are added.\n// provider is a string value, \"etcd\" or \"consul\" are currently supported.\n// endpoint is the url.  etcd requires http://ip:port  consul requires ip:port\n// secretkeyring is the filepath to your openpgp secret keyring.  e.g. /etc/secrets/myring.gpg\n// path is the path in the k/v store to retrieve configuration\n// To retrieve a config file called myapp.json from /configs/myapp.json\n// you should set path to /configs and set config name (SetConfigName()) to\n// \"myapp\"\n// Secure Remote Providers are implemented with github.com/xordataexchange/crypt\nfunc AddSecureRemoteProvider(provider, endpoint, path, secretkeyring string) error {\n\treturn v.AddSecureRemoteProvider(provider, endpoint, path, secretkeyring)\n}\n\nfunc (v *Viper) AddSecureRemoteProvider(provider, endpoint, path, secretkeyring string) error {\n\tif !stringInSlice(provider, SupportedRemoteProviders) {\n\t\treturn UnsupportedRemoteProviderError(provider)\n\t}\n\tif provider != \"\" && endpoint != \"\" {\n\t\tjww.INFO.Printf(\"adding %s:%s to remote provider list\", provider, endpoint)\n\t\trp := &defaultRemoteProvider{\n\t\t\tendpoint:      endpoint,\n\t\t\tprovider:      provider,\n\t\t\tpath:          path,\n\t\t\tsecretKeyring: secretkeyring,\n\t\t}\n\t\tif !v.providerPathExists(rp) {\n\t\t\tv.remoteProviders = append(v.remoteProviders, rp)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (v *Viper) providerPathExists(p *defaultRemoteProvider) bool {\n\tfor _, y := range v.remoteProviders {\n\t\tif reflect.DeepEqual(y, p) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// searchMap recursively searches for a value for path in source map.\n// Returns nil if not found.\n// Note: This assumes that the path entries and map keys are lower cased.\nfunc (v *Viper) searchMap(source map[string]interface{}, path []string) interface{} {\n\tif len(path) == 0 {\n\t\treturn source\n\t}\n\n\tnext, ok := source[path[0]]\n\tif ok {\n\t\t// Fast path\n\t\tif len(path) == 1 {\n\t\t\treturn next\n\t\t}\n\n\t\t// Nested case\n\t\tswitch next.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\treturn v.searchMap(cast.ToStringMap(next), path[1:])\n\t\tcase map[string]interface{}:\n\t\t\t// Type assertion is safe here since it is only reached\n\t\t\t// if the type of `next` is the same as the type being asserted\n\t\t\treturn v.searchMap(next.(map[string]interface{}), path[1:])\n\t\tdefault:\n\t\t\t// got a value but nested key expected, return \"nil\" for not found\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn nil\n}\n\n// searchMapWithPathPrefixes recursively searches for a value for path in source map.\n//\n// While searchMap() considers each path element as a single map key, this\n// function searches for, and prioritizes, merged path elements.\n// e.g., if in the source, \"foo\" is defined with a sub-key \"bar\", and \"foo.bar\"\n// is also defined, this latter value is returned for path [\"foo\", \"bar\"].\n//\n// This should be useful only at config level (other maps may not contain dots\n// in their keys).\n//\n// Note: This assumes that the path entries and map keys are lower cased.\nfunc (v *Viper) searchMapWithPathPrefixes(source map[string]interface{}, path []string) interface{} {\n\tif len(path) == 0 {\n\t\treturn source\n\t}\n\n\t// search for path prefixes, starting from the longest one\n\tfor i := len(path); i > 0; i-- {\n\t\tprefixKey := strings.ToLower(strings.Join(path[0:i], v.keyDelim))\n\n\t\tnext, ok := source[prefixKey]\n\t\tif ok {\n\t\t\t// Fast path\n\t\t\tif i == len(path) {\n\t\t\t\treturn next\n\t\t\t}\n\n\t\t\t// Nested case\n\t\t\tvar val interface{}\n\t\t\tswitch next.(type) {\n\t\t\tcase map[interface{}]interface{}:\n\t\t\t\tval = v.searchMapWithPathPrefixes(cast.ToStringMap(next), path[i:])\n\t\t\tcase map[string]interface{}:\n\t\t\t\t// Type assertion is safe here since it is only reached\n\t\t\t\t// if the type of `next` is the same as the type being asserted\n\t\t\t\tval = v.searchMapWithPathPrefixes(next.(map[string]interface{}), path[i:])\n\t\t\tdefault:\n\t\t\t\t// got a value but nested key expected, do nothing and look for next prefix\n\t\t\t}\n\t\t\tif val != nil {\n\t\t\t\treturn val\n\t\t\t}\n\t\t}\n\t}\n\n\t// not found\n\treturn nil\n}\n\n// isPathShadowedInDeepMap makes sure the given path is not shadowed somewhere\n// on its path in the map.\n// e.g., if \"foo.bar\" has a value in the given map, it “shadows”\n//       \"foo.bar.baz\" in a lower-priority map\nfunc (v *Viper) isPathShadowedInDeepMap(path []string, m map[string]interface{}) string {\n\tvar parentVal interface{}\n\tfor i := 1; i < len(path); i++ {\n\t\tparentVal = v.searchMap(m, path[0:i])\n\t\tif parentVal == nil {\n\t\t\t// not found, no need to add more path elements\n\t\t\treturn \"\"\n\t\t}\n\t\tswitch parentVal.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\tcontinue\n\t\tcase map[string]interface{}:\n\t\t\tcontinue\n\t\tdefault:\n\t\t\t// parentVal is a regular value which shadows \"path\"\n\t\t\treturn strings.Join(path[0:i], v.keyDelim)\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// isPathShadowedInFlatMap makes sure the given path is not shadowed somewhere\n// in a sub-path of the map.\n// e.g., if \"foo.bar\" has a value in the given map, it “shadows”\n//       \"foo.bar.baz\" in a lower-priority map\nfunc (v *Viper) isPathShadowedInFlatMap(path []string, mi interface{}) string {\n\t// unify input map\n\tvar m map[string]interface{}\n\tswitch mi.(type) {\n\tcase map[string]string, map[string]FlagValue:\n\t\tm = cast.ToStringMap(mi)\n\tdefault:\n\t\treturn \"\"\n\t}\n\n\t// scan paths\n\tvar parentKey string\n\tfor i := 1; i < len(path); i++ {\n\t\tparentKey = strings.Join(path[0:i], v.keyDelim)\n\t\tif _, ok := m[parentKey]; ok {\n\t\t\treturn parentKey\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// isPathShadowedInAutoEnv makes sure the given path is not shadowed somewhere\n// in the environment, when automatic env is on.\n// e.g., if \"foo.bar\" has a value in the environment, it “shadows”\n//       \"foo.bar.baz\" in a lower-priority map\nfunc (v *Viper) isPathShadowedInAutoEnv(path []string) string {\n\tvar parentKey string\n\tvar val string\n\tfor i := 1; i < len(path); i++ {\n\t\tparentKey = strings.Join(path[0:i], v.keyDelim)\n\t\tif val = v.getEnv(v.mergeWithEnvPrefix(parentKey)); val != \"\" {\n\t\t\treturn parentKey\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// SetTypeByDefaultValue enables or disables the inference of a key value's\n// type when the Get function is used based upon a key's default value as\n// opposed to the value returned based on the normal fetch logic.\n//\n// For example, if a key has a default value of []string{} and the same key\n// is set via an environment variable to \"a b c\", a call to the Get function\n// would return a string slice for the key if the key's type is inferred by\n// the default value and the Get function would return:\n//\n//   []string {\"a\", \"b\", \"c\"}\n//\n// Otherwise the Get function would return:\n//\n//   \"a b c\"\nfunc SetTypeByDefaultValue(enable bool) { v.SetTypeByDefaultValue(enable) }\nfunc (v *Viper) SetTypeByDefaultValue(enable bool) {\n\tv.typeByDefValue = enable\n}\n\n// GetViper gets the global Viper instance.\nfunc GetViper() *Viper {\n\treturn v\n}\n\n// Get can retrieve any value given the key to use.\n// Get is case-insensitive for a key.\n// Get has the behavior of returning the value associated with the first\n// place from where it is set. Viper will check in the following order:\n// override, flag, env, config file, key/value store, default\n//\n// Get returns an interface. For a specific value use one of the Get____ methods.\nfunc Get(key string) interface{} { return v.Get(key) }\nfunc (v *Viper) Get(key string) interface{} {\n\tlcaseKey := strings.ToLower(key)\n\tval := v.find(lcaseKey)\n\tif val == nil {\n\t\treturn nil\n\t}\n\n\tvalType := val\n\tif v.typeByDefValue {\n\t\t// TODO(bep) this branch isn't covered by a single test.\n\t\tpath := strings.Split(lcaseKey, v.keyDelim)\n\t\tdefVal := v.searchMap(v.defaults, path)\n\t\tif defVal != nil {\n\t\t\tvalType = defVal\n\t\t}\n\t}\n\n\tswitch valType.(type) {\n\tcase bool:\n\t\treturn cast.ToBool(val)\n\tcase string:\n\t\treturn cast.ToString(val)\n\tcase int64, int32, int16, int8, int:\n\t\treturn cast.ToInt(val)\n\tcase float64, float32:\n\t\treturn cast.ToFloat64(val)\n\tcase time.Time:\n\t\treturn cast.ToTime(val)\n\tcase time.Duration:\n\t\treturn cast.ToDuration(val)\n\tcase []string:\n\t\treturn cast.ToStringSlice(val)\n\t}\n\treturn val\n}\n\n// Sub returns new Viper instance representing a sub tree of this instance.\n// Sub is case-insensitive for a key.\nfunc Sub(key string) *Viper { return v.Sub(key) }\nfunc (v *Viper) Sub(key string) *Viper {\n\tsubv := New()\n\tdata := v.Get(key)\n\tif data == nil {\n\t\treturn nil\n\t}\n\n\tif reflect.TypeOf(data).Kind() == reflect.Map {\n\t\tsubv.config = cast.ToStringMap(data)\n\t\treturn subv\n\t}\n\treturn nil\n}\n\n// GetString returns the value associated with the key as a string.\nfunc GetString(key string) string { return v.GetString(key) }\nfunc (v *Viper) GetString(key string) string {\n\treturn cast.ToString(v.Get(key))\n}\n\n// GetBool returns the value associated with the key as a boolean.\nfunc GetBool(key string) bool { return v.GetBool(key) }\nfunc (v *Viper) GetBool(key string) bool {\n\treturn cast.ToBool(v.Get(key))\n}\n\n// GetInt returns the value associated with the key as an integer.\nfunc GetInt(key string) int { return v.GetInt(key) }\nfunc (v *Viper) GetInt(key string) int {\n\treturn cast.ToInt(v.Get(key))\n}\n\n// GetInt64 returns the value associated with the key as an integer.\nfunc GetInt64(key string) int64 { return v.GetInt64(key) }\nfunc (v *Viper) GetInt64(key string) int64 {\n\treturn cast.ToInt64(v.Get(key))\n}\n\n// GetFloat64 returns the value associated with the key as a float64.\nfunc GetFloat64(key string) float64 { return v.GetFloat64(key) }\nfunc (v *Viper) GetFloat64(key string) float64 {\n\treturn cast.ToFloat64(v.Get(key))\n}\n\n// GetTime returns the value associated with the key as time.\nfunc GetTime(key string) time.Time { return v.GetTime(key) }\nfunc (v *Viper) GetTime(key string) time.Time {\n\treturn cast.ToTime(v.Get(key))\n}\n\n// GetDuration returns the value associated with the key as a duration.\nfunc GetDuration(key string) time.Duration { return v.GetDuration(key) }\nfunc (v *Viper) GetDuration(key string) time.Duration {\n\treturn cast.ToDuration(v.Get(key))\n}\n\n// GetStringSlice returns the value associated with the key as a slice of strings.\nfunc GetStringSlice(key string) []string { return v.GetStringSlice(key) }\nfunc (v *Viper) GetStringSlice(key string) []string {\n\treturn cast.ToStringSlice(v.Get(key))\n}\n\n// GetStringMap returns the value associated with the key as a map of interfaces.\nfunc GetStringMap(key string) map[string]interface{} { return v.GetStringMap(key) }\nfunc (v *Viper) GetStringMap(key string) map[string]interface{} {\n\treturn cast.ToStringMap(v.Get(key))\n}\n\n// GetStringMapString returns the value associated with the key as a map of strings.\nfunc GetStringMapString(key string) map[string]string { return v.GetStringMapString(key) }\nfunc (v *Viper) GetStringMapString(key string) map[string]string {\n\treturn cast.ToStringMapString(v.Get(key))\n}\n\n// GetStringMapStringSlice returns the value associated with the key as a map to a slice of strings.\nfunc GetStringMapStringSlice(key string) map[string][]string { return v.GetStringMapStringSlice(key) }\nfunc (v *Viper) GetStringMapStringSlice(key string) map[string][]string {\n\treturn cast.ToStringMapStringSlice(v.Get(key))\n}\n\n// GetSizeInBytes returns the size of the value associated with the given key\n// in bytes.\nfunc GetSizeInBytes(key string) uint { return v.GetSizeInBytes(key) }\nfunc (v *Viper) GetSizeInBytes(key string) uint {\n\tsizeStr := cast.ToString(v.Get(key))\n\treturn parseSizeInBytes(sizeStr)\n}\n\n// UnmarshalKey takes a single key and unmarshals it into a Struct.\nfunc UnmarshalKey(key string, rawVal interface{}) error { return v.UnmarshalKey(key, rawVal) }\nfunc (v *Viper) UnmarshalKey(key string, rawVal interface{}) error {\n\terr := decode(v.Get(key), defaultDecoderConfig(rawVal))\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv.insensitiviseMaps()\n\n\treturn nil\n}\n\n// Unmarshal unmarshals the config into a Struct. Make sure that the tags\n// on the fields of the structure are properly set.\nfunc Unmarshal(rawVal interface{}) error { return v.Unmarshal(rawVal) }\nfunc (v *Viper) Unmarshal(rawVal interface{}) error {\n\terr := decode(v.AllSettings(), defaultDecoderConfig(rawVal))\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv.insensitiviseMaps()\n\n\treturn nil\n}\n\n// defaultDecoderConfig returns default mapsstructure.DecoderConfig with suppot\n// of time.Duration values\nfunc defaultDecoderConfig(output interface{}) *mapstructure.DecoderConfig {\n\treturn &mapstructure.DecoderConfig{\n\t\tMetadata:         nil,\n\t\tResult:           output,\n\t\tWeaklyTypedInput: true,\n\t\tDecodeHook:       mapstructure.StringToTimeDurationHookFunc(),\n\t}\n}\n\n// A wrapper around mapstructure.Decode that mimics the WeakDecode functionality\nfunc decode(input interface{}, config *mapstructure.DecoderConfig) error {\n\tdecoder, err := mapstructure.NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn decoder.Decode(input)\n}\n\n// UnmarshalExact unmarshals the config into a Struct, erroring if a field is nonexistent\n// in the destination struct.\nfunc (v *Viper) UnmarshalExact(rawVal interface{}) error {\n\tconfig := defaultDecoderConfig(rawVal)\n\tconfig.ErrorUnused = true\n\n\terr := decode(v.AllSettings(), config)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv.insensitiviseMaps()\n\n\treturn nil\n}\n\n// BindPFlags binds a full flag set to the configuration, using each flag's long\n// name as the config key.\nfunc BindPFlags(flags *pflag.FlagSet) error { return v.BindPFlags(flags) }\nfunc (v *Viper) BindPFlags(flags *pflag.FlagSet) error {\n\treturn v.BindFlagValues(pflagValueSet{flags})\n}\n\n// BindPFlag binds a specific key to a pflag (as used by cobra).\n// Example (where serverCmd is a Cobra instance):\n//\n//\t serverCmd.Flags().Int(\"port\", 1138, \"Port to run Application server on\")\n//\t Viper.BindPFlag(\"port\", serverCmd.Flags().Lookup(\"port\"))\n//\nfunc BindPFlag(key string, flag *pflag.Flag) error { return v.BindPFlag(key, flag) }\nfunc (v *Viper) BindPFlag(key string, flag *pflag.Flag) error {\n\treturn v.BindFlagValue(key, pflagValue{flag})\n}\n\n// BindFlagValues binds a full FlagValue set to the configuration, using each flag's long\n// name as the config key.\nfunc BindFlagValues(flags FlagValueSet) error { return v.BindFlagValues(flags) }\nfunc (v *Viper) BindFlagValues(flags FlagValueSet) (err error) {\n\tflags.VisitAll(func(flag FlagValue) {\n\t\tif err = v.BindFlagValue(flag.Name(), flag); err != nil {\n\t\t\treturn\n\t\t}\n\t})\n\treturn nil\n}\n\n// BindFlagValue binds a specific key to a FlagValue.\n// Example(where serverCmd is a Cobra instance):\n//\n//\t serverCmd.Flags().Int(\"port\", 1138, \"Port to run Application server on\")\n//\t Viper.BindFlagValue(\"port\", serverCmd.Flags().Lookup(\"port\"))\n//\nfunc BindFlagValue(key string, flag FlagValue) error { return v.BindFlagValue(key, flag) }\nfunc (v *Viper) BindFlagValue(key string, flag FlagValue) error {\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag for %q is nil\", key)\n\t}\n\tv.pflags[strings.ToLower(key)] = flag\n\treturn nil\n}\n\n// BindEnv binds a Viper key to a ENV variable.\n// ENV variables are case sensitive.\n// If only a key is provided, it will use the env key matching the key, uppercased.\n// EnvPrefix will be used when set when env name is not provided.\nfunc BindEnv(input ...string) error { return v.BindEnv(input...) }\nfunc (v *Viper) BindEnv(input ...string) error {\n\tvar key, envkey string\n\tif len(input) == 0 {\n\t\treturn fmt.Errorf(\"BindEnv missing key to bind to\")\n\t}\n\n\tkey = strings.ToLower(input[0])\n\n\tif len(input) == 1 {\n\t\tenvkey = v.mergeWithEnvPrefix(key)\n\t} else {\n\t\tenvkey = input[1]\n\t}\n\n\tv.env[key] = envkey\n\n\treturn nil\n}\n\n// Given a key, find the value.\n// Viper will check in the following order:\n// flag, env, config file, key/value store, default.\n// Viper will check to see if an alias exists first.\n// Note: this assumes a lower-cased key given.\nfunc (v *Viper) find(lcaseKey string) interface{} {\n\n\tvar (\n\t\tval    interface{}\n\t\texists bool\n\t\tpath   = strings.Split(lcaseKey, v.keyDelim)\n\t\tnested = len(path) > 1\n\t)\n\n\t// compute the path through the nested maps to the nested value\n\tif nested && v.isPathShadowedInDeepMap(path, castMapStringToMapInterface(v.aliases)) != \"\" {\n\t\treturn nil\n\t}\n\n\t// if the requested key is an alias, then return the proper key\n\tlcaseKey = v.realKey(lcaseKey)\n\tpath = strings.Split(lcaseKey, v.keyDelim)\n\tnested = len(path) > 1\n\n\t// Set() override first\n\tval = v.searchMap(v.override, path)\n\tif val != nil {\n\t\treturn val\n\t}\n\tif nested && v.isPathShadowedInDeepMap(path, v.override) != \"\" {\n\t\treturn nil\n\t}\n\n\t// PFlag override next\n\tflag, exists := v.pflags[lcaseKey]\n\tif exists && flag.HasChanged() {\n\t\tswitch flag.ValueType() {\n\t\tcase \"int\", \"int8\", \"int16\", \"int32\", \"int64\":\n\t\t\treturn cast.ToInt(flag.ValueString())\n\t\tcase \"bool\":\n\t\t\treturn cast.ToBool(flag.ValueString())\n\t\tcase \"stringSlice\":\n\t\t\ts := strings.TrimPrefix(flag.ValueString(), \"[\")\n\t\t\ts = strings.TrimSuffix(s, \"]\")\n\t\t\tres, _ := readAsCSV(s)\n\t\t\treturn res\n\t\tdefault:\n\t\t\treturn flag.ValueString()\n\t\t}\n\t}\n\tif nested && v.isPathShadowedInFlatMap(path, v.pflags) != \"\" {\n\t\treturn nil\n\t}\n\n\t// Env override next\n\tif v.automaticEnvApplied {\n\t\t// even if it hasn't been registered, if automaticEnv is used,\n\t\t// check any Get request\n\t\tif val = v.getEnv(v.mergeWithEnvPrefix(lcaseKey)); val != \"\" {\n\t\t\treturn val\n\t\t}\n\t\tif nested && v.isPathShadowedInAutoEnv(path) != \"\" {\n\t\t\treturn nil\n\t\t}\n\t}\n\tenvkey, exists := v.env[lcaseKey]\n\tif exists {\n\t\tif val = v.getEnv(envkey); val != \"\" {\n\t\t\treturn val\n\t\t}\n\t}\n\tif nested && v.isPathShadowedInFlatMap(path, v.env) != \"\" {\n\t\treturn nil\n\t}\n\n\t// Config file next\n\tval = v.searchMapWithPathPrefixes(v.config, path)\n\tif val != nil {\n\t\treturn val\n\t}\n\tif nested && v.isPathShadowedInDeepMap(path, v.config) != \"\" {\n\t\treturn nil\n\t}\n\n\t// K/V store next\n\tval = v.searchMap(v.kvstore, path)\n\tif val != nil {\n\t\treturn val\n\t}\n\tif nested && v.isPathShadowedInDeepMap(path, v.kvstore) != \"\" {\n\t\treturn nil\n\t}\n\n\t// Default next\n\tval = v.searchMap(v.defaults, path)\n\tif val != nil {\n\t\treturn val\n\t}\n\tif nested && v.isPathShadowedInDeepMap(path, v.defaults) != \"\" {\n\t\treturn nil\n\t}\n\n\t// last chance: if no other value is returned and a flag does exist for the value,\n\t// get the flag's value even if the flag's value has not changed\n\tif flag, exists := v.pflags[lcaseKey]; exists {\n\t\tswitch flag.ValueType() {\n\t\tcase \"int\", \"int8\", \"int16\", \"int32\", \"int64\":\n\t\t\treturn cast.ToInt(flag.ValueString())\n\t\tcase \"bool\":\n\t\t\treturn cast.ToBool(flag.ValueString())\n\t\tcase \"stringSlice\":\n\t\t\ts := strings.TrimPrefix(flag.ValueString(), \"[\")\n\t\t\ts = strings.TrimSuffix(s, \"]\")\n\t\t\tres, _ := readAsCSV(s)\n\t\t\treturn res\n\t\tdefault:\n\t\t\treturn flag.ValueString()\n\t\t}\n\t}\n\t// last item, no need to check shadowing\n\n\treturn nil\n}\n\nfunc readAsCSV(val string) ([]string, error) {\n\tif val == \"\" {\n\t\treturn []string{}, nil\n\t}\n\tstringReader := strings.NewReader(val)\n\tcsvReader := csv.NewReader(stringReader)\n\treturn csvReader.Read()\n}\n\n// IsSet checks to see if the key has been set in any of the data locations.\n// IsSet is case-insensitive for a key.\nfunc IsSet(key string) bool { return v.IsSet(key) }\nfunc (v *Viper) IsSet(key string) bool {\n\tlcaseKey := strings.ToLower(key)\n\tval := v.find(lcaseKey)\n\treturn val != nil\n}\n\n// AutomaticEnv has Viper check ENV variables for all.\n// keys set in config, default & flags\nfunc AutomaticEnv() { v.AutomaticEnv() }\nfunc (v *Viper) AutomaticEnv() {\n\tv.automaticEnvApplied = true\n}\n\n// SetEnvKeyReplacer sets the strings.Replacer on the viper object\n// Useful for mapping an environmental variable to a key that does\n// not match it.\nfunc SetEnvKeyReplacer(r *strings.Replacer) { v.SetEnvKeyReplacer(r) }\nfunc (v *Viper) SetEnvKeyReplacer(r *strings.Replacer) {\n\tv.envKeyReplacer = r\n}\n\n// Aliases provide another accessor for the same key.\n// This enables one to change a name without breaking the application\nfunc RegisterAlias(alias string, key string) { v.RegisterAlias(alias, key) }\nfunc (v *Viper) RegisterAlias(alias string, key string) {\n\tv.registerAlias(alias, strings.ToLower(key))\n}\n\nfunc (v *Viper) registerAlias(alias string, key string) {\n\talias = strings.ToLower(alias)\n\tif alias != key && alias != v.realKey(key) {\n\t\t_, exists := v.aliases[alias]\n\n\t\tif !exists {\n\t\t\t// if we alias something that exists in one of the maps to another\n\t\t\t// name, we'll never be able to get that value using the original\n\t\t\t// name, so move the config value to the new realkey.\n\t\t\tif val, ok := v.config[alias]; ok {\n\t\t\t\tdelete(v.config, alias)\n\t\t\t\tv.config[key] = val\n\t\t\t}\n\t\t\tif val, ok := v.kvstore[alias]; ok {\n\t\t\t\tdelete(v.kvstore, alias)\n\t\t\t\tv.kvstore[key] = val\n\t\t\t}\n\t\t\tif val, ok := v.defaults[alias]; ok {\n\t\t\t\tdelete(v.defaults, alias)\n\t\t\t\tv.defaults[key] = val\n\t\t\t}\n\t\t\tif val, ok := v.override[alias]; ok {\n\t\t\t\tdelete(v.override, alias)\n\t\t\t\tv.override[key] = val\n\t\t\t}\n\t\t\tv.aliases[alias] = key\n\t\t}\n\t} else {\n\t\tjww.WARN.Println(\"Creating circular reference alias\", alias, key, v.realKey(key))\n\t}\n}\n\nfunc (v *Viper) realKey(key string) string {\n\tnewkey, exists := v.aliases[key]\n\tif exists {\n\t\tjww.DEBUG.Println(\"Alias\", key, \"to\", newkey)\n\t\treturn v.realKey(newkey)\n\t}\n\treturn key\n}\n\n// InConfig checks to see if the given key (or an alias) is in the config file.\nfunc InConfig(key string) bool { return v.InConfig(key) }\nfunc (v *Viper) InConfig(key string) bool {\n\t// if the requested key is an alias, then return the proper key\n\tkey = v.realKey(key)\n\n\t_, exists := v.config[key]\n\treturn exists\n}\n\n// SetDefault sets the default value for this key.\n// SetDefault is case-insensitive for a key.\n// Default only used when no value is provided by the user via flag, config or ENV.\nfunc SetDefault(key string, value interface{}) { v.SetDefault(key, value) }\nfunc (v *Viper) SetDefault(key string, value interface{}) {\n\t// If alias passed in, then set the proper default\n\tkey = v.realKey(strings.ToLower(key))\n\tvalue = toCaseInsensitiveValue(value)\n\n\tpath := strings.Split(key, v.keyDelim)\n\tlastKey := strings.ToLower(path[len(path)-1])\n\tdeepestMap := deepSearch(v.defaults, path[0:len(path)-1])\n\n\t// set innermost value\n\tdeepestMap[lastKey] = value\n}\n\n// Set sets the value for the key in the override regiser.\n// Set is case-insensitive for a key.\n// Will be used instead of values obtained via\n// flags, config file, ENV, default, or key/value store.\nfunc Set(key string, value interface{}) { v.Set(key, value) }\nfunc (v *Viper) Set(key string, value interface{}) {\n\t// If alias passed in, then set the proper override\n\tkey = v.realKey(strings.ToLower(key))\n\tvalue = toCaseInsensitiveValue(value)\n\n\tpath := strings.Split(key, v.keyDelim)\n\tlastKey := strings.ToLower(path[len(path)-1])\n\tdeepestMap := deepSearch(v.override, path[0:len(path)-1])\n\n\t// set innermost value\n\tdeepestMap[lastKey] = value\n}\n\n// ReadInConfig will discover and load the configuration file from disk\n// and key/value stores, searching in one of the defined paths.\nfunc ReadInConfig() error { return v.ReadInConfig() }\nfunc (v *Viper) ReadInConfig() error {\n\tjww.INFO.Println(\"Attempting to read in config file\")\n\tfilename, err := v.getConfigFile()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !stringInSlice(v.getConfigType(), SupportedExts) {\n\t\treturn UnsupportedConfigError(v.getConfigType())\n\t}\n\n\tfile, err := afero.ReadFile(v.fs, filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tconfig := make(map[string]interface{})\n\n\terr = v.unmarshalReader(bytes.NewReader(file), config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv.config = config\n\treturn nil\n}\n\n// MergeInConfig merges a new configuration with an existing config.\nfunc MergeInConfig() error { return v.MergeInConfig() }\nfunc (v *Viper) MergeInConfig() error {\n\tjww.INFO.Println(\"Attempting to merge in config file\")\n\tfilename, err := v.getConfigFile()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !stringInSlice(v.getConfigType(), SupportedExts) {\n\t\treturn UnsupportedConfigError(v.getConfigType())\n\t}\n\n\tfile, err := afero.ReadFile(v.fs, filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn v.MergeConfig(bytes.NewReader(file))\n}\n\n// ReadConfig will read a configuration file, setting existing keys to nil if the\n// key does not exist in the file.\nfunc ReadConfig(in io.Reader) error { return v.ReadConfig(in) }\nfunc (v *Viper) ReadConfig(in io.Reader) error {\n\tv.config = make(map[string]interface{})\n\treturn v.unmarshalReader(in, v.config)\n}\n\n// MergeConfig merges a new configuration with an existing config.\nfunc MergeConfig(in io.Reader) error { return v.MergeConfig(in) }\nfunc (v *Viper) MergeConfig(in io.Reader) error {\n\tif v.config == nil {\n\t\tv.config = make(map[string]interface{})\n\t}\n\tcfg := make(map[string]interface{})\n\tif err := v.unmarshalReader(in, cfg); err != nil {\n\t\treturn err\n\t}\n\tmergeMaps(cfg, v.config, nil)\n\treturn nil\n}\n\nfunc keyExists(k string, m map[string]interface{}) string {\n\tlk := strings.ToLower(k)\n\tfor mk := range m {\n\t\tlmk := strings.ToLower(mk)\n\t\tif lmk == lk {\n\t\t\treturn mk\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc castToMapStringInterface(\n\tsrc map[interface{}]interface{}) map[string]interface{} {\n\ttgt := map[string]interface{}{}\n\tfor k, v := range src {\n\t\ttgt[fmt.Sprintf(\"%v\", k)] = v\n\t}\n\treturn tgt\n}\n\nfunc castMapStringToMapInterface(src map[string]string) map[string]interface{} {\n\ttgt := map[string]interface{}{}\n\tfor k, v := range src {\n\t\ttgt[k] = v\n\t}\n\treturn tgt\n}\n\nfunc castMapFlagToMapInterface(src map[string]FlagValue) map[string]interface{} {\n\ttgt := map[string]interface{}{}\n\tfor k, v := range src {\n\t\ttgt[k] = v\n\t}\n\treturn tgt\n}\n\n// mergeMaps merges two maps. The `itgt` parameter is for handling go-yaml's\n// insistence on parsing nested structures as `map[interface{}]interface{}`\n// instead of using a `string` as the key for nest structures beyond one level\n// deep. Both map types are supported as there is a go-yaml fork that uses\n// `map[string]interface{}` instead.\nfunc mergeMaps(\n\tsrc, tgt map[string]interface{}, itgt map[interface{}]interface{}) {\n\tfor sk, sv := range src {\n\t\ttk := keyExists(sk, tgt)\n\t\tif tk == \"\" {\n\t\t\tjww.TRACE.Printf(\"tk=\\\"\\\", tgt[%s]=%v\", sk, sv)\n\t\t\ttgt[sk] = sv\n\t\t\tif itgt != nil {\n\t\t\t\titgt[sk] = sv\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\ttv, ok := tgt[tk]\n\t\tif !ok {\n\t\t\tjww.TRACE.Printf(\"tgt[%s] != ok, tgt[%s]=%v\", tk, sk, sv)\n\t\t\ttgt[sk] = sv\n\t\t\tif itgt != nil {\n\t\t\t\titgt[sk] = sv\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tsvType := reflect.TypeOf(sv)\n\t\ttvType := reflect.TypeOf(tv)\n\t\tif svType != tvType {\n\t\t\tjww.ERROR.Printf(\n\t\t\t\t\"svType != tvType; key=%s, st=%v, tt=%v, sv=%v, tv=%v\",\n\t\t\t\tsk, svType, tvType, sv, tv)\n\t\t\tcontinue\n\t\t}\n\n\t\tjww.TRACE.Printf(\"processing key=%s, st=%v, tt=%v, sv=%v, tv=%v\",\n\t\t\tsk, svType, tvType, sv, tv)\n\n\t\tswitch ttv := tv.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\tjww.TRACE.Printf(\"merging maps (must convert)\")\n\t\t\ttsv := sv.(map[interface{}]interface{})\n\t\t\tssv := castToMapStringInterface(tsv)\n\t\t\tstv := castToMapStringInterface(ttv)\n\t\t\tmergeMaps(ssv, stv, ttv)\n\t\tcase map[string]interface{}:\n\t\t\tjww.TRACE.Printf(\"merging maps\")\n\t\t\tmergeMaps(sv.(map[string]interface{}), ttv, nil)\n\t\tdefault:\n\t\t\tjww.TRACE.Printf(\"setting value\")\n\t\t\ttgt[tk] = sv\n\t\t\tif itgt != nil {\n\t\t\t\titgt[tk] = sv\n\t\t\t}\n\t\t}\n\t}\n}\n\n// ReadRemoteConfig attempts to get configuration from a remote source\n// and read it in the remote configuration registry.\nfunc ReadRemoteConfig() error { return v.ReadRemoteConfig() }\nfunc (v *Viper) ReadRemoteConfig() error {\n\treturn v.getKeyValueConfig()\n}\n\nfunc WatchRemoteConfig() error { return v.WatchRemoteConfig() }\nfunc (v *Viper) WatchRemoteConfig() error {\n\treturn v.watchKeyValueConfig()\n}\n\nfunc (v *Viper) WatchRemoteConfigOnChannel() error {\n\treturn v.watchKeyValueConfigOnChannel()\n}\n\n// Unmarshall a Reader into a map.\n// Should probably be an unexported function.\nfunc unmarshalReader(in io.Reader, c map[string]interface{}) error {\n\treturn v.unmarshalReader(in, c)\n}\n\nfunc (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error {\n\treturn unmarshallConfigReader(in, c, v.getConfigType())\n}\n\nfunc (v *Viper) insensitiviseMaps() {\n\tinsensitiviseMap(v.config)\n\tinsensitiviseMap(v.defaults)\n\tinsensitiviseMap(v.override)\n\tinsensitiviseMap(v.kvstore)\n}\n\n// Retrieve the first found remote configuration.\nfunc (v *Viper) getKeyValueConfig() error {\n\tif RemoteConfig == nil {\n\t\treturn RemoteConfigError(\"Enable the remote features by doing a blank import of the viper/remote package: '_ github.com/spf13/viper/remote'\")\n\t}\n\n\tfor _, rp := range v.remoteProviders {\n\t\tval, err := v.getRemoteConfig(rp)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tv.kvstore = val\n\t\treturn nil\n\t}\n\treturn RemoteConfigError(\"No Files Found\")\n}\n\nfunc (v *Viper) getRemoteConfig(provider RemoteProvider) (map[string]interface{}, error) {\n\treader, err := RemoteConfig.Get(provider)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = v.unmarshalReader(reader, v.kvstore)\n\treturn v.kvstore, err\n}\n\n// Retrieve the first found remote configuration.\nfunc (v *Viper) watchKeyValueConfigOnChannel() error {\n\tfor _, rp := range v.remoteProviders {\n\t\trespc, _ := RemoteConfig.WatchChannel(rp)\n\t\t//Todo: Add quit channel\n\t\tgo func(rc <-chan *RemoteResponse) {\n\t\t\tfor {\n\t\t\t\tb := <-rc\n\t\t\t\treader := bytes.NewReader(b.Value)\n\t\t\t\tv.unmarshalReader(reader, v.kvstore)\n\t\t\t}\n\t\t}(respc)\n\t\treturn nil\n\t}\n\treturn RemoteConfigError(\"No Files Found\")\n}\n\n// Retrieve the first found remote configuration.\nfunc (v *Viper) watchKeyValueConfig() error {\n\tfor _, rp := range v.remoteProviders {\n\t\tval, err := v.watchRemoteConfig(rp)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tv.kvstore = val\n\t\treturn nil\n\t}\n\treturn RemoteConfigError(\"No Files Found\")\n}\n\nfunc (v *Viper) watchRemoteConfig(provider RemoteProvider) (map[string]interface{}, error) {\n\treader, err := RemoteConfig.Watch(provider)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = v.unmarshalReader(reader, v.kvstore)\n\treturn v.kvstore, err\n}\n\n// AllKeys returns all keys holding a value, regardless of where they are set.\n// Nested keys are returned with a v.keyDelim (= \".\") separator\nfunc AllKeys() []string { return v.AllKeys() }\nfunc (v *Viper) AllKeys() []string {\n\tm := map[string]bool{}\n\t// add all paths, by order of descending priority to ensure correct shadowing\n\tm = v.flattenAndMergeMap(m, castMapStringToMapInterface(v.aliases), \"\")\n\tm = v.flattenAndMergeMap(m, v.override, \"\")\n\tm = v.mergeFlatMap(m, castMapFlagToMapInterface(v.pflags))\n\tm = v.mergeFlatMap(m, castMapStringToMapInterface(v.env))\n\tm = v.flattenAndMergeMap(m, v.config, \"\")\n\tm = v.flattenAndMergeMap(m, v.kvstore, \"\")\n\tm = v.flattenAndMergeMap(m, v.defaults, \"\")\n\n\t// convert set of paths to list\n\ta := []string{}\n\tfor x := range m {\n\t\ta = append(a, x)\n\t}\n\treturn a\n}\n\n// flattenAndMergeMap recursively flattens the given map into a map[string]bool\n// of key paths (used as a set, easier to manipulate than a []string):\n// - each path is merged into a single key string, delimited with v.keyDelim (= \".\")\n// - if a path is shadowed by an earlier value in the initial shadow map,\n//   it is skipped.\n// The resulting set of paths is merged to the given shadow set at the same time.\nfunc (v *Viper) flattenAndMergeMap(shadow map[string]bool, m map[string]interface{}, prefix string) map[string]bool {\n\tif shadow != nil && prefix != \"\" && shadow[prefix] {\n\t\t// prefix is shadowed => nothing more to flatten\n\t\treturn shadow\n\t}\n\tif shadow == nil {\n\t\tshadow = make(map[string]bool)\n\t}\n\n\tvar m2 map[string]interface{}\n\tif prefix != \"\" {\n\t\tprefix += v.keyDelim\n\t}\n\tfor k, val := range m {\n\t\tfullKey := prefix + k\n\t\tswitch val.(type) {\n\t\tcase map[string]interface{}:\n\t\t\tm2 = val.(map[string]interface{})\n\t\tcase map[interface{}]interface{}:\n\t\t\tm2 = cast.ToStringMap(val)\n\t\tdefault:\n\t\t\t// immediate value\n\t\t\tshadow[strings.ToLower(fullKey)] = true\n\t\t\tcontinue\n\t\t}\n\t\t// recursively merge to shadow map\n\t\tshadow = v.flattenAndMergeMap(shadow, m2, fullKey)\n\t}\n\treturn shadow\n}\n\n// mergeFlatMap merges the given maps, excluding values of the second map\n// shadowed by values from the first map.\nfunc (v *Viper) mergeFlatMap(shadow map[string]bool, m map[string]interface{}) map[string]bool {\n\t// scan keys\nouter:\n\tfor k, _ := range m {\n\t\tpath := strings.Split(k, v.keyDelim)\n\t\t// scan intermediate paths\n\t\tvar parentKey string\n\t\tfor i := 1; i < len(path); i++ {\n\t\t\tparentKey = strings.Join(path[0:i], v.keyDelim)\n\t\t\tif shadow[parentKey] {\n\t\t\t\t// path is shadowed, continue\n\t\t\t\tcontinue outer\n\t\t\t}\n\t\t}\n\t\t// add key\n\t\tshadow[strings.ToLower(k)] = true\n\t}\n\treturn shadow\n}\n\n// AllSettings merges all settings and returns them as a map[string]interface{}.\nfunc AllSettings() map[string]interface{} { return v.AllSettings() }\nfunc (v *Viper) AllSettings() map[string]interface{} {\n\tm := map[string]interface{}{}\n\t// start from the list of keys, and construct the map one value at a time\n\tfor _, k := range v.AllKeys() {\n\t\tvalue := v.Get(k)\n\t\tif value == nil {\n\t\t\t// should not happen, since AllKeys() returns only keys holding a value,\n\t\t\t// check just in case anything changes\n\t\t\tcontinue\n\t\t}\n\t\tpath := strings.Split(k, v.keyDelim)\n\t\tlastKey := strings.ToLower(path[len(path)-1])\n\t\tdeepestMap := deepSearch(m, path[0:len(path)-1])\n\t\t// set innermost value\n\t\tdeepestMap[lastKey] = value\n\t}\n\treturn m\n}\n\n// SetFs sets the filesystem to use to read configuration.\nfunc SetFs(fs afero.Fs) { v.SetFs(fs) }\nfunc (v *Viper) SetFs(fs afero.Fs) {\n\tv.fs = fs\n}\n\n// SetConfigName sets name for the config file.\n// Does not include extension.\nfunc SetConfigName(in string) { v.SetConfigName(in) }\nfunc (v *Viper) SetConfigName(in string) {\n\tif in != \"\" {\n\t\tv.configName = in\n\t\tv.configFile = \"\"\n\t}\n}\n\n// SetConfigType sets the type of the configuration returned by the\n// remote source, e.g. \"json\".\nfunc SetConfigType(in string) { v.SetConfigType(in) }\nfunc (v *Viper) SetConfigType(in string) {\n\tif in != \"\" {\n\t\tv.configType = in\n\t}\n}\n\nfunc (v *Viper) getConfigType() string {\n\tif v.configType != \"\" {\n\t\treturn v.configType\n\t}\n\n\tcf, err := v.getConfigFile()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\text := filepath.Ext(cf)\n\n\tif len(ext) > 1 {\n\t\treturn ext[1:]\n\t}\n\n\treturn \"\"\n}\n\nfunc (v *Viper) getConfigFile() (string, error) {\n\t// if explicitly set, then use it\n\tif v.configFile != \"\" {\n\t\treturn v.configFile, nil\n\t}\n\n\tcf, err := v.findConfigFile()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tv.configFile = cf\n\treturn v.getConfigFile()\n}\n\nfunc (v *Viper) searchInPath(in string) (filename string) {\n\tjww.DEBUG.Println(\"Searching for config in \", in)\n\tfor _, ext := range SupportedExts {\n\t\tjww.DEBUG.Println(\"Checking for\", filepath.Join(in, v.configName+\".\"+ext))\n\t\tif b, _ := exists(filepath.Join(in, v.configName+\".\"+ext)); b {\n\t\t\tjww.DEBUG.Println(\"Found: \", filepath.Join(in, v.configName+\".\"+ext))\n\t\t\treturn filepath.Join(in, v.configName+\".\"+ext)\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\n// Search all configPaths for any config file.\n// Returns the first path that exists (and is a config file).\nfunc (v *Viper) findConfigFile() (string, error) {\n\n\tjww.INFO.Println(\"Searching for config in \", v.configPaths)\n\n\tfor _, cp := range v.configPaths {\n\t\tfile := v.searchInPath(cp)\n\t\tif file != \"\" {\n\t\t\treturn file, nil\n\t\t}\n\t}\n\treturn \"\", ConfigFileNotFoundError{v.configName, fmt.Sprintf(\"%s\", v.configPaths)}\n}\n\n// Debug prints all configuration registries for debugging\n// purposes.\nfunc Debug() { v.Debug() }\nfunc (v *Viper) Debug() {\n\tfmt.Printf(\"Aliases:\\n%#v\\n\", v.aliases)\n\tfmt.Printf(\"Override:\\n%#v\\n\", v.override)\n\tfmt.Printf(\"PFlags:\\n%#v\\n\", v.pflags)\n\tfmt.Printf(\"Env:\\n%#v\\n\", v.env)\n\tfmt.Printf(\"Key/Value Store:\\n%#v\\n\", v.kvstore)\n\tfmt.Printf(\"Config:\\n%#v\\n\", v.config)\n\tfmt.Printf(\"Defaults:\\n%#v\\n\", v.defaults)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/0doc.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n/*\nHigh Performance, Feature-Rich Idiomatic Go codec/encoding library for \nbinc, msgpack, cbor, json.\n\nSupported Serialization formats are:\n\n  - msgpack: https://github.com/msgpack/msgpack\n  - binc:    http://github.com/ugorji/binc\n  - cbor:    http://cbor.io http://tools.ietf.org/html/rfc7049\n  - json:    http://json.org http://tools.ietf.org/html/rfc7159\n  - simple: \n\nTo install:\n\n    go get github.com/ugorji/go/codec\n\nThis package understands the 'unsafe' tag, to allow using unsafe semantics:\n\n  - When decoding into a struct, you need to read the field name as a string \n    so you can find the struct field it is mapped to.\n    Using `unsafe` will bypass the allocation and copying overhead of []byte->string conversion.\n\nTo install using unsafe, pass the 'unsafe' tag:\n\n    go get -tags=unsafe github.com/ugorji/go/codec\n\nFor detailed usage information, read the primer at http://ugorji.net/blog/go-codec-primer .\n\nThe idiomatic Go support is as seen in other encoding packages in\nthe standard library (ie json, xml, gob, etc).\n\nRich Feature Set includes:\n\n  - Simple but extremely powerful and feature-rich API\n  - Very High Performance.\n    Our extensive benchmarks show us outperforming Gob, Json, Bson, etc by 2-4X.\n  - Multiple conversions:\n    Package coerces types where appropriate \n    e.g. decode an int in the stream into a float, etc.\n  - Corner Cases: \n    Overflows, nil maps/slices, nil values in streams are handled correctly\n  - Standard field renaming via tags\n  - Support for omitting empty fields during an encoding\n  - Encoding from any value and decoding into pointer to any value\n    (struct, slice, map, primitives, pointers, interface{}, etc)\n  - Extensions to support efficient encoding/decoding of any named types\n  - Support encoding.(Binary|Text)(M|Unm)arshaler interfaces\n  - Decoding without a schema (into a interface{}).\n    Includes Options to configure what specific map or slice type to use\n    when decoding an encoded list or map into a nil interface{}\n  - Encode a struct as an array, and decode struct from an array in the data stream\n  - Comprehensive support for anonymous fields\n  - Fast (no-reflection) encoding/decoding of common maps and slices\n  - Code-generation for faster performance.\n  - Support binary (e.g. messagepack, cbor) and text (e.g. json) formats\n  - Support indefinite-length formats to enable true streaming \n    (for formats which support it e.g. json, cbor)\n  - Support canonical encoding, where a value is ALWAYS encoded as same sequence of bytes.\n    This mostly applies to maps, where iteration order is non-deterministic.\n  - NIL in data stream decoded as zero value\n  - Never silently skip data when decoding.\n    User decides whether to return an error or silently skip data when keys or indexes\n    in the data stream do not map to fields in the struct.\n  - Detect and error when encoding a cyclic reference (instead of stack overflow shutdown)\n  - Encode/Decode from/to chan types (for iterative streaming support)\n  - Drop-in replacement for encoding/json. `json:` key in struct tag supported.\n  - Provides a RPC Server and Client Codec for net/rpc communication protocol.\n  - Handle unique idiosyncrasies of codecs e.g. \n    - For messagepack, configure how ambiguities in handling raw bytes are resolved \n    - For messagepack, provide rpc server/client codec to support \n      msgpack-rpc protocol defined at:\n      https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md\n  \nExtension Support\n\nUsers can register a function to handle the encoding or decoding of\ntheir custom types.\n\nThere are no restrictions on what the custom type can be. Some examples:\n\n    type BisSet   []int\n    type BitSet64 uint64\n    type UUID     string\n    type MyStructWithUnexportedFields struct { a int; b bool; c []int; }\n    type GifImage struct { ... }\n\nAs an illustration, MyStructWithUnexportedFields would normally be\nencoded as an empty map because it has no exported fields, while UUID\nwould be encoded as a string. However, with extension support, you can\nencode any of these however you like.\n\nRPC\n\nRPC Client and Server Codecs are implemented, so the codecs can be used\nwith the standard net/rpc package.\n\nUsage\n\nThe Handle is SAFE for concurrent READ, but NOT SAFE for concurrent modification.\n\nThe Encoder and Decoder are NOT safe for concurrent use.\n\nConsequently, the usage model is basically:\n\n    - Create and initialize the Handle before any use.\n      Once created, DO NOT modify it.\n    - Multiple Encoders or Decoders can now use the Handle concurrently.\n      They only read information off the Handle (never write).\n    - However, each Encoder or Decoder MUST not be used concurrently\n    - To re-use an Encoder/Decoder, call Reset(...) on it first.\n      This allows you use state maintained on the Encoder/Decoder.\n\nSample usage model:\n\n    // create and configure Handle\n    var (\n      bh codec.BincHandle\n      mh codec.MsgpackHandle\n      ch codec.CborHandle\n    )\n\n    mh.MapType = reflect.TypeOf(map[string]interface{}(nil))\n\n    // configure extensions\n    // e.g. for msgpack, define functions and enable Time support for tag 1\n    // mh.SetExt(reflect.TypeOf(time.Time{}), 1, myExt)\n\n    // create and use decoder/encoder\n    var (\n      r io.Reader\n      w io.Writer\n      b []byte\n      h = &bh // or mh to use msgpack\n    )\n\n    dec = codec.NewDecoder(r, h)\n    dec = codec.NewDecoderBytes(b, h)\n    err = dec.Decode(&v)\n\n    enc = codec.NewEncoder(w, h)\n    enc = codec.NewEncoderBytes(&b, h)\n    err = enc.Encode(v)\n\n    //RPC Server\n    go func() {\n        for {\n            conn, err := listener.Accept()\n            rpcCodec := codec.GoRpc.ServerCodec(conn, h)\n            //OR rpcCodec := codec.MsgpackSpecRpc.ServerCodec(conn, h)\n            rpc.ServeCodec(rpcCodec)\n        }\n    }()\n\n    //RPC Communication (client side)\n    conn, err = net.Dial(\"tcp\", \"localhost:5555\")\n    rpcCodec := codec.GoRpc.ClientCodec(conn, h)\n    //OR rpcCodec := codec.MsgpackSpecRpc.ClientCodec(conn, h)\n    client := rpc.NewClientWithCodec(rpcCodec)\n\n*/\npackage codec\n\n// Benefits of go-codec:\n//\n//    - encoding/json always reads whole file into memory first.\n//      This makes it unsuitable for parsing very large files.\n//    - encoding/xml cannot parse into a map[string]interface{}\n//      I found this out on reading https://github.com/clbanning/mxj\n\n// TODO:\n//\n//   - optimization for codecgen:\n//     if len of entity is <= 3 words, then support a value receiver for encode.\n//   - (En|De)coder should store an error when it occurs.\n//     Until reset, subsequent calls return that error that was stored.\n//     This means that free panics must go away.\n//     All errors must be raised through errorf method.\n//   - Decoding using a chan is good, but incurs concurrency costs.\n//     This is because there's no fast way to use a channel without it\n//     having to switch goroutines constantly.\n//     Callback pattern is still the best. Maybe consider supporting something like:\n//        type X struct {\n//             Name string\n//             Ys []Y\n//             Ys chan <- Y\n//             Ys func(Y) -> call this function for each entry\n//        }\n//    - Consider adding a isZeroer interface { isZero() bool }\n//      It is used within isEmpty, for omitEmpty support.\n//    - Consider making Handle used AS-IS within the encoding/decoding session.\n//      This means that we don't cache Handle information within the (En|De)coder,\n//      except we really need it at Reset(...)\n//    - Consider adding math/big support\n//    - Consider reducing the size of the generated functions:\n//      Maybe use one loop, and put the conditionals in the loop.\n//      for ... { if cLen > 0 { if j == cLen { break } } else if dd.CheckBreak() { break } }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2012-2015 Ugorji Nwoke.\nAll rights reserved.\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/binc.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"time\"\n)\n\nconst bincDoPrune = true // No longer needed. Needed before as C lib did not support pruning.\n\n// vd as low 4 bits (there are 16 slots)\nconst (\n\tbincVdSpecial byte = iota\n\tbincVdPosInt\n\tbincVdNegInt\n\tbincVdFloat\n\n\tbincVdString\n\tbincVdByteArray\n\tbincVdArray\n\tbincVdMap\n\n\tbincVdTimestamp\n\tbincVdSmallInt\n\tbincVdUnicodeOther\n\tbincVdSymbol\n\n\tbincVdDecimal\n\t_               // open slot\n\t_               // open slot\n\tbincVdCustomExt = 0x0f\n)\n\nconst (\n\tbincSpNil byte = iota\n\tbincSpFalse\n\tbincSpTrue\n\tbincSpNan\n\tbincSpPosInf\n\tbincSpNegInf\n\tbincSpZeroFloat\n\tbincSpZero\n\tbincSpNegOne\n)\n\nconst (\n\tbincFlBin16 byte = iota\n\tbincFlBin32\n\t_ // bincFlBin32e\n\tbincFlBin64\n\t_ // bincFlBin64e\n\t// others not currently supported\n)\n\ntype bincEncDriver struct {\n\te *Encoder\n\tw encWriter\n\tm map[string]uint16 // symbols\n\tb [scratchByteArrayLen]byte\n\ts uint16 // symbols sequencer\n\tencNoSeparator\n}\n\nfunc (e *bincEncDriver) IsBuiltinType(rt uintptr) bool {\n\treturn rt == timeTypId\n}\n\nfunc (e *bincEncDriver) EncodeBuiltin(rt uintptr, v interface{}) {\n\tif rt == timeTypId {\n\t\tvar bs []byte\n\t\tswitch x := v.(type) {\n\t\tcase time.Time:\n\t\t\tbs = encodeTime(x)\n\t\tcase *time.Time:\n\t\t\tbs = encodeTime(*x)\n\t\tdefault:\n\t\t\te.e.errorf(\"binc error encoding builtin: expect time.Time, received %T\", v)\n\t\t}\n\t\te.w.writen1(bincVdTimestamp<<4 | uint8(len(bs)))\n\t\te.w.writeb(bs)\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeNil() {\n\te.w.writen1(bincVdSpecial<<4 | bincSpNil)\n}\n\nfunc (e *bincEncDriver) EncodeBool(b bool) {\n\tif b {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpTrue)\n\t} else {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpFalse)\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeFloat32(f float32) {\n\tif f == 0 {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat)\n\t\treturn\n\t}\n\te.w.writen1(bincVdFloat<<4 | bincFlBin32)\n\tbigenHelper{e.b[:4], e.w}.writeUint32(math.Float32bits(f))\n}\n\nfunc (e *bincEncDriver) EncodeFloat64(f float64) {\n\tif f == 0 {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpZeroFloat)\n\t\treturn\n\t}\n\tbigen.PutUint64(e.b[:8], math.Float64bits(f))\n\tif bincDoPrune {\n\t\ti := 7\n\t\tfor ; i >= 0 && (e.b[i] == 0); i-- {\n\t\t}\n\t\ti++\n\t\tif i <= 6 {\n\t\t\te.w.writen1(bincVdFloat<<4 | 0x8 | bincFlBin64)\n\t\t\te.w.writen1(byte(i))\n\t\t\te.w.writeb(e.b[:i])\n\t\t\treturn\n\t\t}\n\t}\n\te.w.writen1(bincVdFloat<<4 | bincFlBin64)\n\te.w.writeb(e.b[:8])\n}\n\nfunc (e *bincEncDriver) encIntegerPrune(bd byte, pos bool, v uint64, lim uint8) {\n\tif lim == 4 {\n\t\tbigen.PutUint32(e.b[:lim], uint32(v))\n\t} else {\n\t\tbigen.PutUint64(e.b[:lim], v)\n\t}\n\tif bincDoPrune {\n\t\ti := pruneSignExt(e.b[:lim], pos)\n\t\te.w.writen1(bd | lim - 1 - byte(i))\n\t\te.w.writeb(e.b[i:lim])\n\t} else {\n\t\te.w.writen1(bd | lim - 1)\n\t\te.w.writeb(e.b[:lim])\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeInt(v int64) {\n\tconst nbd byte = bincVdNegInt << 4\n\tif v >= 0 {\n\t\te.encUint(bincVdPosInt<<4, true, uint64(v))\n\t} else if v == -1 {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpNegOne)\n\t} else {\n\t\te.encUint(bincVdNegInt<<4, false, uint64(-v))\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeUint(v uint64) {\n\te.encUint(bincVdPosInt<<4, true, v)\n}\n\nfunc (e *bincEncDriver) encUint(bd byte, pos bool, v uint64) {\n\tif v == 0 {\n\t\te.w.writen1(bincVdSpecial<<4 | bincSpZero)\n\t} else if pos && v >= 1 && v <= 16 {\n\t\te.w.writen1(bincVdSmallInt<<4 | byte(v-1))\n\t} else if v <= math.MaxUint8 {\n\t\te.w.writen2(bd|0x0, byte(v))\n\t} else if v <= math.MaxUint16 {\n\t\te.w.writen1(bd | 0x01)\n\t\tbigenHelper{e.b[:2], e.w}.writeUint16(uint16(v))\n\t} else if v <= math.MaxUint32 {\n\t\te.encIntegerPrune(bd, pos, v, 4)\n\t} else {\n\t\te.encIntegerPrune(bd, pos, v, 8)\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, _ *Encoder) {\n\tbs := ext.WriteExt(rv)\n\tif bs == nil {\n\t\te.EncodeNil()\n\t\treturn\n\t}\n\te.encodeExtPreamble(uint8(xtag), len(bs))\n\te.w.writeb(bs)\n}\n\nfunc (e *bincEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) {\n\te.encodeExtPreamble(uint8(re.Tag), len(re.Data))\n\te.w.writeb(re.Data)\n}\n\nfunc (e *bincEncDriver) encodeExtPreamble(xtag byte, length int) {\n\te.encLen(bincVdCustomExt<<4, uint64(length))\n\te.w.writen1(xtag)\n}\n\nfunc (e *bincEncDriver) EncodeArrayStart(length int) {\n\te.encLen(bincVdArray<<4, uint64(length))\n}\n\nfunc (e *bincEncDriver) EncodeMapStart(length int) {\n\te.encLen(bincVdMap<<4, uint64(length))\n}\n\nfunc (e *bincEncDriver) EncodeString(c charEncoding, v string) {\n\tl := uint64(len(v))\n\te.encBytesLen(c, l)\n\tif l > 0 {\n\t\te.w.writestr(v)\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeSymbol(v string) {\n\t// if WriteSymbolsNoRefs {\n\t// \te.encodeString(c_UTF8, v)\n\t// \treturn\n\t// }\n\n\t//symbols only offer benefit when string length > 1.\n\t//This is because strings with length 1 take only 2 bytes to store\n\t//(bd with embedded length, and single byte for string val).\n\n\tl := len(v)\n\tif l == 0 {\n\t\te.encBytesLen(c_UTF8, 0)\n\t\treturn\n\t} else if l == 1 {\n\t\te.encBytesLen(c_UTF8, 1)\n\t\te.w.writen1(v[0])\n\t\treturn\n\t}\n\tif e.m == nil {\n\t\te.m = make(map[string]uint16, 16)\n\t}\n\tui, ok := e.m[v]\n\tif ok {\n\t\tif ui <= math.MaxUint8 {\n\t\t\te.w.writen2(bincVdSymbol<<4, byte(ui))\n\t\t} else {\n\t\t\te.w.writen1(bincVdSymbol<<4 | 0x8)\n\t\t\tbigenHelper{e.b[:2], e.w}.writeUint16(ui)\n\t\t}\n\t} else {\n\t\te.s++\n\t\tui = e.s\n\t\t//ui = uint16(atomic.AddUint32(&e.s, 1))\n\t\te.m[v] = ui\n\t\tvar lenprec uint8\n\t\tif l <= math.MaxUint8 {\n\t\t\t// lenprec = 0\n\t\t} else if l <= math.MaxUint16 {\n\t\t\tlenprec = 1\n\t\t} else if int64(l) <= math.MaxUint32 {\n\t\t\tlenprec = 2\n\t\t} else {\n\t\t\tlenprec = 3\n\t\t}\n\t\tif ui <= math.MaxUint8 {\n\t\t\te.w.writen2(bincVdSymbol<<4|0x0|0x4|lenprec, byte(ui))\n\t\t} else {\n\t\t\te.w.writen1(bincVdSymbol<<4 | 0x8 | 0x4 | lenprec)\n\t\t\tbigenHelper{e.b[:2], e.w}.writeUint16(ui)\n\t\t}\n\t\tif lenprec == 0 {\n\t\t\te.w.writen1(byte(l))\n\t\t} else if lenprec == 1 {\n\t\t\tbigenHelper{e.b[:2], e.w}.writeUint16(uint16(l))\n\t\t} else if lenprec == 2 {\n\t\t\tbigenHelper{e.b[:4], e.w}.writeUint32(uint32(l))\n\t\t} else {\n\t\t\tbigenHelper{e.b[:8], e.w}.writeUint64(uint64(l))\n\t\t}\n\t\te.w.writestr(v)\n\t}\n}\n\nfunc (e *bincEncDriver) EncodeStringBytes(c charEncoding, v []byte) {\n\tl := uint64(len(v))\n\te.encBytesLen(c, l)\n\tif l > 0 {\n\t\te.w.writeb(v)\n\t}\n}\n\nfunc (e *bincEncDriver) encBytesLen(c charEncoding, length uint64) {\n\t//TODO: support bincUnicodeOther (for now, just use string or bytearray)\n\tif c == c_RAW {\n\t\te.encLen(bincVdByteArray<<4, length)\n\t} else {\n\t\te.encLen(bincVdString<<4, length)\n\t}\n}\n\nfunc (e *bincEncDriver) encLen(bd byte, l uint64) {\n\tif l < 12 {\n\t\te.w.writen1(bd | uint8(l+4))\n\t} else {\n\t\te.encLenNumber(bd, l)\n\t}\n}\n\nfunc (e *bincEncDriver) encLenNumber(bd byte, v uint64) {\n\tif v <= math.MaxUint8 {\n\t\te.w.writen2(bd, byte(v))\n\t} else if v <= math.MaxUint16 {\n\t\te.w.writen1(bd | 0x01)\n\t\tbigenHelper{e.b[:2], e.w}.writeUint16(uint16(v))\n\t} else if v <= math.MaxUint32 {\n\t\te.w.writen1(bd | 0x02)\n\t\tbigenHelper{e.b[:4], e.w}.writeUint32(uint32(v))\n\t} else {\n\t\te.w.writen1(bd | 0x03)\n\t\tbigenHelper{e.b[:8], e.w}.writeUint64(uint64(v))\n\t}\n}\n\n//------------------------------------\n\ntype bincDecSymbol struct {\n\ts string\n\tb []byte\n\ti uint16\n}\n\ntype bincDecDriver struct {\n\td      *Decoder\n\th      *BincHandle\n\tr      decReader\n\tbr     bool // bytes reader\n\tbdRead bool\n\tbd     byte\n\tvd     byte\n\tvs     byte\n\tnoStreamingCodec\n\tdecNoSeparator\n\tb [scratchByteArrayLen]byte\n\n\t// linear searching on this slice is ok,\n\t// because we typically expect < 32 symbols in each stream.\n\ts []bincDecSymbol\n}\n\nfunc (d *bincDecDriver) readNextBd() {\n\td.bd = d.r.readn1()\n\td.vd = d.bd >> 4\n\td.vs = d.bd & 0x0f\n\td.bdRead = true\n}\n\nfunc (d *bincDecDriver) uncacheRead() {\n\tif d.bdRead {\n\t\td.r.unreadn1()\n\t\td.bdRead = false\n\t}\n}\n\nfunc (d *bincDecDriver) ContainerType() (vt valueType) {\n\tif d.vd == bincVdSpecial && d.vs == bincSpNil {\n\t\treturn valueTypeNil\n\t} else if d.vd == bincVdByteArray {\n\t\treturn valueTypeBytes\n\t} else if d.vd == bincVdString {\n\t\treturn valueTypeString\n\t} else if d.vd == bincVdArray {\n\t\treturn valueTypeArray\n\t} else if d.vd == bincVdMap {\n\t\treturn valueTypeMap\n\t} else {\n\t\t// d.d.errorf(\"isContainerType: unsupported parameter: %v\", vt)\n\t}\n\treturn valueTypeUnset\n}\n\nfunc (d *bincDecDriver) TryDecodeAsNil() bool {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == bincVdSpecial<<4|bincSpNil {\n\t\td.bdRead = false\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *bincDecDriver) IsBuiltinType(rt uintptr) bool {\n\treturn rt == timeTypId\n}\n\nfunc (d *bincDecDriver) DecodeBuiltin(rt uintptr, v interface{}) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif rt == timeTypId {\n\t\tif d.vd != bincVdTimestamp {\n\t\t\td.d.errorf(\"Invalid d.vd. Expecting 0x%x. Received: 0x%x\", bincVdTimestamp, d.vd)\n\t\t\treturn\n\t\t}\n\t\ttt, err := decodeTime(d.r.readx(int(d.vs)))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tvar vt *time.Time = v.(*time.Time)\n\t\t*vt = tt\n\t\td.bdRead = false\n\t}\n}\n\nfunc (d *bincDecDriver) decFloatPre(vs, defaultLen byte) {\n\tif vs&0x8 == 0 {\n\t\td.r.readb(d.b[0:defaultLen])\n\t} else {\n\t\tl := d.r.readn1()\n\t\tif l > 8 {\n\t\t\td.d.errorf(\"At most 8 bytes used to represent float. Received: %v bytes\", l)\n\t\t\treturn\n\t\t}\n\t\tfor i := l; i < 8; i++ {\n\t\t\td.b[i] = 0\n\t\t}\n\t\td.r.readb(d.b[0:l])\n\t}\n}\n\nfunc (d *bincDecDriver) decFloat() (f float64) {\n\t//if true { f = math.Float64frombits(bigen.Uint64(d.r.readx(8))); break; }\n\tif x := d.vs & 0x7; x == bincFlBin32 {\n\t\td.decFloatPre(d.vs, 4)\n\t\tf = float64(math.Float32frombits(bigen.Uint32(d.b[0:4])))\n\t} else if x == bincFlBin64 {\n\t\td.decFloatPre(d.vs, 8)\n\t\tf = math.Float64frombits(bigen.Uint64(d.b[0:8]))\n\t} else {\n\t\td.d.errorf(\"only float32 and float64 are supported. d.vd: 0x%x, d.vs: 0x%x\", d.vd, d.vs)\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *bincDecDriver) decUint() (v uint64) {\n\t// need to inline the code (interface conversion and type assertion expensive)\n\tswitch d.vs {\n\tcase 0:\n\t\tv = uint64(d.r.readn1())\n\tcase 1:\n\t\td.r.readb(d.b[6:8])\n\t\tv = uint64(bigen.Uint16(d.b[6:8]))\n\tcase 2:\n\t\td.b[4] = 0\n\t\td.r.readb(d.b[5:8])\n\t\tv = uint64(bigen.Uint32(d.b[4:8]))\n\tcase 3:\n\t\td.r.readb(d.b[4:8])\n\t\tv = uint64(bigen.Uint32(d.b[4:8]))\n\tcase 4, 5, 6:\n\t\tlim := int(7 - d.vs)\n\t\td.r.readb(d.b[lim:8])\n\t\tfor i := 0; i < lim; i++ {\n\t\t\td.b[i] = 0\n\t\t}\n\t\tv = uint64(bigen.Uint64(d.b[:8]))\n\tcase 7:\n\t\td.r.readb(d.b[:8])\n\t\tv = uint64(bigen.Uint64(d.b[:8]))\n\tdefault:\n\t\td.d.errorf(\"unsigned integers with greater than 64 bits of precision not supported\")\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *bincDecDriver) decCheckInteger() (ui uint64, neg bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tvd, vs := d.vd, d.vs\n\tif vd == bincVdPosInt {\n\t\tui = d.decUint()\n\t} else if vd == bincVdNegInt {\n\t\tui = d.decUint()\n\t\tneg = true\n\t} else if vd == bincVdSmallInt {\n\t\tui = uint64(d.vs) + 1\n\t} else if vd == bincVdSpecial {\n\t\tif vs == bincSpZero {\n\t\t\t//i = 0\n\t\t} else if vs == bincSpNegOne {\n\t\t\tneg = true\n\t\t\tui = 1\n\t\t} else {\n\t\t\td.d.errorf(\"numeric decode fails for special value: d.vs: 0x%x\", d.vs)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\td.d.errorf(\"number can only be decoded from uint or int values. d.bd: 0x%x, d.vd: 0x%x\", d.bd, d.vd)\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeInt(bitsize uint8) (i int64) {\n\tui, neg := d.decCheckInteger()\n\ti, overflow := chkOvf.SignedInt(ui)\n\tif overflow {\n\t\td.d.errorf(\"simple: overflow converting %v to signed integer\", ui)\n\t\treturn\n\t}\n\tif neg {\n\t\ti = -i\n\t}\n\tif chkOvf.Int(i, bitsize) {\n\t\td.d.errorf(\"binc: overflow integer: %v\", i)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeUint(bitsize uint8) (ui uint64) {\n\tui, neg := d.decCheckInteger()\n\tif neg {\n\t\td.d.errorf(\"Assigning negative signed value to unsigned type\")\n\t\treturn\n\t}\n\tif chkOvf.Uint(ui, bitsize) {\n\t\td.d.errorf(\"binc: overflow integer: %v\", ui)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tvd, vs := d.vd, d.vs\n\tif vd == bincVdSpecial {\n\t\td.bdRead = false\n\t\tif vs == bincSpNan {\n\t\t\treturn math.NaN()\n\t\t} else if vs == bincSpPosInf {\n\t\t\treturn math.Inf(1)\n\t\t} else if vs == bincSpZeroFloat || vs == bincSpZero {\n\t\t\treturn\n\t\t} else if vs == bincSpNegInf {\n\t\t\treturn math.Inf(-1)\n\t\t} else {\n\t\t\td.d.errorf(\"Invalid d.vs decoding float where d.vd=bincVdSpecial: %v\", d.vs)\n\t\t\treturn\n\t\t}\n\t} else if vd == bincVdFloat {\n\t\tf = d.decFloat()\n\t} else {\n\t\tf = float64(d.DecodeInt(64))\n\t}\n\tif chkOverflow32 && chkOvf.Float32(f) {\n\t\td.d.errorf(\"binc: float32 overflow: %v\", f)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// bool can be decoded from bool only (single byte).\nfunc (d *bincDecDriver) DecodeBool() (b bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif bd := d.bd; bd == (bincVdSpecial | bincSpFalse) {\n\t\t// b = false\n\t} else if bd == (bincVdSpecial | bincSpTrue) {\n\t\tb = true\n\t} else {\n\t\td.d.errorf(\"Invalid single-byte value for bool: %s: %x\", msgBadDesc, d.bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) ReadMapStart() (length int) {\n\tif d.vd != bincVdMap {\n\t\td.d.errorf(\"Invalid d.vd for map. Expecting 0x%x. Got: 0x%x\", bincVdMap, d.vd)\n\t\treturn\n\t}\n\tlength = d.decLen()\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) ReadArrayStart() (length int) {\n\tif d.vd != bincVdArray {\n\t\td.d.errorf(\"Invalid d.vd for array. Expecting 0x%x. Got: 0x%x\", bincVdArray, d.vd)\n\t\treturn\n\t}\n\tlength = d.decLen()\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) decLen() int {\n\tif d.vs > 3 {\n\t\treturn int(d.vs - 4)\n\t}\n\treturn int(d.decLenNumber())\n}\n\nfunc (d *bincDecDriver) decLenNumber() (v uint64) {\n\tif x := d.vs; x == 0 {\n\t\tv = uint64(d.r.readn1())\n\t} else if x == 1 {\n\t\td.r.readb(d.b[6:8])\n\t\tv = uint64(bigen.Uint16(d.b[6:8]))\n\t} else if x == 2 {\n\t\td.r.readb(d.b[4:8])\n\t\tv = uint64(bigen.Uint32(d.b[4:8]))\n\t} else {\n\t\td.r.readb(d.b[:8])\n\t\tv = bigen.Uint64(d.b[:8])\n\t}\n\treturn\n}\n\nfunc (d *bincDecDriver) decStringAndBytes(bs []byte, withString, zerocopy bool) (bs2 []byte, s string) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == bincVdSpecial<<4|bincSpNil {\n\t\td.bdRead = false\n\t\treturn\n\t}\n\tvar slen int = -1\n\t// var ok bool\n\tswitch d.vd {\n\tcase bincVdString, bincVdByteArray:\n\t\tslen = d.decLen()\n\t\tif zerocopy {\n\t\t\tif d.br {\n\t\t\t\tbs2 = d.r.readx(slen)\n\t\t\t} else if len(bs) == 0 {\n\t\t\t\tbs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, d.b[:])\n\t\t\t} else {\n\t\t\t\tbs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, bs)\n\t\t\t}\n\t\t} else {\n\t\t\tbs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, bs)\n\t\t}\n\t\tif withString {\n\t\t\ts = string(bs2)\n\t\t}\n\tcase bincVdSymbol:\n\t\t// zerocopy doesn't apply for symbols,\n\t\t// as the values must be stored in a table for later use.\n\t\t//\n\t\t//from vs: extract numSymbolBytes, containsStringVal, strLenPrecision,\n\t\t//extract symbol\n\t\t//if containsStringVal, read it and put in map\n\t\t//else look in map for string value\n\t\tvar symbol uint16\n\t\tvs := d.vs\n\t\tif vs&0x8 == 0 {\n\t\t\tsymbol = uint16(d.r.readn1())\n\t\t} else {\n\t\t\tsymbol = uint16(bigen.Uint16(d.r.readx(2)))\n\t\t}\n\t\tif d.s == nil {\n\t\t\td.s = make([]bincDecSymbol, 0, 16)\n\t\t}\n\n\t\tif vs&0x4 == 0 {\n\t\t\tfor i := range d.s {\n\t\t\t\tj := &d.s[i]\n\t\t\t\tif j.i == symbol {\n\t\t\t\t\tbs2 = j.b\n\t\t\t\t\tif withString {\n\t\t\t\t\t\tif j.s == \"\" && bs2 != nil {\n\t\t\t\t\t\t\tj.s = string(bs2)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = j.s\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tswitch vs & 0x3 {\n\t\t\tcase 0:\n\t\t\t\tslen = int(d.r.readn1())\n\t\t\tcase 1:\n\t\t\t\tslen = int(bigen.Uint16(d.r.readx(2)))\n\t\t\tcase 2:\n\t\t\t\tslen = int(bigen.Uint32(d.r.readx(4)))\n\t\t\tcase 3:\n\t\t\t\tslen = int(bigen.Uint64(d.r.readx(8)))\n\t\t\t}\n\t\t\t// since using symbols, do not store any part of\n\t\t\t// the parameter bs in the map, as it might be a shared buffer.\n\t\t\t// bs2 = decByteSlice(d.r, slen, bs)\n\t\t\tbs2 = decByteSlice(d.r, slen, d.d.h.MaxInitLen, nil)\n\t\t\tif withString {\n\t\t\t\ts = string(bs2)\n\t\t\t}\n\t\t\td.s = append(d.s, bincDecSymbol{i: symbol, s: s, b: bs2})\n\t\t}\n\tdefault:\n\t\td.d.errorf(\"Invalid d.vd. Expecting string:0x%x, bytearray:0x%x or symbol: 0x%x. Got: 0x%x\",\n\t\t\tbincVdString, bincVdByteArray, bincVdSymbol, d.vd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeString() (s string) {\n\t// DecodeBytes does not accommodate symbols, whose impl stores string version in map.\n\t// Use decStringAndBytes directly.\n\t// return string(d.DecodeBytes(d.b[:], true, true))\n\t_, s = d.decStringAndBytes(d.b[:], true, true)\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {\n\tif isstring {\n\t\tbsOut, _ = d.decStringAndBytes(bs, false, zerocopy)\n\t\treturn\n\t}\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == bincVdSpecial<<4|bincSpNil {\n\t\td.bdRead = false\n\t\treturn nil\n\t}\n\tvar clen int\n\tif d.vd == bincVdString || d.vd == bincVdByteArray {\n\t\tclen = d.decLen()\n\t} else {\n\t\td.d.errorf(\"Invalid d.vd for bytes. Expecting string:0x%x or bytearray:0x%x. Got: 0x%x\",\n\t\t\tbincVdString, bincVdByteArray, d.vd)\n\t\treturn\n\t}\n\td.bdRead = false\n\tif zerocopy {\n\t\tif d.br {\n\t\t\treturn d.r.readx(clen)\n\t\t} else if len(bs) == 0 {\n\t\t\tbs = d.b[:]\n\t\t}\n\t}\n\treturn decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)\n}\n\nfunc (d *bincDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {\n\tif xtag > 0xff {\n\t\td.d.errorf(\"decodeExt: tag must be <= 0xff; got: %v\", xtag)\n\t\treturn\n\t}\n\trealxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag))\n\trealxtag = uint64(realxtag1)\n\tif ext == nil {\n\t\tre := rv.(*RawExt)\n\t\tre.Tag = realxtag\n\t\tre.Data = detachZeroCopyBytes(d.br, re.Data, xbs)\n\t} else {\n\t\text.ReadExt(rv, xbs)\n\t}\n\treturn\n}\n\nfunc (d *bincDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.vd == bincVdCustomExt {\n\t\tl := d.decLen()\n\t\txtag = d.r.readn1()\n\t\tif verifyTag && xtag != tag {\n\t\t\td.d.errorf(\"Wrong extension tag. Got %b. Expecting: %v\", xtag, tag)\n\t\t\treturn\n\t\t}\n\t\txbs = d.r.readx(l)\n\t} else if d.vd == bincVdByteArray {\n\t\txbs = d.DecodeBytes(nil, false, true)\n\t} else {\n\t\td.d.errorf(\"Invalid d.vd for extensions (Expecting extensions or byte array). Got: 0x%x\", d.vd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *bincDecDriver) DecodeNaked() {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\n\tn := &d.d.n\n\tvar decodeFurther bool\n\n\tswitch d.vd {\n\tcase bincVdSpecial:\n\t\tswitch d.vs {\n\t\tcase bincSpNil:\n\t\t\tn.v = valueTypeNil\n\t\tcase bincSpFalse:\n\t\t\tn.v = valueTypeBool\n\t\t\tn.b = false\n\t\tcase bincSpTrue:\n\t\t\tn.v = valueTypeBool\n\t\t\tn.b = true\n\t\tcase bincSpNan:\n\t\t\tn.v = valueTypeFloat\n\t\t\tn.f = math.NaN()\n\t\tcase bincSpPosInf:\n\t\t\tn.v = valueTypeFloat\n\t\t\tn.f = math.Inf(1)\n\t\tcase bincSpNegInf:\n\t\t\tn.v = valueTypeFloat\n\t\t\tn.f = math.Inf(-1)\n\t\tcase bincSpZeroFloat:\n\t\t\tn.v = valueTypeFloat\n\t\t\tn.f = float64(0)\n\t\tcase bincSpZero:\n\t\t\tn.v = valueTypeUint\n\t\t\tn.u = uint64(0) // int8(0)\n\t\tcase bincSpNegOne:\n\t\t\tn.v = valueTypeInt\n\t\t\tn.i = int64(-1) // int8(-1)\n\t\tdefault:\n\t\t\td.d.errorf(\"decodeNaked: Unrecognized special value 0x%x\", d.vs)\n\t\t}\n\tcase bincVdSmallInt:\n\t\tn.v = valueTypeUint\n\t\tn.u = uint64(int8(d.vs)) + 1 // int8(d.vs) + 1\n\tcase bincVdPosInt:\n\t\tn.v = valueTypeUint\n\t\tn.u = d.decUint()\n\tcase bincVdNegInt:\n\t\tn.v = valueTypeInt\n\t\tn.i = -(int64(d.decUint()))\n\tcase bincVdFloat:\n\t\tn.v = valueTypeFloat\n\t\tn.f = d.decFloat()\n\tcase bincVdSymbol:\n\t\tn.v = valueTypeSymbol\n\t\tn.s = d.DecodeString()\n\tcase bincVdString:\n\t\tn.v = valueTypeString\n\t\tn.s = d.DecodeString()\n\tcase bincVdByteArray:\n\t\tn.v = valueTypeBytes\n\t\tn.l = d.DecodeBytes(nil, false, false)\n\tcase bincVdTimestamp:\n\t\tn.v = valueTypeTimestamp\n\t\ttt, err := decodeTime(d.r.readx(int(d.vs)))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tn.t = tt\n\tcase bincVdCustomExt:\n\t\tn.v = valueTypeExt\n\t\tl := d.decLen()\n\t\tn.u = uint64(d.r.readn1())\n\t\tn.l = d.r.readx(l)\n\tcase bincVdArray:\n\t\tn.v = valueTypeArray\n\t\tdecodeFurther = true\n\tcase bincVdMap:\n\t\tn.v = valueTypeMap\n\t\tdecodeFurther = true\n\tdefault:\n\t\td.d.errorf(\"decodeNaked: Unrecognized d.vd: 0x%x\", d.vd)\n\t}\n\n\tif !decodeFurther {\n\t\td.bdRead = false\n\t}\n\tif n.v == valueTypeUint && d.h.SignedInteger {\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(n.u)\n\t}\n\treturn\n}\n\n//------------------------------------\n\n//BincHandle is a Handle for the Binc Schema-Free Encoding Format\n//defined at https://github.com/ugorji/binc .\n//\n//BincHandle currently supports all Binc features with the following EXCEPTIONS:\n//  - only integers up to 64 bits of precision are supported.\n//    big integers are unsupported.\n//  - Only IEEE 754 binary32 and binary64 floats are supported (ie Go float32 and float64 types).\n//    extended precision and decimal IEEE 754 floats are unsupported.\n//  - Only UTF-8 strings supported.\n//    Unicode_Other Binc types (UTF16, UTF32) are currently unsupported.\n//\n//Note that these EXCEPTIONS are temporary and full support is possible and may happen soon.\ntype BincHandle struct {\n\tBasicHandle\n\tbinaryEncodingType\n}\n\nfunc (h *BincHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {\n\treturn h.SetExt(rt, tag, &setExtWrapper{b: ext})\n}\n\nfunc (h *BincHandle) newEncDriver(e *Encoder) encDriver {\n\treturn &bincEncDriver{e: e, w: e.w}\n}\n\nfunc (h *BincHandle) newDecDriver(d *Decoder) decDriver {\n\treturn &bincDecDriver{d: d, h: h, r: d.r, br: d.bytes}\n}\n\nfunc (e *bincEncDriver) reset() {\n\te.w = e.e.w\n\te.s = 0\n\te.m = nil\n}\n\nfunc (d *bincDecDriver) reset() {\n\td.r, d.br = d.d.r, d.d.bytes\n\td.s = nil\n\td.bd, d.bdRead, d.vd, d.vs = 0, false, 0, 0\n}\n\nvar _ decDriver = (*bincDecDriver)(nil)\nvar _ encDriver = (*bincEncDriver)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/cbor.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"math\"\n\t\"reflect\"\n)\n\nconst (\n\tcborMajorUint byte = iota\n\tcborMajorNegInt\n\tcborMajorBytes\n\tcborMajorText\n\tcborMajorArray\n\tcborMajorMap\n\tcborMajorTag\n\tcborMajorOther\n)\n\nconst (\n\tcborBdFalse byte = 0xf4 + iota\n\tcborBdTrue\n\tcborBdNil\n\tcborBdUndefined\n\tcborBdExt\n\tcborBdFloat16\n\tcborBdFloat32\n\tcborBdFloat64\n)\n\nconst (\n\tcborBdIndefiniteBytes  byte = 0x5f\n\tcborBdIndefiniteString      = 0x7f\n\tcborBdIndefiniteArray       = 0x9f\n\tcborBdIndefiniteMap         = 0xbf\n\tcborBdBreak                 = 0xff\n)\n\nconst (\n\tCborStreamBytes  byte = 0x5f\n\tCborStreamString      = 0x7f\n\tCborStreamArray       = 0x9f\n\tCborStreamMap         = 0xbf\n\tCborStreamBreak       = 0xff\n)\n\nconst (\n\tcborBaseUint   byte = 0x00\n\tcborBaseNegInt      = 0x20\n\tcborBaseBytes       = 0x40\n\tcborBaseString      = 0x60\n\tcborBaseArray       = 0x80\n\tcborBaseMap         = 0xa0\n\tcborBaseTag         = 0xc0\n\tcborBaseSimple      = 0xe0\n)\n\n// -------------------\n\ntype cborEncDriver struct {\n\tnoBuiltInTypes\n\tencNoSeparator\n\te *Encoder\n\tw encWriter\n\th *CborHandle\n\tx [8]byte\n}\n\nfunc (e *cborEncDriver) EncodeNil() {\n\te.w.writen1(cborBdNil)\n}\n\nfunc (e *cborEncDriver) EncodeBool(b bool) {\n\tif b {\n\t\te.w.writen1(cborBdTrue)\n\t} else {\n\t\te.w.writen1(cborBdFalse)\n\t}\n}\n\nfunc (e *cborEncDriver) EncodeFloat32(f float32) {\n\te.w.writen1(cborBdFloat32)\n\tbigenHelper{e.x[:4], e.w}.writeUint32(math.Float32bits(f))\n}\n\nfunc (e *cborEncDriver) EncodeFloat64(f float64) {\n\te.w.writen1(cborBdFloat64)\n\tbigenHelper{e.x[:8], e.w}.writeUint64(math.Float64bits(f))\n}\n\nfunc (e *cborEncDriver) encUint(v uint64, bd byte) {\n\tif v <= 0x17 {\n\t\te.w.writen1(byte(v) + bd)\n\t} else if v <= math.MaxUint8 {\n\t\te.w.writen2(bd+0x18, uint8(v))\n\t} else if v <= math.MaxUint16 {\n\t\te.w.writen1(bd + 0x19)\n\t\tbigenHelper{e.x[:2], e.w}.writeUint16(uint16(v))\n\t} else if v <= math.MaxUint32 {\n\t\te.w.writen1(bd + 0x1a)\n\t\tbigenHelper{e.x[:4], e.w}.writeUint32(uint32(v))\n\t} else { // if v <= math.MaxUint64 {\n\t\te.w.writen1(bd + 0x1b)\n\t\tbigenHelper{e.x[:8], e.w}.writeUint64(v)\n\t}\n}\n\nfunc (e *cborEncDriver) EncodeInt(v int64) {\n\tif v < 0 {\n\t\te.encUint(uint64(-1-v), cborBaseNegInt)\n\t} else {\n\t\te.encUint(uint64(v), cborBaseUint)\n\t}\n}\n\nfunc (e *cborEncDriver) EncodeUint(v uint64) {\n\te.encUint(v, cborBaseUint)\n}\n\nfunc (e *cborEncDriver) encLen(bd byte, length int) {\n\te.encUint(uint64(length), bd)\n}\n\nfunc (e *cborEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Encoder) {\n\te.encUint(uint64(xtag), cborBaseTag)\n\tif v := ext.ConvertExt(rv); v == nil {\n\t\te.EncodeNil()\n\t} else {\n\t\ten.encode(v)\n\t}\n}\n\nfunc (e *cborEncDriver) EncodeRawExt(re *RawExt, en *Encoder) {\n\te.encUint(uint64(re.Tag), cborBaseTag)\n\tif re.Data != nil {\n\t\ten.encode(re.Data)\n\t} else if re.Value == nil {\n\t\te.EncodeNil()\n\t} else {\n\t\ten.encode(re.Value)\n\t}\n}\n\nfunc (e *cborEncDriver) EncodeArrayStart(length int) {\n\te.encLen(cborBaseArray, length)\n}\n\nfunc (e *cborEncDriver) EncodeMapStart(length int) {\n\te.encLen(cborBaseMap, length)\n}\n\nfunc (e *cborEncDriver) EncodeString(c charEncoding, v string) {\n\te.encLen(cborBaseString, len(v))\n\te.w.writestr(v)\n}\n\nfunc (e *cborEncDriver) EncodeSymbol(v string) {\n\te.EncodeString(c_UTF8, v)\n}\n\nfunc (e *cborEncDriver) EncodeStringBytes(c charEncoding, v []byte) {\n\tif c == c_RAW {\n\t\te.encLen(cborBaseBytes, len(v))\n\t} else {\n\t\te.encLen(cborBaseString, len(v))\n\t}\n\te.w.writeb(v)\n}\n\n// ----------------------\n\ntype cborDecDriver struct {\n\td      *Decoder\n\th      *CborHandle\n\tr      decReader\n\tb      [scratchByteArrayLen]byte\n\tbr     bool // bytes reader\n\tbdRead bool\n\tbd     byte\n\tnoBuiltInTypes\n\tdecNoSeparator\n}\n\nfunc (d *cborDecDriver) readNextBd() {\n\td.bd = d.r.readn1()\n\td.bdRead = true\n}\n\nfunc (d *cborDecDriver) uncacheRead() {\n\tif d.bdRead {\n\t\td.r.unreadn1()\n\t\td.bdRead = false\n\t}\n}\n\nfunc (d *cborDecDriver) ContainerType() (vt valueType) {\n\tif d.bd == cborBdNil {\n\t\treturn valueTypeNil\n\t} else if d.bd == cborBdIndefiniteBytes || (d.bd >= cborBaseBytes && d.bd < cborBaseString) {\n\t\treturn valueTypeBytes\n\t} else if d.bd == cborBdIndefiniteString || (d.bd >= cborBaseString && d.bd < cborBaseArray) {\n\t\treturn valueTypeString\n\t} else if d.bd == cborBdIndefiniteArray || (d.bd >= cborBaseArray && d.bd < cborBaseMap) {\n\t\treturn valueTypeArray\n\t} else if d.bd == cborBdIndefiniteMap || (d.bd >= cborBaseMap && d.bd < cborBaseTag) {\n\t\treturn valueTypeMap\n\t} else {\n\t\t// d.d.errorf(\"isContainerType: unsupported parameter: %v\", vt)\n\t}\n\treturn valueTypeUnset\n}\n\nfunc (d *cborDecDriver) TryDecodeAsNil() bool {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\t// treat Nil and Undefined as nil values\n\tif d.bd == cborBdNil || d.bd == cborBdUndefined {\n\t\td.bdRead = false\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *cborDecDriver) CheckBreak() bool {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == cborBdBreak {\n\t\td.bdRead = false\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *cborDecDriver) decUint() (ui uint64) {\n\tv := d.bd & 0x1f\n\tif v <= 0x17 {\n\t\tui = uint64(v)\n\t} else {\n\t\tif v == 0x18 {\n\t\t\tui = uint64(d.r.readn1())\n\t\t} else if v == 0x19 {\n\t\t\tui = uint64(bigen.Uint16(d.r.readx(2)))\n\t\t} else if v == 0x1a {\n\t\t\tui = uint64(bigen.Uint32(d.r.readx(4)))\n\t\t} else if v == 0x1b {\n\t\t\tui = uint64(bigen.Uint64(d.r.readx(8)))\n\t\t} else {\n\t\t\td.d.errorf(\"decUint: Invalid descriptor: %v\", d.bd)\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\nfunc (d *cborDecDriver) decCheckInteger() (neg bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tmajor := d.bd >> 5\n\tif major == cborMajorUint {\n\t} else if major == cborMajorNegInt {\n\t\tneg = true\n\t} else {\n\t\td.d.errorf(\"invalid major: %v (bd: %v)\", major, d.bd)\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *cborDecDriver) DecodeInt(bitsize uint8) (i int64) {\n\tneg := d.decCheckInteger()\n\tui := d.decUint()\n\t// check if this number can be converted to an int without overflow\n\tvar overflow bool\n\tif neg {\n\t\tif i, overflow = chkOvf.SignedInt(ui + 1); overflow {\n\t\t\td.d.errorf(\"cbor: overflow converting %v to signed integer\", ui+1)\n\t\t\treturn\n\t\t}\n\t\ti = -i\n\t} else {\n\t\tif i, overflow = chkOvf.SignedInt(ui); overflow {\n\t\t\td.d.errorf(\"cbor: overflow converting %v to signed integer\", ui)\n\t\t\treturn\n\t\t}\n\t}\n\tif chkOvf.Int(i, bitsize) {\n\t\td.d.errorf(\"cbor: overflow integer: %v\", i)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *cborDecDriver) DecodeUint(bitsize uint8) (ui uint64) {\n\tif d.decCheckInteger() {\n\t\td.d.errorf(\"Assigning negative signed value to unsigned type\")\n\t\treturn\n\t}\n\tui = d.decUint()\n\tif chkOvf.Uint(ui, bitsize) {\n\t\td.d.errorf(\"cbor: overflow integer: %v\", ui)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *cborDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif bd := d.bd; bd == cborBdFloat16 {\n\t\tf = float64(math.Float32frombits(halfFloatToFloatBits(bigen.Uint16(d.r.readx(2)))))\n\t} else if bd == cborBdFloat32 {\n\t\tf = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4))))\n\t} else if bd == cborBdFloat64 {\n\t\tf = math.Float64frombits(bigen.Uint64(d.r.readx(8)))\n\t} else if bd >= cborBaseUint && bd < cborBaseBytes {\n\t\tf = float64(d.DecodeInt(64))\n\t} else {\n\t\td.d.errorf(\"Float only valid from float16/32/64: Invalid descriptor: %v\", bd)\n\t\treturn\n\t}\n\tif chkOverflow32 && chkOvf.Float32(f) {\n\t\td.d.errorf(\"cbor: float32 overflow: %v\", f)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// bool can be decoded from bool only (single byte).\nfunc (d *cborDecDriver) DecodeBool() (b bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif bd := d.bd; bd == cborBdTrue {\n\t\tb = true\n\t} else if bd == cborBdFalse {\n\t} else {\n\t\td.d.errorf(\"Invalid single-byte value for bool: %s: %x\", msgBadDesc, d.bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *cborDecDriver) ReadMapStart() (length int) {\n\td.bdRead = false\n\tif d.bd == cborBdIndefiniteMap {\n\t\treturn -1\n\t}\n\treturn d.decLen()\n}\n\nfunc (d *cborDecDriver) ReadArrayStart() (length int) {\n\td.bdRead = false\n\tif d.bd == cborBdIndefiniteArray {\n\t\treturn -1\n\t}\n\treturn d.decLen()\n}\n\nfunc (d *cborDecDriver) decLen() int {\n\treturn int(d.decUint())\n}\n\nfunc (d *cborDecDriver) decAppendIndefiniteBytes(bs []byte) []byte {\n\td.bdRead = false\n\tfor {\n\t\tif d.CheckBreak() {\n\t\t\tbreak\n\t\t}\n\t\tif major := d.bd >> 5; major != cborMajorBytes && major != cborMajorText {\n\t\t\td.d.errorf(\"cbor: expect bytes or string major type in indefinite string/bytes; got: %v, byte: %v\", major, d.bd)\n\t\t\treturn nil\n\t\t}\n\t\tn := d.decLen()\n\t\toldLen := len(bs)\n\t\tnewLen := oldLen + n\n\t\tif newLen > cap(bs) {\n\t\t\tbs2 := make([]byte, newLen, 2*cap(bs)+n)\n\t\t\tcopy(bs2, bs)\n\t\t\tbs = bs2\n\t\t} else {\n\t\t\tbs = bs[:newLen]\n\t\t}\n\t\td.r.readb(bs[oldLen:newLen])\n\t\t// bs = append(bs, d.r.readn()...)\n\t\td.bdRead = false\n\t}\n\td.bdRead = false\n\treturn bs\n}\n\nfunc (d *cborDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == cborBdNil || d.bd == cborBdUndefined {\n\t\td.bdRead = false\n\t\treturn nil\n\t}\n\tif d.bd == cborBdIndefiniteBytes || d.bd == cborBdIndefiniteString {\n\t\tif bs == nil {\n\t\t\treturn d.decAppendIndefiniteBytes(nil)\n\t\t}\n\t\treturn d.decAppendIndefiniteBytes(bs[:0])\n\t}\n\tclen := d.decLen()\n\td.bdRead = false\n\tif zerocopy {\n\t\tif d.br {\n\t\t\treturn d.r.readx(clen)\n\t\t} else if len(bs) == 0 {\n\t\t\tbs = d.b[:]\n\t\t}\n\t}\n\treturn decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)\n}\n\nfunc (d *cborDecDriver) DecodeString() (s string) {\n\treturn string(d.DecodeBytes(d.b[:], true, true))\n}\n\nfunc (d *cborDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tu := d.decUint()\n\td.bdRead = false\n\trealxtag = u\n\tif ext == nil {\n\t\tre := rv.(*RawExt)\n\t\tre.Tag = realxtag\n\t\td.d.decode(&re.Value)\n\t} else if xtag != realxtag {\n\t\td.d.errorf(\"Wrong extension tag. Got %b. Expecting: %v\", realxtag, xtag)\n\t\treturn\n\t} else {\n\t\tvar v interface{}\n\t\td.d.decode(&v)\n\t\text.UpdateExt(rv, v)\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *cborDecDriver) DecodeNaked() {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\n\tn := &d.d.n\n\tvar decodeFurther bool\n\n\tswitch d.bd {\n\tcase cborBdNil:\n\t\tn.v = valueTypeNil\n\tcase cborBdFalse:\n\t\tn.v = valueTypeBool\n\t\tn.b = false\n\tcase cborBdTrue:\n\t\tn.v = valueTypeBool\n\t\tn.b = true\n\tcase cborBdFloat16, cborBdFloat32:\n\t\tn.v = valueTypeFloat\n\t\tn.f = d.DecodeFloat(true)\n\tcase cborBdFloat64:\n\t\tn.v = valueTypeFloat\n\t\tn.f = d.DecodeFloat(false)\n\tcase cborBdIndefiniteBytes:\n\t\tn.v = valueTypeBytes\n\t\tn.l = d.DecodeBytes(nil, false, false)\n\tcase cborBdIndefiniteString:\n\t\tn.v = valueTypeString\n\t\tn.s = d.DecodeString()\n\tcase cborBdIndefiniteArray:\n\t\tn.v = valueTypeArray\n\t\tdecodeFurther = true\n\tcase cborBdIndefiniteMap:\n\t\tn.v = valueTypeMap\n\t\tdecodeFurther = true\n\tdefault:\n\t\tswitch {\n\t\tcase d.bd >= cborBaseUint && d.bd < cborBaseNegInt:\n\t\t\tif d.h.SignedInteger {\n\t\t\t\tn.v = valueTypeInt\n\t\t\t\tn.i = d.DecodeInt(64)\n\t\t\t} else {\n\t\t\t\tn.v = valueTypeUint\n\t\t\t\tn.u = d.DecodeUint(64)\n\t\t\t}\n\t\tcase d.bd >= cborBaseNegInt && d.bd < cborBaseBytes:\n\t\t\tn.v = valueTypeInt\n\t\t\tn.i = d.DecodeInt(64)\n\t\tcase d.bd >= cborBaseBytes && d.bd < cborBaseString:\n\t\t\tn.v = valueTypeBytes\n\t\t\tn.l = d.DecodeBytes(nil, false, false)\n\t\tcase d.bd >= cborBaseString && d.bd < cborBaseArray:\n\t\t\tn.v = valueTypeString\n\t\t\tn.s = d.DecodeString()\n\t\tcase d.bd >= cborBaseArray && d.bd < cborBaseMap:\n\t\t\tn.v = valueTypeArray\n\t\t\tdecodeFurther = true\n\t\tcase d.bd >= cborBaseMap && d.bd < cborBaseTag:\n\t\t\tn.v = valueTypeMap\n\t\t\tdecodeFurther = true\n\t\tcase d.bd >= cborBaseTag && d.bd < cborBaseSimple:\n\t\t\tn.v = valueTypeExt\n\t\t\tn.u = d.decUint()\n\t\t\tn.l = nil\n\t\t\t// d.bdRead = false\n\t\t\t// d.d.decode(&re.Value) // handled by decode itself.\n\t\t\t// decodeFurther = true\n\t\tdefault:\n\t\t\td.d.errorf(\"decodeNaked: Unrecognized d.bd: 0x%x\", d.bd)\n\t\t\treturn\n\t\t}\n\t}\n\n\tif !decodeFurther {\n\t\td.bdRead = false\n\t}\n\treturn\n}\n\n// -------------------------\n\n// CborHandle is a Handle for the CBOR encoding format,\n// defined at http://tools.ietf.org/html/rfc7049 and documented further at http://cbor.io .\n//\n// CBOR is comprehensively supported, including support for:\n//   - indefinite-length arrays/maps/bytes/strings\n//   - (extension) tags in range 0..0xffff (0 .. 65535)\n//   - half, single and double-precision floats\n//   - all numbers (1, 2, 4 and 8-byte signed and unsigned integers)\n//   - nil, true, false, ...\n//   - arrays and maps, bytes and text strings\n//\n// None of the optional extensions (with tags) defined in the spec are supported out-of-the-box.\n// Users can implement them as needed (using SetExt), including spec-documented ones:\n//   - timestamp, BigNum, BigFloat, Decimals, Encoded Text (e.g. URL, regexp, base64, MIME Message), etc.\n//\n// To encode with indefinite lengths (streaming), users will use\n// (Must)Encode methods of *Encoder, along with writing CborStreamXXX constants.\n//\n// For example, to encode \"one-byte\" as an indefinite length string:\n//     var buf bytes.Buffer\n//     e := NewEncoder(&buf, new(CborHandle))\n//     buf.WriteByte(CborStreamString)\n//     e.MustEncode(\"one-\")\n//     e.MustEncode(\"byte\")\n//     buf.WriteByte(CborStreamBreak)\n//     encodedBytes := buf.Bytes()\n//     var vv interface{}\n//     NewDecoderBytes(buf.Bytes(), new(CborHandle)).MustDecode(&vv)\n//     // Now, vv contains the same string \"one-byte\"\n//\ntype CborHandle struct {\n\tbinaryEncodingType\n\tBasicHandle\n}\n\nfunc (h *CborHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {\n\treturn h.SetExt(rt, tag, &setExtWrapper{i: ext})\n}\n\nfunc (h *CborHandle) newEncDriver(e *Encoder) encDriver {\n\treturn &cborEncDriver{e: e, w: e.w, h: h}\n}\n\nfunc (h *CborHandle) newDecDriver(d *Decoder) decDriver {\n\treturn &cborDecDriver{d: d, h: h, r: d.r, br: d.bytes}\n}\n\nfunc (e *cborEncDriver) reset() {\n\te.w = e.e.w\n}\n\nfunc (d *cborDecDriver) reset() {\n\td.r, d.br = d.d.r, d.d.bytes\n\td.bd, d.bdRead = 0, false\n}\n\nvar _ decDriver = (*cborDecDriver)(nil)\nvar _ encDriver = (*cborEncDriver)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/codecgen/gen.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// codecgen generates codec.Selfer implementations for a set of types.\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/build\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"math/rand\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"text/template\"\n\t\"time\"\n)\n\nconst genCodecPkg = \"codec1978\" // keep this in sync with codec.genCodecPkg\n\nconst genFrunMainTmpl = `//+build ignore\n\npackage main\n{{ if .Types }}import \"{{ .ImportPath }}\"{{ end }}\nfunc main() {\n\t{{ $.PackageName }}.CodecGenTempWrite{{ .RandString }}()\n}\n`\n\n// const genFrunPkgTmpl = `//+build codecgen\nconst genFrunPkgTmpl = `\npackage {{ $.PackageName }}\n\nimport (\n\t{{ if not .CodecPkgFiles }}{{ .CodecPkgName }} \"{{ .CodecImportPath }}\"{{ end }}\n\t\"os\"\n\t\"reflect\"\n\t\"bytes\"\n\t\"strings\"\n\t\"go/format\"\n)\n\nfunc CodecGenTempWrite{{ .RandString }}() {\n\tfout, err := os.Create(\"{{ .OutFile }}\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer fout.Close()\n\tvar out bytes.Buffer\n\t\n\tvar typs []reflect.Type \n{{ range $index, $element := .Types }}\n\tvar t{{ $index }} {{ . }}\n\ttyps = append(typs, reflect.TypeOf(t{{ $index }}))\n{{ end }}\n\t{{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}Gen(&out, \"{{ .BuildTag }}\", \"{{ .PackageName }}\", \"{{ .RandString }}\", {{ .UseUnsafe }}, {{ if not .CodecPkgFiles }}{{ .CodecPkgName }}.{{ end }}NewTypeInfos(strings.Split(\"{{ .StructTags }}\", \",\")), typs...)\n\tbout, err := format.Source(out.Bytes())\n\tif err != nil {\n\t\tfout.Write(out.Bytes())\n\t\tpanic(err)\n\t}\n\tfout.Write(bout)\n}\n\n`\n\n// Generate is given a list of *.go files to parse, and an output file (fout).\n//\n// It finds all types T in the files, and it creates 2 tmp files (frun).\n//   - main package file passed to 'go run'\n//   - package level file which calls *genRunner.Selfer to write Selfer impls for each T.\n// We use a package level file so that it can reference unexported types in the package being worked on.\n// Tool then executes: \"go run __frun__\" which creates fout.\n// fout contains Codec(En|De)codeSelf implementations for every type T.\n//\nfunc Generate(outfile, buildTag, codecPkgPath string, uid int64, useUnsafe bool, goRunTag string,\n\tst string, regexName *regexp.Regexp, notRegexName *regexp.Regexp, deleteTempFile bool, infiles ...string) (err error) {\n\t// For each file, grab AST, find each type, and write a call to it.\n\tif len(infiles) == 0 {\n\t\treturn\n\t}\n\tif outfile == \"\" || codecPkgPath == \"\" {\n\t\terr = errors.New(\"outfile and codec package path cannot be blank\")\n\t\treturn\n\t}\n\tif uid < 0 {\n\t\tuid = -uid\n\t}\n\tif uid == 0 {\n\t\trr := rand.New(rand.NewSource(time.Now().UnixNano()))\n\t\tuid = 101 + rr.Int63n(9777)\n\t}\n\t// We have to parse dir for package, before opening the temp file for writing (else ImportDir fails).\n\t// Also, ImportDir(...) must take an absolute path.\n\tlastdir := filepath.Dir(outfile)\n\tabsdir, err := filepath.Abs(lastdir)\n\tif err != nil {\n\t\treturn\n\t}\n\tpkg, err := build.Default.ImportDir(absdir, build.AllowBinary)\n\tif err != nil {\n\t\treturn\n\t}\n\ttype tmplT struct {\n\t\tCodecPkgName    string\n\t\tCodecImportPath string\n\t\tImportPath      string\n\t\tOutFile         string\n\t\tPackageName     string\n\t\tRandString      string\n\t\tBuildTag        string\n\t\tStructTags      string\n\t\tTypes           []string\n\t\tCodecPkgFiles   bool\n\t\tUseUnsafe       bool\n\t}\n\ttv := tmplT{\n\t\tCodecPkgName:    genCodecPkg,\n\t\tOutFile:         outfile,\n\t\tCodecImportPath: codecPkgPath,\n\t\tBuildTag:        buildTag,\n\t\tUseUnsafe:       useUnsafe,\n\t\tRandString:      strconv.FormatInt(uid, 10),\n\t\tStructTags:      st,\n\t}\n\ttv.ImportPath = pkg.ImportPath\n\tif tv.ImportPath == tv.CodecImportPath {\n\t\ttv.CodecPkgFiles = true\n\t\ttv.CodecPkgName = \"codec\"\n\t} else {\n\t\t// HACK: always handle vendoring. It should be typically on in go 1.6, 1.7\n\t\ts := tv.ImportPath\n\t\tconst vendorStart = \"vendor/\"\n\t\tconst vendorInline = \"/vendor/\"\n\t\tif i := strings.LastIndex(s, vendorInline); i >= 0 {\n\t\t\ttv.ImportPath = s[i+len(vendorInline):]\n\t\t} else if strings.HasPrefix(s, vendorStart) {\n\t\t\ttv.ImportPath = s[len(vendorStart):]\n\t\t}\n\t}\n\tastfiles := make([]*ast.File, len(infiles))\n\tfor i, infile := range infiles {\n\t\tif filepath.Dir(infile) != lastdir {\n\t\t\terr = errors.New(\"in files must all be in same directory as outfile\")\n\t\t\treturn\n\t\t}\n\t\tfset := token.NewFileSet()\n\t\tastfiles[i], err = parser.ParseFile(fset, infile, nil, 0)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif i == 0 {\n\t\t\ttv.PackageName = astfiles[i].Name.Name\n\t\t\tif tv.PackageName == \"main\" {\n\t\t\t\t// codecgen cannot be run on types in the 'main' package.\n\t\t\t\t// A temporary 'main' package must be created, and should reference the fully built\n\t\t\t\t// package containing the types.\n\t\t\t\t// Also, the temporary main package will conflict with the main package which already has a main method.\n\t\t\t\terr = errors.New(\"codecgen cannot be run on types in the 'main' package\")\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t// keep track of types with selfer methods\n\t// selferMethods := []string{\"CodecEncodeSelf\", \"CodecDecodeSelf\"}\n\tselferEncTyps := make(map[string]bool)\n\tselferDecTyps := make(map[string]bool)\n\tfor _, f := range astfiles {\n\t\tfor _, d := range f.Decls {\n\t\t\t// if fd, ok := d.(*ast.FuncDecl); ok && fd.Recv != nil && fd.Recv.NumFields() == 1 {\n\t\t\tif fd, ok := d.(*ast.FuncDecl); ok && fd.Recv != nil && len(fd.Recv.List) == 1 {\n\t\t\t\trecvType := fd.Recv.List[0].Type\n\t\t\t\tif ptr, ok := recvType.(*ast.StarExpr); ok {\n\t\t\t\t\trecvType = ptr.X\n\t\t\t\t}\n\t\t\t\tif id, ok := recvType.(*ast.Ident); ok {\n\t\t\t\t\tswitch fd.Name.Name {\n\t\t\t\t\tcase \"CodecEncodeSelf\":\n\t\t\t\t\t\tselferEncTyps[id.Name] = true\n\t\t\t\t\tcase \"CodecDecodeSelf\":\n\t\t\t\t\t\tselferDecTyps[id.Name] = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// now find types\n\tfor _, f := range astfiles {\n\t\tfor _, d := range f.Decls {\n\t\t\tif gd, ok := d.(*ast.GenDecl); ok {\n\t\t\t\tfor _, dd := range gd.Specs {\n\t\t\t\t\tif td, ok := dd.(*ast.TypeSpec); ok {\n\t\t\t\t\t\t// if len(td.Name.Name) == 0 || td.Name.Name[0] > 'Z' || td.Name.Name[0] < 'A' {\n\t\t\t\t\t\tif len(td.Name.Name) == 0 {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// only generate for:\n\t\t\t\t\t\t//   struct: StructType\n\t\t\t\t\t\t//   primitives (numbers, bool, string): Ident\n\t\t\t\t\t\t//   map: MapType\n\t\t\t\t\t\t//   slice, array: ArrayType\n\t\t\t\t\t\t//   chan: ChanType\n\t\t\t\t\t\t// do not generate:\n\t\t\t\t\t\t//   FuncType, InterfaceType, StarExpr (ptr), etc\n\t\t\t\t\t\tswitch td.Type.(type) {\n\t\t\t\t\t\tcase *ast.StructType, *ast.Ident, *ast.MapType, *ast.ArrayType, *ast.ChanType:\n\t\t\t\t\t\t\t// only add to tv.Types iff\n\t\t\t\t\t\t\t//   - it matches per the -r parameter\n\t\t\t\t\t\t\t//   - it doesn't match per the -nr parameter\n\t\t\t\t\t\t\t//   - it doesn't have any of the Selfer methods in the file\n\t\t\t\t\t\t\tif regexName.FindStringIndex(td.Name.Name) != nil &&\n\t\t\t\t\t\t\t\tnotRegexName.FindStringIndex(td.Name.Name) == nil &&\n\t\t\t\t\t\t\t\t!selferEncTyps[td.Name.Name] &&\n\t\t\t\t\t\t\t\t!selferDecTyps[td.Name.Name] {\n\t\t\t\t\t\t\t\ttv.Types = append(tv.Types, td.Name.Name)\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}\n\t}\n\n\tif len(tv.Types) == 0 {\n\t\treturn\n\t}\n\n\t// we cannot use ioutil.TempFile, because we cannot guarantee the file suffix (.go).\n\t// Also, we cannot create file in temp directory,\n\t// because go run will not work (as it needs to see the types here).\n\t// Consequently, create the temp file in the current directory, and remove when done.\n\n\t// frun, err = ioutil.TempFile(\"\", \"codecgen-\")\n\t// frunName := filepath.Join(os.TempDir(), \"codecgen-\"+strconv.FormatInt(time.Now().UnixNano(), 10)+\".go\")\n\n\tfrunMainName := \"codecgen-main-\" + tv.RandString + \".generated.go\"\n\tfrunPkgName := \"codecgen-pkg-\" + tv.RandString + \".generated.go\"\n\tif deleteTempFile {\n\t\tdefer os.Remove(frunMainName)\n\t\tdefer os.Remove(frunPkgName)\n\t}\n\t// var frunMain, frunPkg *os.File\n\tif _, err = gen1(frunMainName, genFrunMainTmpl, &tv); err != nil {\n\t\treturn\n\t}\n\tif _, err = gen1(frunPkgName, genFrunPkgTmpl, &tv); err != nil {\n\t\treturn\n\t}\n\n\t// remove outfile, so \"go run ...\" will not think that types in outfile already exist.\n\tos.Remove(outfile)\n\n\t// execute go run frun\n\tcmd := exec.Command(\"go\", \"run\", \"-tags=\"+goRunTag, frunMainName) //, frunPkg.Name())\n\tvar buf bytes.Buffer\n\tcmd.Stdout = &buf\n\tcmd.Stderr = &buf\n\tif err = cmd.Run(); err != nil {\n\t\terr = fmt.Errorf(\"error running 'go run %s': %v, console: %s\",\n\t\t\tfrunMainName, err, buf.Bytes())\n\t\treturn\n\t}\n\tos.Stdout.Write(buf.Bytes())\n\treturn\n}\n\nfunc gen1(frunName, tmplStr string, tv interface{}) (frun *os.File, err error) {\n\tos.Remove(frunName)\n\tif frun, err = os.Create(frunName); err != nil {\n\t\treturn\n\t}\n\tdefer frun.Close()\n\n\tt := template.New(\"\")\n\tif t, err = t.Parse(tmplStr); err != nil {\n\t\treturn\n\t}\n\tbw := bufio.NewWriter(frun)\n\tif err = t.Execute(bw, tv); err != nil {\n\t\treturn\n\t}\n\tif err = bw.Flush(); err != nil {\n\t\treturn\n\t}\n\treturn\n}\n\nfunc main() {\n\to := flag.String(\"o\", \"\", \"out file\")\n\tc := flag.String(\"c\", genCodecPath, \"codec path\")\n\tt := flag.String(\"t\", \"\", \"build tag to put in file\")\n\tr := flag.String(\"r\", \".*\", \"regex for type name to match\")\n\tnr := flag.String(\"nr\", \"^$\", \"regex for type name to exclude\")\n\trt := flag.String(\"rt\", \"\", \"tags for go run\")\n\tst := flag.String(\"st\", \"codec,json\", \"struct tag keys to introspect\")\n\tx := flag.Bool(\"x\", false, \"keep temp file\")\n\tu := flag.Bool(\"u\", false, \"Use unsafe, e.g. to avoid unnecessary allocation on []byte->string\")\n\td := flag.Int64(\"d\", 0, \"random identifier for use in generated code\")\n\tflag.Parse()\n\tif err := Generate(*o, *t, *c, *d, *u, *rt, *st,\n\t\tregexp.MustCompile(*r), regexp.MustCompile(*nr), !*x, flag.Args()...); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"codecgen error: %v\\n\", err)\n\t\tos.Exit(1)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/codecgen/z.go",
    "content": "package main\n\nconst genCodecPath = \"github.com/ugorji/go/codec\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/decode.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Some tagging information for error messages.\nconst (\n\tmsgBadDesc            = \"Unrecognized descriptor byte\"\n\tmsgDecCannotExpandArr = \"cannot expand go array from %v to stream length: %v\"\n)\n\nvar (\n\tonlyMapOrArrayCanDecodeIntoStructErr = errors.New(\"only encoded map or array can be decoded into a struct\")\n\tcannotDecodeIntoNilErr               = errors.New(\"cannot decode into nil\")\n)\n\n// decReader abstracts the reading source, allowing implementations that can\n// read from an io.Reader or directly off a byte slice with zero-copying.\ntype decReader interface {\n\tunreadn1()\n\n\t// readx will use the implementation scratch buffer if possible i.e. n < len(scratchbuf), OR\n\t// just return a view of the []byte being decoded from.\n\t// Ensure you call detachZeroCopyBytes later if this needs to be sent outside codec control.\n\treadx(n int) []byte\n\treadb([]byte)\n\treadn1() uint8\n\treadn1eof() (v uint8, eof bool)\n\tnumread() int // number of bytes read\n\ttrack()\n\tstopTrack() []byte\n}\n\ntype decReaderByteScanner interface {\n\tio.Reader\n\tio.ByteScanner\n}\n\ntype decDriver interface {\n\t// this will check if the next token is a break.\n\tCheckBreak() bool\n\tTryDecodeAsNil() bool\n\t// vt is one of: Bytes, String, Nil, Slice or Map. Return unSet if not known.\n\tContainerType() (vt valueType)\n\tIsBuiltinType(rt uintptr) bool\n\tDecodeBuiltin(rt uintptr, v interface{})\n\n\t// DecodeNaked will decode primitives (number, bool, string, []byte) and RawExt.\n\t// For maps and arrays, it will not do the decoding in-band, but will signal\n\t// the decoder, so that is done later, by setting the decNaked.valueType field.\n\t//\n\t// Note: Numbers are decoded as int64, uint64, float64 only (no smaller sized number types).\n\t// for extensions, DecodeNaked must read the tag and the []byte if it exists.\n\t// if the []byte is not read, then kInterfaceNaked will treat it as a Handle\n\t// that stores the subsequent value in-band, and complete reading the RawExt.\n\t//\n\t// extensions should also use readx to decode them, for efficiency.\n\t// kInterface will extract the detached byte slice if it has to pass it outside its realm.\n\tDecodeNaked()\n\tDecodeInt(bitsize uint8) (i int64)\n\tDecodeUint(bitsize uint8) (ui uint64)\n\tDecodeFloat(chkOverflow32 bool) (f float64)\n\tDecodeBool() (b bool)\n\t// DecodeString can also decode symbols.\n\t// It looks redundant as DecodeBytes is available.\n\t// However, some codecs (e.g. binc) support symbols and can\n\t// return a pre-stored string value, meaning that it can bypass\n\t// the cost of []byte->string conversion.\n\tDecodeString() (s string)\n\n\t// DecodeBytes may be called directly, without going through reflection.\n\t// Consequently, it must be designed to handle possible nil.\n\tDecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte)\n\n\t// decodeExt will decode into a *RawExt or into an extension.\n\tDecodeExt(v interface{}, xtag uint64, ext Ext) (realxtag uint64)\n\t// decodeExt(verifyTag bool, tag byte) (xtag byte, xbs []byte)\n\tReadMapStart() int\n\tReadArrayStart() int\n\n\treset()\n\tuncacheRead()\n}\n\ntype decNoSeparator struct {\n}\n\nfunc (_ decNoSeparator) ReadEnd() {}\n\n// func (_ decNoSeparator) uncacheRead() {}\n\ntype DecodeOptions struct {\n\t// MapType specifies type to use during schema-less decoding of a map in the stream.\n\t// If nil, we use map[interface{}]interface{}\n\tMapType reflect.Type\n\n\t// SliceType specifies type to use during schema-less decoding of an array in the stream.\n\t// If nil, we use []interface{}\n\tSliceType reflect.Type\n\n\t// MaxInitLen defines the maxinum initial length that we \"make\" a collection (string, slice, map, chan).\n\t// If 0 or negative, we default to a sensible value based on the size of an element in the collection.\n\t//\n\t// For example, when decoding, a stream may say that it has 2^64 elements.\n\t// We should not auto-matically provision a slice of that length, to prevent Out-Of-Memory crash.\n\t// Instead, we provision up to MaxInitLen, fill that up, and start appending after that.\n\tMaxInitLen int\n\n\t// If ErrorIfNoField, return an error when decoding a map\n\t// from a codec stream into a struct, and no matching struct field is found.\n\tErrorIfNoField bool\n\n\t// If ErrorIfNoArrayExpand, return an error when decoding a slice/array that cannot be expanded.\n\t// For example, the stream contains an array of 8 items, but you are decoding into a [4]T array,\n\t// or you are decoding into a slice of length 4 which is non-addressable (and so cannot be set).\n\tErrorIfNoArrayExpand bool\n\n\t// If SignedInteger, use the int64 during schema-less decoding of unsigned values (not uint64).\n\tSignedInteger bool\n\n\t// MapValueReset controls how we decode into a map value.\n\t//\n\t// By default, we MAY retrieve the mapping for a key, and then decode into that.\n\t// However, especially with big maps, that retrieval may be expensive and unnecessary\n\t// if the stream already contains all that is necessary to recreate the value.\n\t//\n\t// If true, we will never retrieve the previous mapping,\n\t// but rather decode into a new value and set that in the map.\n\t//\n\t// If false, we will retrieve the previous mapping if necessary e.g.\n\t// the previous mapping is a pointer, or is a struct or array with pre-set state,\n\t// or is an interface.\n\tMapValueReset bool\n\n\t// InterfaceReset controls how we decode into an interface.\n\t//\n\t// By default, when we see a field that is an interface{...},\n\t// or a map with interface{...} value, we will attempt decoding into the\n\t// \"contained\" value.\n\t//\n\t// However, this prevents us from reading a string into an interface{}\n\t// that formerly contained a number.\n\t//\n\t// If true, we will decode into a new \"blank\" value, and set that in the interface.\n\t// If false, we will decode into whatever is contained in the interface.\n\tInterfaceReset bool\n\n\t// InternString controls interning of strings during decoding.\n\t//\n\t// Some handles, e.g. json, typically will read map keys as strings.\n\t// If the set of keys are finite, it may help reduce allocation to\n\t// look them up from a map (than to allocate them afresh).\n\t//\n\t// Note: Handles will be smart when using the intern functionality.\n\t// So everything will not be interned.\n\tInternString bool\n\n\t// PreferArrayOverSlice controls whether to decode to an array or a slice.\n\t//\n\t// This only impacts decoding into a nil interface{}.\n\t// Consequently, it has no effect on codecgen.\n\t//\n\t// *Note*: This only applies if using go1.5 and above,\n\t// as it requires reflect.ArrayOf support which was absent before go1.5.\n\tPreferArrayOverSlice bool\n}\n\n// ------------------------------------\n\n// ioDecByteScanner implements Read(), ReadByte(...), UnreadByte(...) methods\n// of io.Reader, io.ByteScanner.\ntype ioDecByteScanner struct {\n\tr  io.Reader\n\tl  byte    // last byte\n\tls byte    // last byte status. 0: init-canDoNothing, 1: canRead, 2: canUnread\n\tb  [1]byte // tiny buffer for reading single bytes\n}\n\nfunc (z *ioDecByteScanner) Read(p []byte) (n int, err error) {\n\tvar firstByte bool\n\tif z.ls == 1 {\n\t\tz.ls = 2\n\t\tp[0] = z.l\n\t\tif len(p) == 1 {\n\t\t\tn = 1\n\t\t\treturn\n\t\t}\n\t\tfirstByte = true\n\t\tp = p[1:]\n\t}\n\tn, err = z.r.Read(p)\n\tif n > 0 {\n\t\tif err == io.EOF && n == len(p) {\n\t\t\terr = nil // read was successful, so postpone EOF (till next time)\n\t\t}\n\t\tz.l = p[n-1]\n\t\tz.ls = 2\n\t}\n\tif firstByte {\n\t\tn++\n\t}\n\treturn\n}\n\nfunc (z *ioDecByteScanner) ReadByte() (c byte, err error) {\n\tn, err := z.Read(z.b[:])\n\tif n == 1 {\n\t\tc = z.b[0]\n\t\tif err == io.EOF {\n\t\t\terr = nil // read was successful, so postpone EOF (till next time)\n\t\t}\n\t}\n\treturn\n}\n\nfunc (z *ioDecByteScanner) UnreadByte() (err error) {\n\tx := z.ls\n\tif x == 0 {\n\t\terr = errors.New(\"cannot unread - nothing has been read\")\n\t} else if x == 1 {\n\t\terr = errors.New(\"cannot unread - last byte has not been read\")\n\t} else if x == 2 {\n\t\tz.ls = 1\n\t}\n\treturn\n}\n\n// ioDecReader is a decReader that reads off an io.Reader\ntype ioDecReader struct {\n\tbr decReaderByteScanner\n\t// temp byte array re-used internally for efficiency during read.\n\t// shares buffer with Decoder, so we keep size of struct within 8 words.\n\tx   *[scratchByteArrayLen]byte\n\tbs  ioDecByteScanner\n\tn   int    // num read\n\ttr  []byte // tracking bytes read\n\ttrb bool\n}\n\nfunc (z *ioDecReader) numread() int {\n\treturn z.n\n}\n\nfunc (z *ioDecReader) readx(n int) (bs []byte) {\n\tif n <= 0 {\n\t\treturn\n\t}\n\tif n < len(z.x) {\n\t\tbs = z.x[:n]\n\t} else {\n\t\tbs = make([]byte, n)\n\t}\n\tif _, err := io.ReadAtLeast(z.br, bs, n); err != nil {\n\t\tpanic(err)\n\t}\n\tz.n += len(bs)\n\tif z.trb {\n\t\tz.tr = append(z.tr, bs...)\n\t}\n\treturn\n}\n\nfunc (z *ioDecReader) readb(bs []byte) {\n\tif len(bs) == 0 {\n\t\treturn\n\t}\n\tn, err := io.ReadAtLeast(z.br, bs, len(bs))\n\tz.n += n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif z.trb {\n\t\tz.tr = append(z.tr, bs...)\n\t}\n}\n\nfunc (z *ioDecReader) readn1() (b uint8) {\n\tb, err := z.br.ReadByte()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tz.n++\n\tif z.trb {\n\t\tz.tr = append(z.tr, b)\n\t}\n\treturn b\n}\n\nfunc (z *ioDecReader) readn1eof() (b uint8, eof bool) {\n\tb, err := z.br.ReadByte()\n\tif err == nil {\n\t\tz.n++\n\t\tif z.trb {\n\t\t\tz.tr = append(z.tr, b)\n\t\t}\n\t} else if err == io.EOF {\n\t\teof = true\n\t} else {\n\t\tpanic(err)\n\t}\n\treturn\n}\n\nfunc (z *ioDecReader) unreadn1() {\n\terr := z.br.UnreadByte()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tz.n--\n\tif z.trb {\n\t\tif l := len(z.tr) - 1; l >= 0 {\n\t\t\tz.tr = z.tr[:l]\n\t\t}\n\t}\n}\n\nfunc (z *ioDecReader) track() {\n\tif z.tr != nil {\n\t\tz.tr = z.tr[:0]\n\t}\n\tz.trb = true\n}\n\nfunc (z *ioDecReader) stopTrack() (bs []byte) {\n\tz.trb = false\n\treturn z.tr\n}\n\n// ------------------------------------\n\nvar bytesDecReaderCannotUnreadErr = errors.New(\"cannot unread last byte read\")\n\n// bytesDecReader is a decReader that reads off a byte slice with zero copying\ntype bytesDecReader struct {\n\tb []byte // data\n\tc int    // cursor\n\ta int    // available\n\tt int    // track start\n}\n\nfunc (z *bytesDecReader) reset(in []byte) {\n\tz.b = in\n\tz.a = len(in)\n\tz.c = 0\n\tz.t = 0\n}\n\nfunc (z *bytesDecReader) numread() int {\n\treturn z.c\n}\n\nfunc (z *bytesDecReader) unreadn1() {\n\tif z.c == 0 || len(z.b) == 0 {\n\t\tpanic(bytesDecReaderCannotUnreadErr)\n\t}\n\tz.c--\n\tz.a++\n\treturn\n}\n\nfunc (z *bytesDecReader) readx(n int) (bs []byte) {\n\t// slicing from a non-constant start position is more expensive,\n\t// as more computation is required to decipher the pointer start position.\n\t// However, we do it only once, and it's better than reslicing both z.b and return value.\n\n\tif n <= 0 {\n\t} else if z.a == 0 {\n\t\tpanic(io.EOF)\n\t} else if n > z.a {\n\t\tpanic(io.ErrUnexpectedEOF)\n\t} else {\n\t\tc0 := z.c\n\t\tz.c = c0 + n\n\t\tz.a = z.a - n\n\t\tbs = z.b[c0:z.c]\n\t}\n\treturn\n}\n\nfunc (z *bytesDecReader) readn1() (v uint8) {\n\tif z.a == 0 {\n\t\tpanic(io.EOF)\n\t}\n\tv = z.b[z.c]\n\tz.c++\n\tz.a--\n\treturn\n}\n\nfunc (z *bytesDecReader) readn1eof() (v uint8, eof bool) {\n\tif z.a == 0 {\n\t\teof = true\n\t\treturn\n\t}\n\tv = z.b[z.c]\n\tz.c++\n\tz.a--\n\treturn\n}\n\nfunc (z *bytesDecReader) readb(bs []byte) {\n\tcopy(bs, z.readx(len(bs)))\n}\n\nfunc (z *bytesDecReader) track() {\n\tz.t = z.c\n}\n\nfunc (z *bytesDecReader) stopTrack() (bs []byte) {\n\treturn z.b[z.t:z.c]\n}\n\n// ------------------------------------\n\ntype decFnInfo struct {\n\td     *Decoder\n\tti    *typeInfo\n\txfFn  Ext\n\txfTag uint64\n\tseq   seqType\n}\n\n// ----------------------------------------\n\ntype decFn struct {\n\ti decFnInfo\n\tf func(*decFnInfo, reflect.Value)\n}\n\nfunc (f *decFnInfo) builtin(rv reflect.Value) {\n\tf.d.d.DecodeBuiltin(f.ti.rtid, rv.Addr().Interface())\n}\n\nfunc (f *decFnInfo) rawExt(rv reflect.Value) {\n\tf.d.d.DecodeExt(rv.Addr().Interface(), 0, nil)\n}\n\nfunc (f *decFnInfo) raw(rv reflect.Value) {\n\trv.SetBytes(f.d.raw())\n}\n\nfunc (f *decFnInfo) ext(rv reflect.Value) {\n\tf.d.d.DecodeExt(rv.Addr().Interface(), f.xfTag, f.xfFn)\n}\n\nfunc (f *decFnInfo) getValueForUnmarshalInterface(rv reflect.Value, indir int8) (v interface{}) {\n\tif indir == -1 {\n\t\tv = rv.Addr().Interface()\n\t} else if indir == 0 {\n\t\tv = rv.Interface()\n\t} else {\n\t\tfor j := int8(0); j < indir; j++ {\n\t\t\tif rv.IsNil() {\n\t\t\t\trv.Set(reflect.New(rv.Type().Elem()))\n\t\t\t}\n\t\t\trv = rv.Elem()\n\t\t}\n\t\tv = rv.Interface()\n\t}\n\treturn\n}\n\nfunc (f *decFnInfo) selferUnmarshal(rv reflect.Value) {\n\tf.getValueForUnmarshalInterface(rv, f.ti.csIndir).(Selfer).CodecDecodeSelf(f.d)\n}\n\nfunc (f *decFnInfo) binaryUnmarshal(rv reflect.Value) {\n\tbm := f.getValueForUnmarshalInterface(rv, f.ti.bunmIndir).(encoding.BinaryUnmarshaler)\n\txbs := f.d.d.DecodeBytes(nil, false, true)\n\tif fnerr := bm.UnmarshalBinary(xbs); fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\nfunc (f *decFnInfo) textUnmarshal(rv reflect.Value) {\n\ttm := f.getValueForUnmarshalInterface(rv, f.ti.tunmIndir).(encoding.TextUnmarshaler)\n\tfnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true))\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\nfunc (f *decFnInfo) jsonUnmarshal(rv reflect.Value) {\n\ttm := f.getValueForUnmarshalInterface(rv, f.ti.junmIndir).(jsonUnmarshaler)\n\t// bs := f.d.d.DecodeBytes(f.d.b[:], true, true)\n\t// grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself.\n\tfnerr := tm.UnmarshalJSON(f.d.nextValueBytes())\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\nfunc (f *decFnInfo) kErr(rv reflect.Value) {\n\tf.d.errorf(\"no decoding function defined for kind %v\", rv.Kind())\n}\n\nfunc (f *decFnInfo) kString(rv reflect.Value) {\n\trv.SetString(f.d.d.DecodeString())\n}\n\nfunc (f *decFnInfo) kBool(rv reflect.Value) {\n\trv.SetBool(f.d.d.DecodeBool())\n}\n\nfunc (f *decFnInfo) kInt(rv reflect.Value) {\n\trv.SetInt(f.d.d.DecodeInt(intBitsize))\n}\n\nfunc (f *decFnInfo) kInt64(rv reflect.Value) {\n\trv.SetInt(f.d.d.DecodeInt(64))\n}\n\nfunc (f *decFnInfo) kInt32(rv reflect.Value) {\n\trv.SetInt(f.d.d.DecodeInt(32))\n}\n\nfunc (f *decFnInfo) kInt8(rv reflect.Value) {\n\trv.SetInt(f.d.d.DecodeInt(8))\n}\n\nfunc (f *decFnInfo) kInt16(rv reflect.Value) {\n\trv.SetInt(f.d.d.DecodeInt(16))\n}\n\nfunc (f *decFnInfo) kFloat32(rv reflect.Value) {\n\trv.SetFloat(f.d.d.DecodeFloat(true))\n}\n\nfunc (f *decFnInfo) kFloat64(rv reflect.Value) {\n\trv.SetFloat(f.d.d.DecodeFloat(false))\n}\n\nfunc (f *decFnInfo) kUint8(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(8))\n}\n\nfunc (f *decFnInfo) kUint64(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(64))\n}\n\nfunc (f *decFnInfo) kUint(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(uintBitsize))\n}\n\nfunc (f *decFnInfo) kUintptr(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(uintBitsize))\n}\n\nfunc (f *decFnInfo) kUint32(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(32))\n}\n\nfunc (f *decFnInfo) kUint16(rv reflect.Value) {\n\trv.SetUint(f.d.d.DecodeUint(16))\n}\n\n// func (f *decFnInfo) kPtr(rv reflect.Value) {\n// \tdebugf(\">>>>>>> ??? decode kPtr called - shouldn't get called\")\n// \tif rv.IsNil() {\n// \t\trv.Set(reflect.New(rv.Type().Elem()))\n// \t}\n// \tf.d.decodeValue(rv.Elem())\n// }\n\n// var kIntfCtr uint64\n\nfunc (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) {\n\t// nil interface:\n\t// use some hieristics to decode it appropriately\n\t// based on the detected next value in the stream.\n\td := f.d\n\td.d.DecodeNaked()\n\tn := &d.n\n\tif n.v == valueTypeNil {\n\t\treturn\n\t}\n\t// We cannot decode non-nil stream value into nil interface with methods (e.g. io.Reader).\n\t// if num := f.ti.rt.NumMethod(); num > 0 {\n\tif f.ti.numMeth > 0 {\n\t\td.errorf(\"cannot decode non-nil codec value into nil %v (%v methods)\", f.ti.rt, f.ti.numMeth)\n\t\treturn\n\t}\n\t// var useRvn bool\n\tswitch n.v {\n\tcase valueTypeMap:\n\t\t// if d.h.MapType == nil || d.h.MapType == mapIntfIntfTyp {\n\t\t// } else if d.h.MapType == mapStrIntfTyp { // for json performance\n\t\t// }\n\t\tif d.mtid == 0 || d.mtid == mapIntfIntfTypId {\n\t\t\tl := len(n.ms)\n\t\t\tn.ms = append(n.ms, nil)\n\t\t\tvar v2 interface{} = &n.ms[l]\n\t\t\td.decode(v2)\n\t\t\trvn = reflect.ValueOf(v2).Elem()\n\t\t\tn.ms = n.ms[:l]\n\t\t} else if d.mtid == mapStrIntfTypId { // for json performance\n\t\t\tl := len(n.ns)\n\t\t\tn.ns = append(n.ns, nil)\n\t\t\tvar v2 interface{} = &n.ns[l]\n\t\t\td.decode(v2)\n\t\t\trvn = reflect.ValueOf(v2).Elem()\n\t\t\tn.ns = n.ns[:l]\n\t\t} else {\n\t\t\trvn = reflect.New(d.h.MapType).Elem()\n\t\t\td.decodeValue(rvn, nil)\n\t\t}\n\tcase valueTypeArray:\n\t\t// if d.h.SliceType == nil || d.h.SliceType == intfSliceTyp {\n\t\tif d.stid == 0 || d.stid == intfSliceTypId {\n\t\t\tl := len(n.ss)\n\t\t\tn.ss = append(n.ss, nil)\n\t\t\tvar v2 interface{} = &n.ss[l]\n\t\t\td.decode(v2)\n\t\t\tn.ss = n.ss[:l]\n\t\t\trvn = reflect.ValueOf(v2).Elem()\n\t\t\tif reflectArrayOfSupported && d.stid == 0 && d.h.PreferArrayOverSlice {\n\t\t\t\trvn = reflectArrayOf(rvn)\n\t\t\t}\n\t\t} else {\n\t\t\trvn = reflect.New(d.h.SliceType).Elem()\n\t\t\td.decodeValue(rvn, nil)\n\t\t}\n\tcase valueTypeExt:\n\t\tvar v interface{}\n\t\ttag, bytes := n.u, n.l // calling decode below might taint the values\n\t\tif bytes == nil {\n\t\t\tl := len(n.is)\n\t\t\tn.is = append(n.is, nil)\n\t\t\tv2 := &n.is[l]\n\t\t\td.decode(v2)\n\t\t\tv = *v2\n\t\t\tn.is = n.is[:l]\n\t\t}\n\t\tbfn := d.h.getExtForTag(tag)\n\t\tif bfn == nil {\n\t\t\tvar re RawExt\n\t\t\tre.Tag = tag\n\t\t\tre.Data = detachZeroCopyBytes(d.bytes, nil, bytes)\n\t\t\trvn = reflect.ValueOf(re)\n\t\t} else {\n\t\t\trvnA := reflect.New(bfn.rt)\n\t\t\trvn = rvnA.Elem()\n\t\t\tif bytes != nil {\n\t\t\t\tbfn.ext.ReadExt(rvnA.Interface(), bytes)\n\t\t\t} else {\n\t\t\t\tbfn.ext.UpdateExt(rvnA.Interface(), v)\n\t\t\t}\n\t\t}\n\tcase valueTypeNil:\n\t\t// no-op\n\tcase valueTypeInt:\n\t\trvn = reflect.ValueOf(&n.i).Elem()\n\tcase valueTypeUint:\n\t\trvn = reflect.ValueOf(&n.u).Elem()\n\tcase valueTypeFloat:\n\t\trvn = reflect.ValueOf(&n.f).Elem()\n\tcase valueTypeBool:\n\t\trvn = reflect.ValueOf(&n.b).Elem()\n\tcase valueTypeString, valueTypeSymbol:\n\t\trvn = reflect.ValueOf(&n.s).Elem()\n\tcase valueTypeBytes:\n\t\trvn = reflect.ValueOf(&n.l).Elem()\n\tcase valueTypeTimestamp:\n\t\trvn = reflect.ValueOf(&n.t).Elem()\n\tdefault:\n\t\tpanic(fmt.Errorf(\"kInterfaceNaked: unexpected valueType: %d\", n.v))\n\t}\n\treturn\n}\n\nfunc (f *decFnInfo) kInterface(rv reflect.Value) {\n\t// debugf(\"\\t===> kInterface\")\n\n\t// Note:\n\t// A consequence of how kInterface works, is that\n\t// if an interface already contains something, we try\n\t// to decode into what was there before.\n\t// We do not replace with a generic value (as got from decodeNaked).\n\n\tvar rvn reflect.Value\n\tif rv.IsNil() {\n\t\trvn = f.kInterfaceNaked()\n\t\tif rvn.IsValid() {\n\t\t\trv.Set(rvn)\n\t\t}\n\t} else if f.d.h.InterfaceReset {\n\t\trvn = f.kInterfaceNaked()\n\t\tif rvn.IsValid() {\n\t\t\trv.Set(rvn)\n\t\t} else {\n\t\t\t// reset to zero value based on current type in there.\n\t\t\trv.Set(reflect.Zero(rv.Elem().Type()))\n\t\t}\n\t} else {\n\t\trvn = rv.Elem()\n\t\t// Note: interface{} is settable, but underlying type may not be.\n\t\t// Consequently, we have to set the reflect.Value directly.\n\t\t// if underlying type is settable (e.g. ptr or interface),\n\t\t// we just decode into it.\n\t\t// Else we create a settable value, decode into it, and set on the interface.\n\t\tif rvn.CanSet() {\n\t\t\tf.d.decodeValue(rvn, nil)\n\t\t} else {\n\t\t\trvn2 := reflect.New(rvn.Type()).Elem()\n\t\t\trvn2.Set(rvn)\n\t\t\tf.d.decodeValue(rvn2, nil)\n\t\t\trv.Set(rvn2)\n\t\t}\n\t}\n}\n\nfunc (f *decFnInfo) kStruct(rv reflect.Value) {\n\tfti := f.ti\n\td := f.d\n\tdd := d.d\n\tcr := d.cr\n\tctyp := dd.ContainerType()\n\tif ctyp == valueTypeMap {\n\t\tcontainerLen := dd.ReadMapStart()\n\t\tif containerLen == 0 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\ttisfi := fti.sfi\n\t\thasLen := containerLen >= 0\n\t\tif hasLen {\n\t\t\tfor j := 0; j < containerLen; j++ {\n\t\t\t\t// rvkencname := dd.DecodeString()\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\trvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true))\n\t\t\t\t// rvksi := ti.getForEncName(rvkencname)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\tif k := fti.indexForEncName(rvkencname); k > -1 {\n\t\t\t\t\tsi := tisfi[k]\n\t\t\t\t\tif dd.TryDecodeAsNil() {\n\t\t\t\t\t\tsi.setToZeroValue(rv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\td.decodeValue(si.field(rv, true), nil)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\td.structFieldNotFound(-1, rvkencname)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\t\t// rvkencname := dd.DecodeString()\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\trvkencname := stringView(dd.DecodeBytes(f.d.b[:], true, true))\n\t\t\t\t// rvksi := ti.getForEncName(rvkencname)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\tif k := fti.indexForEncName(rvkencname); k > -1 {\n\t\t\t\t\tsi := tisfi[k]\n\t\t\t\t\tif dd.TryDecodeAsNil() {\n\t\t\t\t\t\tsi.setToZeroValue(rv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\td.decodeValue(si.field(rv, true), nil)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\td.structFieldNotFound(-1, rvkencname)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t}\n\t} else if ctyp == valueTypeArray {\n\t\tcontainerLen := dd.ReadArrayStart()\n\t\tif containerLen == 0 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerArrayEnd)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\t// Not much gain from doing it two ways for array.\n\t\t// Arrays are not used as much for structs.\n\t\thasLen := containerLen >= 0\n\t\tfor j, si := range fti.sfip {\n\t\t\tif hasLen {\n\t\t\t\tif j == containerLen {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if dd.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t\t}\n\t\t\tif dd.TryDecodeAsNil() {\n\t\t\t\tsi.setToZeroValue(rv)\n\t\t\t} else {\n\t\t\t\td.decodeValue(si.field(rv, true), nil)\n\t\t\t}\n\t\t}\n\t\tif containerLen > len(fti.sfip) {\n\t\t\t// read remaining values and throw away\n\t\t\tfor j := len(fti.sfip); j < containerLen; j++ {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t\t\t}\n\t\t\t\td.structFieldNotFound(j, \"\")\n\t\t\t}\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayEnd)\n\t\t}\n\t} else {\n\t\tf.d.error(onlyMapOrArrayCanDecodeIntoStructErr)\n\t\treturn\n\t}\n}\n\nfunc (f *decFnInfo) kSlice(rv reflect.Value) {\n\t// A slice can be set from a map or array in stream.\n\t// This way, the order can be kept (as order is lost with map).\n\tti := f.ti\n\td := f.d\n\tdd := d.d\n\trtelem0 := ti.rt.Elem()\n\tctyp := dd.ContainerType()\n\tif ctyp == valueTypeBytes || ctyp == valueTypeString {\n\t\t// you can only decode bytes or string in the stream into a slice or array of bytes\n\t\tif !(ti.rtid == uint8SliceTypId || rtelem0.Kind() == reflect.Uint8) {\n\t\t\tf.d.errorf(\"bytes or string in the stream must be decoded into a slice or array of bytes, not %v\", ti.rt)\n\t\t}\n\t\tif f.seq == seqTypeChan {\n\t\t\tbs2 := dd.DecodeBytes(nil, false, true)\n\t\t\tch := rv.Interface().(chan<- byte)\n\t\t\tfor _, b := range bs2 {\n\t\t\t\tch <- b\n\t\t\t}\n\t\t} else {\n\t\t\trvbs := rv.Bytes()\n\t\t\tbs2 := dd.DecodeBytes(rvbs, false, false)\n\t\t\tif rvbs == nil && bs2 != nil || rvbs != nil && bs2 == nil || len(bs2) != len(rvbs) {\n\t\t\t\tif rv.CanSet() {\n\t\t\t\t\trv.SetBytes(bs2)\n\t\t\t\t} else {\n\t\t\t\t\tcopy(rvbs, bs2)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\t// array := f.seq == seqTypeChan\n\n\tslh, containerLenS := d.decSliceHelperStart() // only expects valueType(Array|Map)\n\n\t// // an array can never return a nil slice. so no need to check f.array here.\n\tif containerLenS == 0 {\n\t\tif f.seq == seqTypeSlice {\n\t\t\tif rv.IsNil() {\n\t\t\t\trv.Set(reflect.MakeSlice(ti.rt, 0, 0))\n\t\t\t} else {\n\t\t\t\trv.SetLen(0)\n\t\t\t}\n\t\t} else if f.seq == seqTypeChan {\n\t\t\tif rv.IsNil() {\n\t\t\t\trv.Set(reflect.MakeChan(ti.rt, 0))\n\t\t\t}\n\t\t}\n\t\tslh.End()\n\t\treturn\n\t}\n\n\trtelem := rtelem0\n\tfor rtelem.Kind() == reflect.Ptr {\n\t\trtelem = rtelem.Elem()\n\t}\n\tfn := d.getDecFn(rtelem, true, true)\n\n\tvar rv0, rv9 reflect.Value\n\trv0 = rv\n\trvChanged := false\n\n\t// for j := 0; j < containerLenS; j++ {\n\tvar rvlen int\n\tif containerLenS > 0 { // hasLen\n\t\tif f.seq == seqTypeChan {\n\t\t\tif rv.IsNil() {\n\t\t\t\trvlen, _ = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size()))\n\t\t\t\trv.Set(reflect.MakeChan(ti.rt, rvlen))\n\t\t\t}\n\t\t\t// handle chan specially:\n\t\t\tfor j := 0; j < containerLenS; j++ {\n\t\t\t\trv9 = reflect.New(rtelem0).Elem()\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.decodeValue(rv9, fn)\n\t\t\t\trv.Send(rv9)\n\t\t\t}\n\t\t} else { // slice or array\n\t\t\tvar truncated bool         // says len of sequence is not same as expected number of elements\n\t\t\tnumToRead := containerLenS // if truncated, reset numToRead\n\n\t\t\trvcap := rv.Cap()\n\t\t\trvlen = rv.Len()\n\t\t\tif containerLenS > rvcap {\n\t\t\t\tif f.seq == seqTypeArray {\n\t\t\t\t\td.arrayCannotExpand(rvlen, containerLenS)\n\t\t\t\t} else {\n\t\t\t\t\toldRvlenGtZero := rvlen > 0\n\t\t\t\t\trvlen, truncated = decInferLen(containerLenS, f.d.h.MaxInitLen, int(rtelem0.Size()))\n\t\t\t\t\tif truncated {\n\t\t\t\t\t\tif rvlen <= rvcap {\n\t\t\t\t\t\t\trv.SetLen(rvlen)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trv = reflect.MakeSlice(ti.rt, rvlen, rvlen)\n\t\t\t\t\t\t\trvChanged = true\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trv = reflect.MakeSlice(ti.rt, rvlen, rvlen)\n\t\t\t\t\t\trvChanged = true\n\t\t\t\t\t}\n\t\t\t\t\tif rvChanged && oldRvlenGtZero && !isImmutableKind(rtelem0.Kind()) {\n\t\t\t\t\t\treflect.Copy(rv, rv0) // only copy up to length NOT cap i.e. rv0.Slice(0, rvcap)\n\t\t\t\t\t}\n\t\t\t\t\trvcap = rvlen\n\t\t\t\t}\n\t\t\t\tnumToRead = rvlen\n\t\t\t} else if containerLenS != rvlen {\n\t\t\t\tif f.seq == seqTypeSlice {\n\t\t\t\t\trv.SetLen(containerLenS)\n\t\t\t\t\trvlen = containerLenS\n\t\t\t\t}\n\t\t\t}\n\t\t\tj := 0\n\t\t\t// we read up to the numToRead\n\t\t\tfor ; j < numToRead; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.decodeValue(rv.Index(j), fn)\n\t\t\t}\n\n\t\t\t// if slice, expand and read up to containerLenS (or EOF) iff truncated\n\t\t\t// if array, swallow all the rest.\n\n\t\t\tif f.seq == seqTypeArray {\n\t\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\t\td.swallow()\n\t\t\t\t}\n\t\t\t} else if truncated { // slice was truncated, as chan NOT in this block\n\t\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\t\trv = expandSliceValue(rv, 1)\n\t\t\t\t\trv9 = rv.Index(j)\n\t\t\t\t\tif resetSliceElemToZeroValue {\n\t\t\t\t\t\trv9.Set(reflect.Zero(rtelem0))\n\t\t\t\t\t}\n\t\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\t\td.decodeValue(rv9, fn)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\trvlen = rv.Len()\n\t\tj := 0\n\t\tfor ; !dd.CheckBreak(); j++ {\n\t\t\tif f.seq == seqTypeChan {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\trv9 = reflect.New(rtelem0).Elem()\n\t\t\t\td.decodeValue(rv9, fn)\n\t\t\t\trv.Send(rv9)\n\t\t\t} else {\n\t\t\t\t// if indefinite, etc, then expand the slice if necessary\n\t\t\t\tvar decodeIntoBlank bool\n\t\t\t\tif j >= rvlen {\n\t\t\t\t\tif f.seq == seqTypeArray {\n\t\t\t\t\t\td.arrayCannotExpand(rvlen, j+1)\n\t\t\t\t\t\tdecodeIntoBlank = true\n\t\t\t\t\t} else { // if f.seq == seqTypeSlice\n\t\t\t\t\t\t// rv = reflect.Append(rv, reflect.Zero(rtelem0)) // uses append logic, plus varargs\n\t\t\t\t\t\trv = expandSliceValue(rv, 1)\n\t\t\t\t\t\trv9 = rv.Index(j)\n\t\t\t\t\t\t// rv.Index(rv.Len() - 1).Set(reflect.Zero(rtelem0))\n\t\t\t\t\t\tif resetSliceElemToZeroValue {\n\t\t\t\t\t\t\trv9.Set(reflect.Zero(rtelem0))\n\t\t\t\t\t\t}\n\t\t\t\t\t\trvlen++\n\t\t\t\t\t\trvChanged = true\n\t\t\t\t\t}\n\t\t\t\t} else { // slice or array\n\t\t\t\t\trv9 = rv.Index(j)\n\t\t\t\t}\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tif decodeIntoBlank {\n\t\t\t\t\td.swallow()\n\t\t\t\t} else { // seqTypeSlice\n\t\t\t\t\td.decodeValue(rv9, fn)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif f.seq == seqTypeSlice {\n\t\t\tif j < rvlen {\n\t\t\t\trv.SetLen(j)\n\t\t\t} else if j == 0 && rv.IsNil() {\n\t\t\t\trv = reflect.MakeSlice(ti.rt, 0, 0)\n\t\t\t\trvChanged = true\n\t\t\t}\n\t\t}\n\t}\n\tslh.End()\n\n\tif rvChanged {\n\t\trv0.Set(rv)\n\t}\n}\n\nfunc (f *decFnInfo) kArray(rv reflect.Value) {\n\t// f.d.decodeValue(rv.Slice(0, rv.Len()))\n\tf.kSlice(rv.Slice(0, rv.Len()))\n}\n\nfunc (f *decFnInfo) kMap(rv reflect.Value) {\n\td := f.d\n\tdd := d.d\n\tcontainerLen := dd.ReadMapStart()\n\tcr := d.cr\n\tti := f.ti\n\tif rv.IsNil() {\n\t\trv.Set(reflect.MakeMap(ti.rt))\n\t}\n\n\tif containerLen == 0 {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t}\n\t\treturn\n\t}\n\n\tktype, vtype := ti.rt.Key(), ti.rt.Elem()\n\tktypeId := reflect.ValueOf(ktype).Pointer()\n\tvtypeKind := vtype.Kind()\n\tvar keyFn, valFn *decFn\n\tvar xtyp reflect.Type\n\tfor xtyp = ktype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() {\n\t}\n\tkeyFn = d.getDecFn(xtyp, true, true)\n\tfor xtyp = vtype; xtyp.Kind() == reflect.Ptr; xtyp = xtyp.Elem() {\n\t}\n\tvalFn = d.getDecFn(xtyp, true, true)\n\tvar mapGet, mapSet bool\n\tif !f.d.h.MapValueReset {\n\t\t// if pointer, mapGet = true\n\t\t// if interface, mapGet = true if !DecodeNakedAlways (else false)\n\t\t// if builtin, mapGet = false\n\t\t// else mapGet = true\n\t\tif vtypeKind == reflect.Ptr {\n\t\t\tmapGet = true\n\t\t} else if vtypeKind == reflect.Interface {\n\t\t\tif !f.d.h.InterfaceReset {\n\t\t\t\tmapGet = true\n\t\t\t}\n\t\t} else if !isImmutableKind(vtypeKind) {\n\t\t\tmapGet = true\n\t\t}\n\t}\n\n\tvar rvk, rvv, rvz reflect.Value\n\n\t// for j := 0; j < containerLen; j++ {\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\trvk = reflect.New(ktype).Elem()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\td.decodeValue(rvk, keyFn)\n\n\t\t\t// special case if a byte array.\n\t\t\tif ktypeId == intfTypId {\n\t\t\t\trvk = rvk.Elem()\n\t\t\t\tif rvk.Type() == uint8SliceTyp {\n\t\t\t\t\trvk = reflect.ValueOf(d.string(rvk.Bytes()))\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapSet = true // set to false if u do a get, and its a pointer, and exists\n\t\t\tif mapGet {\n\t\t\t\trvv = rv.MapIndex(rvk)\n\t\t\t\tif rvv.IsValid() {\n\t\t\t\t\tif vtypeKind == reflect.Ptr {\n\t\t\t\t\t\tmapSet = false\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif rvz.IsValid() {\n\t\t\t\t\t\trvz.Set(reflect.Zero(vtype))\n\t\t\t\t\t} else {\n\t\t\t\t\t\trvz = reflect.New(vtype).Elem()\n\t\t\t\t\t}\n\t\t\t\t\trvv = rvz\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif rvz.IsValid() {\n\t\t\t\t\trvz.Set(reflect.Zero(vtype))\n\t\t\t\t} else {\n\t\t\t\t\trvz = reflect.New(vtype).Elem()\n\t\t\t\t}\n\t\t\t\trvv = rvz\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\td.decodeValue(rvv, valFn)\n\t\t\tif mapSet {\n\t\t\t\trv.SetMapIndex(rvk, rvv)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\trvk = reflect.New(ktype).Elem()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\td.decodeValue(rvk, keyFn)\n\n\t\t\t// special case if a byte array.\n\t\t\tif ktypeId == intfTypId {\n\t\t\t\trvk = rvk.Elem()\n\t\t\t\tif rvk.Type() == uint8SliceTyp {\n\t\t\t\t\trvk = reflect.ValueOf(d.string(rvk.Bytes()))\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapSet = true // set to false if u do a get, and its a pointer, and exists\n\t\t\tif mapGet {\n\t\t\t\trvv = rv.MapIndex(rvk)\n\t\t\t\tif rvv.IsValid() {\n\t\t\t\t\tif vtypeKind == reflect.Ptr {\n\t\t\t\t\t\tmapSet = false\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif rvz.IsValid() {\n\t\t\t\t\t\trvz.Set(reflect.Zero(vtype))\n\t\t\t\t\t} else {\n\t\t\t\t\t\trvz = reflect.New(vtype).Elem()\n\t\t\t\t\t}\n\t\t\t\t\trvv = rvz\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif rvz.IsValid() {\n\t\t\t\t\trvz.Set(reflect.Zero(vtype))\n\t\t\t\t} else {\n\t\t\t\t\trvz = reflect.New(vtype).Elem()\n\t\t\t\t}\n\t\t\t\trvv = rvz\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\td.decodeValue(rvv, valFn)\n\t\t\tif mapSet {\n\t\t\t\trv.SetMapIndex(rvk, rvv)\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\ntype decRtidFn struct {\n\trtid uintptr\n\tfn   decFn\n}\n\n// decNaked is used to keep track of the primitives decoded.\n// Without it, we would have to decode each primitive and wrap it\n// in an interface{}, causing an allocation.\n// In this model, the primitives are decoded in a \"pseudo-atomic\" fashion,\n// so we can rest assured that no other decoding happens while these\n// primitives are being decoded.\n//\n// maps and arrays are not handled by this mechanism.\n// However, RawExt is, and we accommodate for extensions that decode\n// RawExt from DecodeNaked, but need to decode the value subsequently.\n// kInterfaceNaked and swallow, which call DecodeNaked, handle this caveat.\n//\n// However, decNaked also keeps some arrays of default maps and slices\n// used in DecodeNaked. This way, we can get a pointer to it\n// without causing a new heap allocation.\n//\n// kInterfaceNaked will ensure that there is no allocation for the common\n// uses.\ntype decNaked struct {\n\t// r RawExt // used for RawExt, uint, []byte.\n\tu uint64\n\ti int64\n\tf float64\n\tl []byte\n\ts string\n\tt time.Time\n\tb bool\n\tv valueType\n\n\t// stacks for reducing allocation\n\tis []interface{}\n\tms []map[interface{}]interface{}\n\tns []map[string]interface{}\n\tss [][]interface{}\n\t// rs []RawExt\n\n\t// keep arrays at the bottom? Chance is that they are not used much.\n\tia [4]interface{}\n\tma [4]map[interface{}]interface{}\n\tna [4]map[string]interface{}\n\tsa [4][]interface{}\n\t// ra [2]RawExt\n}\n\nfunc (n *decNaked) reset() {\n\tif n.ss != nil {\n\t\tn.ss = n.ss[:0]\n\t}\n\tif n.is != nil {\n\t\tn.is = n.is[:0]\n\t}\n\tif n.ms != nil {\n\t\tn.ms = n.ms[:0]\n\t}\n\tif n.ns != nil {\n\t\tn.ns = n.ns[:0]\n\t}\n}\n\n// A Decoder reads and decodes an object from an input stream in the codec format.\ntype Decoder struct {\n\t// hopefully, reduce derefencing cost by laying the decReader inside the Decoder.\n\t// Try to put things that go together to fit within a cache line (8 words).\n\n\td decDriver\n\t// NOTE: Decoder shouldn't call it's read methods,\n\t// as the handler MAY need to do some coordination.\n\tr decReader\n\t// sa [initCollectionCap]decRtidFn\n\th  *BasicHandle\n\thh Handle\n\n\tbe    bool // is binary encoding\n\tbytes bool // is bytes reader\n\tjs    bool // is json handle\n\n\trb bytesDecReader\n\tri ioDecReader\n\tcr containerStateRecv\n\n\ts []decRtidFn\n\tf map[uintptr]*decFn\n\n\t// _  uintptr // for alignment purposes, so next one starts from a cache line\n\n\t// cache the mapTypeId and sliceTypeId for faster comparisons\n\tmtid uintptr\n\tstid uintptr\n\n\tn  decNaked\n\tb  [scratchByteArrayLen]byte\n\tis map[string]string // used for interning strings\n}\n\n// NewDecoder returns a Decoder for decoding a stream of bytes from an io.Reader.\n//\n// For efficiency, Users are encouraged to pass in a memory buffered reader\n// (eg bufio.Reader, bytes.Buffer).\nfunc NewDecoder(r io.Reader, h Handle) *Decoder {\n\td := newDecoder(h)\n\td.Reset(r)\n\treturn d\n}\n\n// NewDecoderBytes returns a Decoder which efficiently decodes directly\n// from a byte slice with zero copying.\nfunc NewDecoderBytes(in []byte, h Handle) *Decoder {\n\td := newDecoder(h)\n\td.ResetBytes(in)\n\treturn d\n}\n\nfunc newDecoder(h Handle) *Decoder {\n\td := &Decoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()}\n\tn := &d.n\n\t// n.rs = n.ra[:0]\n\tn.ms = n.ma[:0]\n\tn.is = n.ia[:0]\n\tn.ns = n.na[:0]\n\tn.ss = n.sa[:0]\n\t_, d.js = h.(*JsonHandle)\n\tif d.h.InternString {\n\t\td.is = make(map[string]string, 32)\n\t}\n\td.d = h.newDecDriver(d)\n\td.cr, _ = d.d.(containerStateRecv)\n\t// d.d = h.newDecDriver(decReaderT{true, &d.rb, &d.ri})\n\treturn d\n}\n\nfunc (d *Decoder) resetCommon() {\n\td.n.reset()\n\td.d.reset()\n\t// reset all things which were cached from the Handle,\n\t// but could be changed.\n\td.mtid, d.stid = 0, 0\n\tif d.h.MapType != nil {\n\t\td.mtid = reflect.ValueOf(d.h.MapType).Pointer()\n\t}\n\tif d.h.SliceType != nil {\n\t\td.stid = reflect.ValueOf(d.h.SliceType).Pointer()\n\t}\n}\n\nfunc (d *Decoder) Reset(r io.Reader) {\n\td.ri.x = &d.b\n\t// d.s = d.sa[:0]\n\td.ri.bs.r = r\n\tvar ok bool\n\td.ri.br, ok = r.(decReaderByteScanner)\n\tif !ok {\n\t\td.ri.br = &d.ri.bs\n\t}\n\td.r = &d.ri\n\td.resetCommon()\n}\n\nfunc (d *Decoder) ResetBytes(in []byte) {\n\t// d.s = d.sa[:0]\n\td.bytes = true\n\td.rb.reset(in)\n\td.r = &d.rb\n\td.resetCommon()\n}\n\n// func (d *Decoder) sendContainerState(c containerState) {\n// \tif d.cr != nil {\n// \t\td.cr.sendContainerState(c)\n// \t}\n// }\n\n// Decode decodes the stream from reader and stores the result in the\n// value pointed to by v. v cannot be a nil pointer. v can also be\n// a reflect.Value of a pointer.\n//\n// Note that a pointer to a nil interface is not a nil pointer.\n// If you do not know what type of stream it is, pass in a pointer to a nil interface.\n// We will decode and store a value in that nil interface.\n//\n// Sample usages:\n//   // Decoding into a non-nil typed value\n//   var f float32\n//   err = codec.NewDecoder(r, handle).Decode(&f)\n//\n//   // Decoding into nil interface\n//   var v interface{}\n//   dec := codec.NewDecoder(r, handle)\n//   err = dec.Decode(&v)\n//\n// When decoding into a nil interface{}, we will decode into an appropriate value based\n// on the contents of the stream:\n//   - Numbers are decoded as float64, int64 or uint64.\n//   - Other values are decoded appropriately depending on the type:\n//     bool, string, []byte, time.Time, etc\n//   - Extensions are decoded as RawExt (if no ext function registered for the tag)\n// Configurations exist on the Handle to override defaults\n// (e.g. for MapType, SliceType and how to decode raw bytes).\n//\n// When decoding into a non-nil interface{} value, the mode of encoding is based on the\n// type of the value. When a value is seen:\n//   - If an extension is registered for it, call that extension function\n//   - If it implements BinaryUnmarshaler, call its UnmarshalBinary(data []byte) error\n//   - Else decode it based on its reflect.Kind\n//\n// There are some special rules when decoding into containers (slice/array/map/struct).\n// Decode will typically use the stream contents to UPDATE the container.\n//   - A map can be decoded from a stream map, by updating matching keys.\n//   - A slice can be decoded from a stream array,\n//     by updating the first n elements, where n is length of the stream.\n//   - A slice can be decoded from a stream map, by decoding as if\n//     it contains a sequence of key-value pairs.\n//   - A struct can be decoded from a stream map, by updating matching fields.\n//   - A struct can be decoded from a stream array,\n//     by updating fields as they occur in the struct (by index).\n//\n// When decoding a stream map or array with length of 0 into a nil map or slice,\n// we reset the destination map or slice to a zero-length value.\n//\n// However, when decoding a stream nil, we reset the destination container\n// to its \"zero\" value (e.g. nil for slice/map, etc).\n//\nfunc (d *Decoder) Decode(v interface{}) (err error) {\n\tdefer panicToErr(&err)\n\td.decode(v)\n\treturn\n}\n\n// this is not a smart swallow, as it allocates objects and does unnecessary work.\nfunc (d *Decoder) swallowViaHammer() {\n\tvar blank interface{}\n\td.decodeValue(reflect.ValueOf(&blank).Elem(), nil)\n}\n\nfunc (d *Decoder) swallow() {\n\t// smarter decode that just swallows the content\n\tdd := d.d\n\tif dd.TryDecodeAsNil() {\n\t\treturn\n\t}\n\tcr := d.cr\n\tswitch dd.ContainerType() {\n\tcase valueTypeMap:\n\t\tcontainerLen := dd.ReadMapStart()\n\t\tclenGtEqualZero := containerLen >= 0\n\t\tfor j := 0; ; j++ {\n\t\t\tif clenGtEqualZero {\n\t\t\t\tif j >= containerLen {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if dd.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\td.swallow()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\td.swallow()\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t}\n\tcase valueTypeArray:\n\t\tcontainerLenS := dd.ReadArrayStart()\n\t\tclenGtEqualZero := containerLenS >= 0\n\t\tfor j := 0; ; j++ {\n\t\t\tif clenGtEqualZero {\n\t\t\t\tif j >= containerLenS {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if dd.CheckBreak() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t\t}\n\t\t\td.swallow()\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayEnd)\n\t\t}\n\tcase valueTypeBytes:\n\t\tdd.DecodeBytes(d.b[:], false, true)\n\tcase valueTypeString:\n\t\tdd.DecodeBytes(d.b[:], true, true)\n\t\t// dd.DecodeStringAsBytes(d.b[:])\n\tdefault:\n\t\t// these are all primitives, which we can get from decodeNaked\n\t\t// if RawExt using Value, complete the processing.\n\t\tdd.DecodeNaked()\n\t\tif n := &d.n; n.v == valueTypeExt && n.l == nil {\n\t\t\tl := len(n.is)\n\t\t\tn.is = append(n.is, nil)\n\t\t\tv2 := &n.is[l]\n\t\t\td.decode(v2)\n\t\t\tn.is = n.is[:l]\n\t\t}\n\t}\n}\n\n// MustDecode is like Decode, but panics if unable to Decode.\n// This provides insight to the code location that triggered the error.\nfunc (d *Decoder) MustDecode(v interface{}) {\n\td.decode(v)\n}\n\nfunc (d *Decoder) decode(iv interface{}) {\n\t// if ics, ok := iv.(Selfer); ok {\n\t// \tics.CodecDecodeSelf(d)\n\t// \treturn\n\t// }\n\n\tif d.d.TryDecodeAsNil() {\n\t\tswitch v := iv.(type) {\n\t\tcase nil:\n\t\tcase *string:\n\t\t\t*v = \"\"\n\t\tcase *bool:\n\t\t\t*v = false\n\t\tcase *int:\n\t\t\t*v = 0\n\t\tcase *int8:\n\t\t\t*v = 0\n\t\tcase *int16:\n\t\t\t*v = 0\n\t\tcase *int32:\n\t\t\t*v = 0\n\t\tcase *int64:\n\t\t\t*v = 0\n\t\tcase *uint:\n\t\t\t*v = 0\n\t\tcase *uint8:\n\t\t\t*v = 0\n\t\tcase *uint16:\n\t\t\t*v = 0\n\t\tcase *uint32:\n\t\t\t*v = 0\n\t\tcase *uint64:\n\t\t\t*v = 0\n\t\tcase *float32:\n\t\t\t*v = 0\n\t\tcase *float64:\n\t\t\t*v = 0\n\t\tcase *[]uint8:\n\t\t\t*v = nil\n\t\tcase *Raw:\n\t\t\t*v = nil\n\t\tcase reflect.Value:\n\t\t\tif v.Kind() != reflect.Ptr || v.IsNil() {\n\t\t\t\td.errNotValidPtrValue(v)\n\t\t\t}\n\t\t\t// d.chkPtrValue(v)\n\t\t\tv = v.Elem()\n\t\t\tif v.IsValid() {\n\t\t\t\tv.Set(reflect.Zero(v.Type()))\n\t\t\t}\n\t\tdefault:\n\t\t\trv := reflect.ValueOf(iv)\n\t\t\tif rv.Kind() != reflect.Ptr || rv.IsNil() {\n\t\t\t\td.errNotValidPtrValue(rv)\n\t\t\t}\n\t\t\t// d.chkPtrValue(rv)\n\t\t\trv = rv.Elem()\n\t\t\tif rv.IsValid() {\n\t\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tswitch v := iv.(type) {\n\tcase nil:\n\t\td.error(cannotDecodeIntoNilErr)\n\t\treturn\n\n\tcase Selfer:\n\t\tv.CodecDecodeSelf(d)\n\n\tcase reflect.Value:\n\t\tif v.Kind() != reflect.Ptr || v.IsNil() {\n\t\t\td.errNotValidPtrValue(v)\n\t\t}\n\t\t// d.chkPtrValue(v)\n\t\td.decodeValueNotNil(v.Elem(), nil)\n\n\tcase *string:\n\t\t*v = d.d.DecodeString()\n\tcase *bool:\n\t\t*v = d.d.DecodeBool()\n\tcase *int:\n\t\t*v = int(d.d.DecodeInt(intBitsize))\n\tcase *int8:\n\t\t*v = int8(d.d.DecodeInt(8))\n\tcase *int16:\n\t\t*v = int16(d.d.DecodeInt(16))\n\tcase *int32:\n\t\t*v = int32(d.d.DecodeInt(32))\n\tcase *int64:\n\t\t*v = d.d.DecodeInt(64)\n\tcase *uint:\n\t\t*v = uint(d.d.DecodeUint(uintBitsize))\n\tcase *uint8:\n\t\t*v = uint8(d.d.DecodeUint(8))\n\tcase *uint16:\n\t\t*v = uint16(d.d.DecodeUint(16))\n\tcase *uint32:\n\t\t*v = uint32(d.d.DecodeUint(32))\n\tcase *uint64:\n\t\t*v = d.d.DecodeUint(64)\n\tcase *float32:\n\t\t*v = float32(d.d.DecodeFloat(true))\n\tcase *float64:\n\t\t*v = d.d.DecodeFloat(false)\n\tcase *[]uint8:\n\t\t*v = d.d.DecodeBytes(*v, false, false)\n\n\tcase *Raw:\n\t\t*v = d.raw()\n\n\tcase *interface{}:\n\t\td.decodeValueNotNil(reflect.ValueOf(iv).Elem(), nil)\n\n\tdefault:\n\t\tif !fastpathDecodeTypeSwitch(iv, d) {\n\t\t\td.decodeI(iv, true, false, false, false)\n\t\t}\n\t}\n}\n\nfunc (d *Decoder) preDecodeValue(rv reflect.Value, tryNil bool) (rv2 reflect.Value, proceed bool) {\n\tif tryNil && d.d.TryDecodeAsNil() {\n\t\t// No need to check if a ptr, recursively, to determine\n\t\t// whether to set value to nil.\n\t\t// Just always set value to its zero type.\n\t\tif rv.IsValid() { // rv.CanSet() // always settable, except it's invalid\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t}\n\t\treturn\n\t}\n\n\t// If stream is not containing a nil value, then we can deref to the base\n\t// non-pointer value, and decode into that.\n\tfor rv.Kind() == reflect.Ptr {\n\t\tif rv.IsNil() {\n\t\t\trv.Set(reflect.New(rv.Type().Elem()))\n\t\t}\n\t\trv = rv.Elem()\n\t}\n\treturn rv, true\n}\n\nfunc (d *Decoder) decodeI(iv interface{}, checkPtr, tryNil, checkFastpath, checkCodecSelfer bool) {\n\trv := reflect.ValueOf(iv)\n\tif checkPtr {\n\t\tif rv.Kind() != reflect.Ptr || rv.IsNil() {\n\t\t\td.errNotValidPtrValue(rv)\n\t\t}\n\t\t// d.chkPtrValue(rv)\n\t}\n\trv, proceed := d.preDecodeValue(rv, tryNil)\n\tif proceed {\n\t\tfn := d.getDecFn(rv.Type(), checkFastpath, checkCodecSelfer)\n\t\tfn.f(&fn.i, rv)\n\t}\n}\n\nfunc (d *Decoder) decodeValue(rv reflect.Value, fn *decFn) {\n\tif rv, proceed := d.preDecodeValue(rv, true); proceed {\n\t\tif fn == nil {\n\t\t\tfn = d.getDecFn(rv.Type(), true, true)\n\t\t}\n\t\tfn.f(&fn.i, rv)\n\t}\n}\n\nfunc (d *Decoder) decodeValueNotNil(rv reflect.Value, fn *decFn) {\n\tif rv, proceed := d.preDecodeValue(rv, false); proceed {\n\t\tif fn == nil {\n\t\t\tfn = d.getDecFn(rv.Type(), true, true)\n\t\t}\n\t\tfn.f(&fn.i, rv)\n\t}\n}\n\nfunc (d *Decoder) getDecFn(rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *decFn) {\n\trtid := reflect.ValueOf(rt).Pointer()\n\n\t// retrieve or register a focus'ed function for this type\n\t// to eliminate need to do the retrieval multiple times\n\n\t// if d.f == nil && d.s == nil { debugf(\"---->Creating new dec f map for type: %v\\n\", rt) }\n\tvar ok bool\n\tif useMapForCodecCache {\n\t\tfn, ok = d.f[rtid]\n\t} else {\n\t\tfor i := range d.s {\n\t\t\tv := &(d.s[i])\n\t\t\tif v.rtid == rtid {\n\t\t\t\tfn, ok = &(v.fn), true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif ok {\n\t\treturn\n\t}\n\n\tif useMapForCodecCache {\n\t\tif d.f == nil {\n\t\t\td.f = make(map[uintptr]*decFn, initCollectionCap)\n\t\t}\n\t\tfn = new(decFn)\n\t\td.f[rtid] = fn\n\t} else {\n\t\tif d.s == nil {\n\t\t\td.s = make([]decRtidFn, 0, initCollectionCap)\n\t\t}\n\t\td.s = append(d.s, decRtidFn{rtid: rtid})\n\t\tfn = &(d.s[len(d.s)-1]).fn\n\t}\n\n\t// debugf(\"\\tCreating new dec fn for type: %v\\n\", rt)\n\tti := d.h.getTypeInfo(rtid, rt)\n\tfi := &(fn.i)\n\tfi.d = d\n\tfi.ti = ti\n\n\t// An extension can be registered for any type, regardless of the Kind\n\t// (e.g. type BitSet int64, type MyStruct { / * unexported fields * / }, type X []int, etc.\n\t//\n\t// We can't check if it's an extension byte here first, because the user may have\n\t// registered a pointer or non-pointer type, meaning we may have to recurse first\n\t// before matching a mapped type, even though the extension byte is already detected.\n\t//\n\t// NOTE: if decoding into a nil interface{}, we return a non-nil\n\t// value except even if the container registers a length of 0.\n\tif checkCodecSelfer && ti.cs {\n\t\tfn.f = (*decFnInfo).selferUnmarshal\n\t} else if rtid == rawExtTypId {\n\t\tfn.f = (*decFnInfo).rawExt\n\t} else if rtid == rawTypId {\n\t\tfn.f = (*decFnInfo).raw\n\t} else if d.d.IsBuiltinType(rtid) {\n\t\tfn.f = (*decFnInfo).builtin\n\t} else if xfFn := d.h.getExt(rtid); xfFn != nil {\n\t\tfi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext\n\t\tfn.f = (*decFnInfo).ext\n\t} else if supportMarshalInterfaces && d.be && ti.bunm {\n\t\tfn.f = (*decFnInfo).binaryUnmarshal\n\t} else if supportMarshalInterfaces && !d.be && d.js && ti.junm {\n\t\t//If JSON, we should check JSONUnmarshal before textUnmarshal\n\t\tfn.f = (*decFnInfo).jsonUnmarshal\n\t} else if supportMarshalInterfaces && !d.be && ti.tunm {\n\t\tfn.f = (*decFnInfo).textUnmarshal\n\t} else {\n\t\trk := rt.Kind()\n\t\tif fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) {\n\t\t\tif rt.PkgPath() == \"\" {\n\t\t\t\tif idx := fastpathAV.index(rtid); idx != -1 {\n\t\t\t\t\tfn.f = fastpathAV[idx].decfn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// use mapping for underlying type if there\n\t\t\t\tok = false\n\t\t\t\tvar rtu reflect.Type\n\t\t\t\tif rk == reflect.Map {\n\t\t\t\t\trtu = reflect.MapOf(rt.Key(), rt.Elem())\n\t\t\t\t} else {\n\t\t\t\t\trtu = reflect.SliceOf(rt.Elem())\n\t\t\t\t}\n\t\t\t\trtuid := reflect.ValueOf(rtu).Pointer()\n\t\t\t\tif idx := fastpathAV.index(rtuid); idx != -1 {\n\t\t\t\t\txfnf := fastpathAV[idx].decfn\n\t\t\t\t\txrt := fastpathAV[idx].rt\n\t\t\t\t\tfn.f = func(xf *decFnInfo, xrv reflect.Value) {\n\t\t\t\t\t\t// xfnf(xf, xrv.Convert(xrt))\n\t\t\t\t\t\txfnf(xf, xrv.Addr().Convert(reflect.PtrTo(xrt)).Elem())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif fn.f == nil {\n\t\t\tswitch rk {\n\t\t\tcase reflect.String:\n\t\t\t\tfn.f = (*decFnInfo).kString\n\t\t\tcase reflect.Bool:\n\t\t\t\tfn.f = (*decFnInfo).kBool\n\t\t\tcase reflect.Int:\n\t\t\t\tfn.f = (*decFnInfo).kInt\n\t\t\tcase reflect.Int64:\n\t\t\t\tfn.f = (*decFnInfo).kInt64\n\t\t\tcase reflect.Int32:\n\t\t\t\tfn.f = (*decFnInfo).kInt32\n\t\t\tcase reflect.Int8:\n\t\t\t\tfn.f = (*decFnInfo).kInt8\n\t\t\tcase reflect.Int16:\n\t\t\t\tfn.f = (*decFnInfo).kInt16\n\t\t\tcase reflect.Float32:\n\t\t\t\tfn.f = (*decFnInfo).kFloat32\n\t\t\tcase reflect.Float64:\n\t\t\t\tfn.f = (*decFnInfo).kFloat64\n\t\t\tcase reflect.Uint8:\n\t\t\t\tfn.f = (*decFnInfo).kUint8\n\t\t\tcase reflect.Uint64:\n\t\t\t\tfn.f = (*decFnInfo).kUint64\n\t\t\tcase reflect.Uint:\n\t\t\t\tfn.f = (*decFnInfo).kUint\n\t\t\tcase reflect.Uint32:\n\t\t\t\tfn.f = (*decFnInfo).kUint32\n\t\t\tcase reflect.Uint16:\n\t\t\t\tfn.f = (*decFnInfo).kUint16\n\t\t\t\t// case reflect.Ptr:\n\t\t\t\t// \tfn.f = (*decFnInfo).kPtr\n\t\t\tcase reflect.Uintptr:\n\t\t\t\tfn.f = (*decFnInfo).kUintptr\n\t\t\tcase reflect.Interface:\n\t\t\t\tfn.f = (*decFnInfo).kInterface\n\t\t\tcase reflect.Struct:\n\t\t\t\tfn.f = (*decFnInfo).kStruct\n\t\t\tcase reflect.Chan:\n\t\t\t\tfi.seq = seqTypeChan\n\t\t\t\tfn.f = (*decFnInfo).kSlice\n\t\t\tcase reflect.Slice:\n\t\t\t\tfi.seq = seqTypeSlice\n\t\t\t\tfn.f = (*decFnInfo).kSlice\n\t\t\tcase reflect.Array:\n\t\t\t\tfi.seq = seqTypeArray\n\t\t\t\tfn.f = (*decFnInfo).kArray\n\t\t\tcase reflect.Map:\n\t\t\t\tfn.f = (*decFnInfo).kMap\n\t\t\tdefault:\n\t\t\t\tfn.f = (*decFnInfo).kErr\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (d *Decoder) structFieldNotFound(index int, rvkencname string) {\n\t// NOTE: rvkencname may be a stringView, so don't pass it to another function.\n\tif d.h.ErrorIfNoField {\n\t\tif index >= 0 {\n\t\t\td.errorf(\"no matching struct field found when decoding stream array at index %v\", index)\n\t\t\treturn\n\t\t} else if rvkencname != \"\" {\n\t\t\td.errorf(\"no matching struct field found when decoding stream map with key \" + rvkencname)\n\t\t\treturn\n\t\t}\n\t}\n\td.swallow()\n}\n\nfunc (d *Decoder) arrayCannotExpand(sliceLen, streamLen int) {\n\tif d.h.ErrorIfNoArrayExpand {\n\t\td.errorf(\"cannot expand array len during decode from %v to %v\", sliceLen, streamLen)\n\t}\n}\n\nfunc (d *Decoder) chkPtrValue(rv reflect.Value) {\n\t// We can only decode into a non-nil pointer\n\tif rv.Kind() == reflect.Ptr && !rv.IsNil() {\n\t\treturn\n\t}\n\td.errNotValidPtrValue(rv)\n}\n\nfunc (d *Decoder) errNotValidPtrValue(rv reflect.Value) {\n\tif !rv.IsValid() {\n\t\td.error(cannotDecodeIntoNilErr)\n\t\treturn\n\t}\n\tif !rv.CanInterface() {\n\t\td.errorf(\"cannot decode into a value without an interface: %v\", rv)\n\t\treturn\n\t}\n\trvi := rv.Interface()\n\td.errorf(\"cannot decode into non-pointer or nil pointer. Got: %v, %T, %v\", rv.Kind(), rvi, rvi)\n}\n\nfunc (d *Decoder) error(err error) {\n\tpanic(err)\n}\n\nfunc (d *Decoder) errorf(format string, params ...interface{}) {\n\tparams2 := make([]interface{}, len(params)+1)\n\tparams2[0] = d.r.numread()\n\tcopy(params2[1:], params)\n\terr := fmt.Errorf(\"[pos %d]: \"+format, params2...)\n\tpanic(err)\n}\n\nfunc (d *Decoder) string(v []byte) (s string) {\n\tif d.is != nil {\n\t\ts, ok := d.is[string(v)] // no allocation here.\n\t\tif !ok {\n\t\t\ts = string(v)\n\t\t\td.is[s] = s\n\t\t}\n\t\treturn s\n\t}\n\treturn string(v) // don't return stringView, as we need a real string here.\n}\n\nfunc (d *Decoder) intern(s string) {\n\tif d.is != nil {\n\t\td.is[s] = s\n\t}\n}\n\n// nextValueBytes returns the next value in the stream as a set of bytes.\nfunc (d *Decoder) nextValueBytes() []byte {\n\td.d.uncacheRead()\n\td.r.track()\n\td.swallow()\n\treturn d.r.stopTrack()\n}\n\nfunc (d *Decoder) raw() []byte {\n\t// ensure that this is not a view into the bytes\n\t// i.e. make new copy always.\n\tbs := d.nextValueBytes()\n\tbs2 := make([]byte, len(bs))\n\tcopy(bs2, bs)\n\treturn bs2\n}\n\n// --------------------------------------------------\n\n// decSliceHelper assists when decoding into a slice, from a map or an array in the stream.\n// A slice can be set from a map or array in stream. This supports the MapBySlice interface.\ntype decSliceHelper struct {\n\td *Decoder\n\t// ct valueType\n\tarray bool\n}\n\nfunc (d *Decoder) decSliceHelperStart() (x decSliceHelper, clen int) {\n\tdd := d.d\n\tctyp := dd.ContainerType()\n\tif ctyp == valueTypeArray {\n\t\tx.array = true\n\t\tclen = dd.ReadArrayStart()\n\t} else if ctyp == valueTypeMap {\n\t\tclen = dd.ReadMapStart() * 2\n\t} else {\n\t\td.errorf(\"only encoded map or array can be decoded into a slice (%d)\", ctyp)\n\t}\n\t// x.ct = ctyp\n\tx.d = d\n\treturn\n}\n\nfunc (x decSliceHelper) End() {\n\tcr := x.d.cr\n\tif cr == nil {\n\t\treturn\n\t}\n\tif x.array {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t} else {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (x decSliceHelper) ElemContainerState(index int) {\n\tcr := x.d.cr\n\tif cr == nil {\n\t\treturn\n\t}\n\tif x.array {\n\t\tcr.sendContainerState(containerArrayElem)\n\t} else {\n\t\tif index%2 == 0 {\n\t\t\tcr.sendContainerState(containerMapKey)\n\t\t} else {\n\t\t\tcr.sendContainerState(containerMapValue)\n\t\t}\n\t}\n}\n\nfunc decByteSlice(r decReader, clen, maxInitLen int, bs []byte) (bsOut []byte) {\n\tif clen == 0 {\n\t\treturn zeroByteSlice\n\t}\n\tif len(bs) == clen {\n\t\tbsOut = bs\n\t\tr.readb(bsOut)\n\t} else if cap(bs) >= clen {\n\t\tbsOut = bs[:clen]\n\t\tr.readb(bsOut)\n\t} else {\n\t\t// bsOut = make([]byte, clen)\n\t\tlen2, _ := decInferLen(clen, maxInitLen, 1)\n\t\tbsOut = make([]byte, len2)\n\t\tr.readb(bsOut)\n\t\tfor len2 < clen {\n\t\t\tlen3, _ := decInferLen(clen-len2, maxInitLen, 1)\n\t\t\t// fmt.Printf(\">>>>> TESTING: in loop: clen: %v, maxInitLen: %v, len2: %v, len3: %v\\n\", clen, maxInitLen, len2, len3)\n\t\t\tbs3 := bsOut\n\t\t\tbsOut = make([]byte, len2+len3)\n\t\t\tcopy(bsOut, bs3)\n\t\t\tr.readb(bsOut[len2:])\n\t\t\tlen2 += len3\n\t\t}\n\t}\n\treturn\n}\n\nfunc detachZeroCopyBytes(isBytesReader bool, dest []byte, in []byte) (out []byte) {\n\tif xlen := len(in); xlen > 0 {\n\t\tif isBytesReader || xlen <= scratchByteArrayLen {\n\t\t\tif cap(dest) >= xlen {\n\t\t\t\tout = dest[:xlen]\n\t\t\t} else {\n\t\t\t\tout = make([]byte, xlen)\n\t\t\t}\n\t\t\tcopy(out, in)\n\t\t\treturn\n\t\t}\n\t}\n\treturn in\n}\n\n// decInferLen will infer a sensible length, given the following:\n//    - clen: length wanted.\n//    - maxlen: max length to be returned.\n//      if <= 0, it is unset, and we infer it based on the unit size\n//    - unit: number of bytes for each element of the collection\nfunc decInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {\n\t// handle when maxlen is not set i.e. <= 0\n\tif clen <= 0 {\n\t\treturn\n\t}\n\tif maxlen <= 0 {\n\t\t// no maxlen defined. Use maximum of 256K memory, with a floor of 4K items.\n\t\t// maxlen = 256 * 1024 / unit\n\t\t// if maxlen < (4 * 1024) {\n\t\t// \tmaxlen = 4 * 1024\n\t\t// }\n\t\tif unit < (256 / 4) {\n\t\t\tmaxlen = 256 * 1024 / unit\n\t\t} else {\n\t\t\tmaxlen = 4 * 1024\n\t\t}\n\t}\n\tif clen > maxlen {\n\t\trvlen = maxlen\n\t\ttruncated = true\n\t} else {\n\t\trvlen = clen\n\t}\n\treturn\n\t// if clen <= 0 {\n\t// \trvlen = 0\n\t// } else if maxlen > 0 && clen > maxlen {\n\t// \trvlen = maxlen\n\t// \ttruncated = true\n\t// } else {\n\t// \trvlen = clen\n\t// }\n\t// return\n}\n\n// // implement overall decReader wrapping both, for possible use inline:\n// type decReaderT struct {\n// \tbytes bool\n// \trb    *bytesDecReader\n// \tri    *ioDecReader\n// }\n//\n// // implement *Decoder as a decReader.\n// // Using decReaderT (defined just above) caused performance degradation\n// // possibly because of constant copying the value,\n// // and some value->interface conversion causing allocation.\n// func (d *Decoder) unreadn1() {\n// \tif d.bytes {\n// \t\td.rb.unreadn1()\n// \t} else {\n// \t\td.ri.unreadn1()\n// \t}\n// }\n// ... for other methods of decReader.\n// Testing showed that performance improvement was negligible.\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/decode_go.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// +build go1.5\n\npackage codec\n\nimport \"reflect\"\n\nconst reflectArrayOfSupported = true\n\nfunc reflectArrayOf(rvn reflect.Value) (rvn2 reflect.Value) {\n\trvn2 = reflect.New(reflect.ArrayOf(rvn.Len(), intfTyp)).Elem()\n\treflect.Copy(rvn2, rvn)\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/decode_go14.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// +build !go1.5\n\npackage codec\n\nimport \"reflect\"\n\nconst reflectArrayOfSupported = false\n\nfunc reflectArrayOf(rvn reflect.Value) (rvn2 reflect.Value) {\n\tpanic(\"reflect.ArrayOf unsupported\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/encode.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"encoding\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"sync\"\n)\n\nconst (\n\tdefEncByteBufSize = 1 << 6 // 4:16, 6:64, 8:256, 10:1024\n)\n\n// AsSymbolFlag defines what should be encoded as symbols.\ntype AsSymbolFlag uint8\n\nconst (\n\t// AsSymbolDefault is default.\n\t// Currently, this means only encode struct field names as symbols.\n\t// The default is subject to change.\n\tAsSymbolDefault AsSymbolFlag = iota\n\n\t// AsSymbolAll means encode anything which could be a symbol as a symbol.\n\tAsSymbolAll = 0xfe\n\n\t// AsSymbolNone means do not encode anything as a symbol.\n\tAsSymbolNone = 1 << iota\n\n\t// AsSymbolMapStringKeys means encode keys in map[string]XXX as symbols.\n\tAsSymbolMapStringKeysFlag\n\n\t// AsSymbolStructFieldName means encode struct field names as symbols.\n\tAsSymbolStructFieldNameFlag\n)\n\n// encWriter abstracts writing to a byte array or to an io.Writer.\ntype encWriter interface {\n\twriteb([]byte)\n\twritestr(string)\n\twriten1(byte)\n\twriten2(byte, byte)\n\tatEndOfEncode()\n}\n\n// encDriver abstracts the actual codec (binc vs msgpack, etc)\ntype encDriver interface {\n\tIsBuiltinType(rt uintptr) bool\n\tEncodeBuiltin(rt uintptr, v interface{})\n\tEncodeNil()\n\tEncodeInt(i int64)\n\tEncodeUint(i uint64)\n\tEncodeBool(b bool)\n\tEncodeFloat32(f float32)\n\tEncodeFloat64(f float64)\n\t// encodeExtPreamble(xtag byte, length int)\n\tEncodeRawExt(re *RawExt, e *Encoder)\n\tEncodeExt(v interface{}, xtag uint64, ext Ext, e *Encoder)\n\tEncodeArrayStart(length int)\n\tEncodeMapStart(length int)\n\tEncodeString(c charEncoding, v string)\n\tEncodeSymbol(v string)\n\tEncodeStringBytes(c charEncoding, v []byte)\n\t//TODO\n\t//encBignum(f *big.Int)\n\t//encStringRunes(c charEncoding, v []rune)\n\n\treset()\n}\n\ntype encDriverAsis interface {\n\tEncodeAsis(v []byte)\n}\n\ntype encNoSeparator struct{}\n\nfunc (_ encNoSeparator) EncodeEnd() {}\n\ntype ioEncWriterWriter interface {\n\tWriteByte(c byte) error\n\tWriteString(s string) (n int, err error)\n\tWrite(p []byte) (n int, err error)\n}\n\ntype ioEncStringWriter interface {\n\tWriteString(s string) (n int, err error)\n}\n\ntype EncodeOptions struct {\n\t// Encode a struct as an array, and not as a map\n\tStructToArray bool\n\n\t// Canonical representation means that encoding a value will always result in the same\n\t// sequence of bytes.\n\t//\n\t// This only affects maps, as the iteration order for maps is random.\n\t//\n\t// The implementation MAY use the natural sort order for the map keys if possible:\n\t//\n\t//     - If there is a natural sort order (ie for number, bool, string or []byte keys),\n\t//       then the map keys are first sorted in natural order and then written\n\t//       with corresponding map values to the strema.\n\t//     - If there is no natural sort order, then the map keys will first be\n\t//       encoded into []byte, and then sorted,\n\t//       before writing the sorted keys and the corresponding map values to the stream.\n\t//\n\tCanonical bool\n\n\t// CheckCircularRef controls whether we check for circular references\n\t// and error fast during an encode.\n\t//\n\t// If enabled, an error is received if a pointer to a struct\n\t// references itself either directly or through one of its fields (iteratively).\n\t//\n\t// This is opt-in, as there may be a performance hit to checking circular references.\n\tCheckCircularRef bool\n\n\t// RecursiveEmptyCheck controls whether we descend into interfaces, structs and pointers\n\t// when checking if a value is empty.\n\t//\n\t// Note that this may make OmitEmpty more expensive, as it incurs a lot more reflect calls.\n\tRecursiveEmptyCheck bool\n\n\t// Raw controls whether we encode Raw values.\n\t// This is a \"dangerous\" option and must be explicitly set.\n\t// If set, we blindly encode Raw values as-is, without checking\n\t// if they are a correct representation of a value in that format.\n\t// If unset, we error out.\n\tRaw bool\n\n\t// AsSymbols defines what should be encoded as symbols.\n\t//\n\t// Encoding as symbols can reduce the encoded size significantly.\n\t//\n\t// However, during decoding, each string to be encoded as a symbol must\n\t// be checked to see if it has been seen before. Consequently, encoding time\n\t// will increase if using symbols, because string comparisons has a clear cost.\n\t//\n\t// Sample values:\n\t//   AsSymbolNone\n\t//   AsSymbolAll\n\t//   AsSymbolMapStringKeys\n\t//   AsSymbolMapStringKeysFlag | AsSymbolStructFieldNameFlag\n\tAsSymbols AsSymbolFlag\n}\n\n// ---------------------------------------------\n\ntype simpleIoEncWriterWriter struct {\n\tw  io.Writer\n\tbw io.ByteWriter\n\tsw ioEncStringWriter\n\tbs [1]byte\n}\n\nfunc (o *simpleIoEncWriterWriter) WriteByte(c byte) (err error) {\n\tif o.bw != nil {\n\t\treturn o.bw.WriteByte(c)\n\t}\n\t// _, err = o.w.Write([]byte{c})\n\to.bs[0] = c\n\t_, err = o.w.Write(o.bs[:])\n\treturn\n}\n\nfunc (o *simpleIoEncWriterWriter) WriteString(s string) (n int, err error) {\n\tif o.sw != nil {\n\t\treturn o.sw.WriteString(s)\n\t}\n\t// return o.w.Write([]byte(s))\n\treturn o.w.Write(bytesView(s))\n}\n\nfunc (o *simpleIoEncWriterWriter) Write(p []byte) (n int, err error) {\n\treturn o.w.Write(p)\n}\n\n// ----------------------------------------\n\n// ioEncWriter implements encWriter and can write to an io.Writer implementation\ntype ioEncWriter struct {\n\tw ioEncWriterWriter\n\ts simpleIoEncWriterWriter\n\t// x [8]byte // temp byte array re-used internally for efficiency\n}\n\nfunc (z *ioEncWriter) writeb(bs []byte) {\n\tif len(bs) == 0 {\n\t\treturn\n\t}\n\tn, err := z.w.Write(bs)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif n != len(bs) {\n\t\tpanic(fmt.Errorf(\"incorrect num bytes written. Expecting: %v, Wrote: %v\", len(bs), n))\n\t}\n}\n\nfunc (z *ioEncWriter) writestr(s string) {\n\tn, err := z.w.WriteString(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif n != len(s) {\n\t\tpanic(fmt.Errorf(\"incorrect num bytes written. Expecting: %v, Wrote: %v\", len(s), n))\n\t}\n}\n\nfunc (z *ioEncWriter) writen1(b byte) {\n\tif err := z.w.WriteByte(b); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (z *ioEncWriter) writen2(b1 byte, b2 byte) {\n\tz.writen1(b1)\n\tz.writen1(b2)\n}\n\nfunc (z *ioEncWriter) atEndOfEncode() {}\n\n// ----------------------------------------\n\n// bytesEncWriter implements encWriter and can write to an byte slice.\n// It is used by Marshal function.\ntype bytesEncWriter struct {\n\tb   []byte\n\tc   int     // cursor\n\tout *[]byte // write out on atEndOfEncode\n}\n\nfunc (z *bytesEncWriter) writeb(s []byte) {\n\tif len(s) == 0 {\n\t\treturn\n\t}\n\toc, a := z.growNoAlloc(len(s))\n\tif a {\n\t\tz.growAlloc(len(s), oc)\n\t}\n\tcopy(z.b[oc:], s)\n}\n\nfunc (z *bytesEncWriter) writestr(s string) {\n\tif len(s) == 0 {\n\t\treturn\n\t}\n\toc, a := z.growNoAlloc(len(s))\n\tif a {\n\t\tz.growAlloc(len(s), oc)\n\t}\n\tcopy(z.b[oc:], s)\n}\n\nfunc (z *bytesEncWriter) writen1(b1 byte) {\n\toc, a := z.growNoAlloc(1)\n\tif a {\n\t\tz.growAlloc(1, oc)\n\t}\n\tz.b[oc] = b1\n}\n\nfunc (z *bytesEncWriter) writen2(b1 byte, b2 byte) {\n\toc, a := z.growNoAlloc(2)\n\tif a {\n\t\tz.growAlloc(2, oc)\n\t}\n\tz.b[oc+1] = b2\n\tz.b[oc] = b1\n}\n\nfunc (z *bytesEncWriter) atEndOfEncode() {\n\t*(z.out) = z.b[:z.c]\n}\n\n// have a growNoalloc(n int), which can be inlined.\n// if allocation is needed, then call growAlloc(n int)\n\nfunc (z *bytesEncWriter) growNoAlloc(n int) (oldcursor int, allocNeeded bool) {\n\toldcursor = z.c\n\tz.c = z.c + n\n\tif z.c > len(z.b) {\n\t\tif z.c > cap(z.b) {\n\t\t\tallocNeeded = true\n\t\t} else {\n\t\t\tz.b = z.b[:cap(z.b)]\n\t\t}\n\t}\n\treturn\n}\n\nfunc (z *bytesEncWriter) growAlloc(n int, oldcursor int) {\n\t// appendslice logic (if cap < 1024, *2, else *1.25): more expensive. many copy calls.\n\t// bytes.Buffer model (2*cap + n): much better\n\t// bs := make([]byte, 2*cap(z.b)+n)\n\tbs := make([]byte, growCap(cap(z.b), 1, n))\n\tcopy(bs, z.b[:oldcursor])\n\tz.b = bs\n}\n\n// ---------------------------------------------\n\ntype encFnInfo struct {\n\te     *Encoder\n\tti    *typeInfo\n\txfFn  Ext\n\txfTag uint64\n\tseq   seqType\n}\n\nfunc (f *encFnInfo) builtin(rv reflect.Value) {\n\tf.e.e.EncodeBuiltin(f.ti.rtid, rv.Interface())\n}\n\nfunc (f *encFnInfo) raw(rv reflect.Value) {\n\tf.e.raw(rv.Interface().(Raw))\n}\n\nfunc (f *encFnInfo) rawExt(rv reflect.Value) {\n\t// rev := rv.Interface().(RawExt)\n\t// f.e.e.EncodeRawExt(&rev, f.e)\n\tvar re *RawExt\n\tif rv.CanAddr() {\n\t\tre = rv.Addr().Interface().(*RawExt)\n\t} else {\n\t\trev := rv.Interface().(RawExt)\n\t\tre = &rev\n\t}\n\tf.e.e.EncodeRawExt(re, f.e)\n}\n\nfunc (f *encFnInfo) ext(rv reflect.Value) {\n\t// if this is a struct|array and it was addressable, then pass the address directly (not the value)\n\tif k := rv.Kind(); (k == reflect.Struct || k == reflect.Array) && rv.CanAddr() {\n\t\trv = rv.Addr()\n\t}\n\tf.e.e.EncodeExt(rv.Interface(), f.xfTag, f.xfFn, f.e)\n}\n\nfunc (f *encFnInfo) getValueForMarshalInterface(rv reflect.Value, indir int8) (v interface{}, proceed bool) {\n\tif indir == 0 {\n\t\tv = rv.Interface()\n\t} else if indir == -1 {\n\t\t// If a non-pointer was passed to Encode(), then that value is not addressable.\n\t\t// Take addr if addressable, else copy value to an addressable value.\n\t\tif rv.CanAddr() {\n\t\t\tv = rv.Addr().Interface()\n\t\t} else {\n\t\t\trv2 := reflect.New(rv.Type())\n\t\t\trv2.Elem().Set(rv)\n\t\t\tv = rv2.Interface()\n\t\t\t// fmt.Printf(\"rv.Type: %v, rv2.Type: %v, v: %v\\n\", rv.Type(), rv2.Type(), v)\n\t\t}\n\t} else {\n\t\tfor j := int8(0); j < indir; j++ {\n\t\t\tif rv.IsNil() {\n\t\t\t\tf.e.e.EncodeNil()\n\t\t\t\treturn\n\t\t\t}\n\t\t\trv = rv.Elem()\n\t\t}\n\t\tv = rv.Interface()\n\t}\n\treturn v, true\n}\n\nfunc (f *encFnInfo) selferMarshal(rv reflect.Value) {\n\tif v, proceed := f.getValueForMarshalInterface(rv, f.ti.csIndir); proceed {\n\t\tv.(Selfer).CodecEncodeSelf(f.e)\n\t}\n}\n\nfunc (f *encFnInfo) binaryMarshal(rv reflect.Value) {\n\tif v, proceed := f.getValueForMarshalInterface(rv, f.ti.bmIndir); proceed {\n\t\tbs, fnerr := v.(encoding.BinaryMarshaler).MarshalBinary()\n\t\tf.e.marshal(bs, fnerr, false, c_RAW)\n\t}\n}\n\nfunc (f *encFnInfo) textMarshal(rv reflect.Value) {\n\tif v, proceed := f.getValueForMarshalInterface(rv, f.ti.tmIndir); proceed {\n\t\t// debugf(\">>>> encoding.TextMarshaler: %T\", rv.Interface())\n\t\tbs, fnerr := v.(encoding.TextMarshaler).MarshalText()\n\t\tf.e.marshal(bs, fnerr, false, c_UTF8)\n\t}\n}\n\nfunc (f *encFnInfo) jsonMarshal(rv reflect.Value) {\n\tif v, proceed := f.getValueForMarshalInterface(rv, f.ti.jmIndir); proceed {\n\t\tbs, fnerr := v.(jsonMarshaler).MarshalJSON()\n\t\tf.e.marshal(bs, fnerr, true, c_UTF8)\n\t}\n}\n\nfunc (f *encFnInfo) kBool(rv reflect.Value) {\n\tf.e.e.EncodeBool(rv.Bool())\n}\n\nfunc (f *encFnInfo) kString(rv reflect.Value) {\n\tf.e.e.EncodeString(c_UTF8, rv.String())\n}\n\nfunc (f *encFnInfo) kFloat64(rv reflect.Value) {\n\tf.e.e.EncodeFloat64(rv.Float())\n}\n\nfunc (f *encFnInfo) kFloat32(rv reflect.Value) {\n\tf.e.e.EncodeFloat32(float32(rv.Float()))\n}\n\nfunc (f *encFnInfo) kInt(rv reflect.Value) {\n\tf.e.e.EncodeInt(rv.Int())\n}\n\nfunc (f *encFnInfo) kUint(rv reflect.Value) {\n\tf.e.e.EncodeUint(rv.Uint())\n}\n\nfunc (f *encFnInfo) kInvalid(rv reflect.Value) {\n\tf.e.e.EncodeNil()\n}\n\nfunc (f *encFnInfo) kErr(rv reflect.Value) {\n\tf.e.errorf(\"unsupported kind %s, for %#v\", rv.Kind(), rv)\n}\n\nfunc (f *encFnInfo) kSlice(rv reflect.Value) {\n\tti := f.ti\n\t// array may be non-addressable, so we have to manage with care\n\t//   (don't call rv.Bytes, rv.Slice, etc).\n\t// E.g. type struct S{B [2]byte};\n\t//   Encode(S{}) will bomb on \"panic: slice of unaddressable array\".\n\te := f.e\n\tif f.seq != seqTypeArray {\n\t\tif rv.IsNil() {\n\t\t\te.e.EncodeNil()\n\t\t\treturn\n\t\t}\n\t\t// If in this method, then there was no extension function defined.\n\t\t// So it's okay to treat as []byte.\n\t\tif ti.rtid == uint8SliceTypId {\n\t\t\te.e.EncodeStringBytes(c_RAW, rv.Bytes())\n\t\t\treturn\n\t\t}\n\t}\n\tcr := e.cr\n\trtelem := ti.rt.Elem()\n\tl := rv.Len()\n\tif ti.rtid == uint8SliceTypId || rtelem.Kind() == reflect.Uint8 {\n\t\tswitch f.seq {\n\t\tcase seqTypeArray:\n\t\t\t// if l == 0 { e.e.encodeStringBytes(c_RAW, nil) } else\n\t\t\tif rv.CanAddr() {\n\t\t\t\te.e.EncodeStringBytes(c_RAW, rv.Slice(0, l).Bytes())\n\t\t\t} else {\n\t\t\t\tvar bs []byte\n\t\t\t\tif l <= cap(e.b) {\n\t\t\t\t\tbs = e.b[:l]\n\t\t\t\t} else {\n\t\t\t\t\tbs = make([]byte, l)\n\t\t\t\t}\n\t\t\t\treflect.Copy(reflect.ValueOf(bs), rv)\n\t\t\t\t// TODO: Test that reflect.Copy works instead of manual one-by-one\n\t\t\t\t// for i := 0; i < l; i++ {\n\t\t\t\t// \tbs[i] = byte(rv.Index(i).Uint())\n\t\t\t\t// }\n\t\t\t\te.e.EncodeStringBytes(c_RAW, bs)\n\t\t\t}\n\t\tcase seqTypeSlice:\n\t\t\te.e.EncodeStringBytes(c_RAW, rv.Bytes())\n\t\tcase seqTypeChan:\n\t\t\tbs := e.b[:0]\n\t\t\t// do not use range, so that the number of elements encoded\n\t\t\t// does not change, and encoding does not hang waiting on someone to close chan.\n\t\t\t// for b := range rv.Interface().(<-chan byte) {\n\t\t\t// \tbs = append(bs, b)\n\t\t\t// }\n\t\t\tch := rv.Interface().(<-chan byte)\n\t\t\tfor i := 0; i < l; i++ {\n\t\t\t\tbs = append(bs, <-ch)\n\t\t\t}\n\t\t\te.e.EncodeStringBytes(c_RAW, bs)\n\t\t}\n\t\treturn\n\t}\n\n\tif ti.mbs {\n\t\tif l%2 == 1 {\n\t\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", l)\n\t\t\treturn\n\t\t}\n\t\te.e.EncodeMapStart(l / 2)\n\t} else {\n\t\te.e.EncodeArrayStart(l)\n\t}\n\n\tif l > 0 {\n\t\tfor rtelem.Kind() == reflect.Ptr {\n\t\t\trtelem = rtelem.Elem()\n\t\t}\n\t\t// if kind is reflect.Interface, do not pre-determine the\n\t\t// encoding type, because preEncodeValue may break it down to\n\t\t// a concrete type and kInterface will bomb.\n\t\tvar fn *encFn\n\t\tif rtelem.Kind() != reflect.Interface {\n\t\t\trtelemid := reflect.ValueOf(rtelem).Pointer()\n\t\t\tfn = e.getEncFn(rtelemid, rtelem, true, true)\n\t\t}\n\t\t// TODO: Consider perf implication of encoding odd index values as symbols if type is string\n\t\tfor j := 0; j < l; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tif ti.mbs {\n\t\t\t\t\tif j%2 == 0 {\n\t\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif f.seq == seqTypeChan {\n\t\t\t\tif rv2, ok2 := rv.Recv(); ok2 {\n\t\t\t\t\te.encodeValue(rv2, fn)\n\t\t\t\t} else {\n\t\t\t\t\te.encode(nil) // WE HAVE TO DO SOMETHING, so nil if nothing received.\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\te.encodeValue(rv.Index(j), fn)\n\t\t\t}\n\t\t}\n\t}\n\n\tif cr != nil {\n\t\tif ti.mbs {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t} else {\n\t\t\tcr.sendContainerState(containerArrayEnd)\n\t\t}\n\t}\n}\n\nfunc (f *encFnInfo) kStruct(rv reflect.Value) {\n\tfti := f.ti\n\te := f.e\n\tcr := e.cr\n\ttisfi := fti.sfip\n\ttoMap := !(fti.toArray || e.h.StructToArray)\n\tnewlen := len(fti.sfi)\n\n\t// Use sync.Pool to reduce allocating slices unnecessarily.\n\t// The cost of sync.Pool is less than the cost of new allocation.\n\tpool, poolv, fkvs := encStructPoolGet(newlen)\n\n\t// if toMap, use the sorted array. If toArray, use unsorted array (to match sequence in struct)\n\tif toMap {\n\t\ttisfi = fti.sfi\n\t}\n\tnewlen = 0\n\tvar kv stringRv\n\trecur := e.h.RecursiveEmptyCheck\n\tfor _, si := range tisfi {\n\t\tkv.r = si.field(rv, false)\n\t\tif toMap {\n\t\t\tif si.omitEmpty && isEmptyValue(kv.r, recur, recur) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tkv.v = si.encName\n\t\t} else {\n\t\t\t// use the zero value.\n\t\t\t// if a reference or struct, set to nil (so you do not output too much)\n\t\t\tif si.omitEmpty && isEmptyValue(kv.r, recur, recur) {\n\t\t\t\tswitch kv.r.Kind() {\n\t\t\t\tcase reflect.Struct, reflect.Interface, reflect.Ptr, reflect.Array, reflect.Map, reflect.Slice:\n\t\t\t\t\tkv.r = reflect.Value{} //encode as nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfkvs[newlen] = kv\n\t\tnewlen++\n\t}\n\n\t// debugf(\">>>> kStruct: newlen: %v\", newlen)\n\t// sep := !e.be\n\tee := e.e //don't dereference every time\n\n\tif toMap {\n\t\tee.EncodeMapStart(newlen)\n\t\t// asSymbols := e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0\n\t\tasSymbols := e.h.AsSymbols == AsSymbolDefault || e.h.AsSymbols&AsSymbolStructFieldNameFlag != 0\n\t\tfor j := 0; j < newlen; j++ {\n\t\t\tkv = fkvs[j]\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(kv.v)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, kv.v)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encodeValue(kv.r, nil)\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t}\n\t} else {\n\t\tee.EncodeArrayStart(newlen)\n\t\tfor j := 0; j < newlen; j++ {\n\t\t\tkv = fkvs[j]\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t\t}\n\t\t\te.encodeValue(kv.r, nil)\n\t\t}\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayEnd)\n\t\t}\n\t}\n\n\t// do not use defer. Instead, use explicit pool return at end of function.\n\t// defer has a cost we are trying to avoid.\n\t// If there is a panic and these slices are not returned, it is ok.\n\tif pool != nil {\n\t\tpool.Put(poolv)\n\t}\n}\n\n// func (f *encFnInfo) kPtr(rv reflect.Value) {\n// \tdebugf(\">>>>>>> ??? encode kPtr called - shouldn't get called\")\n// \tif rv.IsNil() {\n// \t\tf.e.e.encodeNil()\n// \t\treturn\n// \t}\n// \tf.e.encodeValue(rv.Elem())\n// }\n\n// func (f *encFnInfo) kInterface(rv reflect.Value) {\n// \tprintln(\"kInterface called\")\n// \tdebug.PrintStack()\n// \tif rv.IsNil() {\n// \t\tf.e.e.EncodeNil()\n// \t\treturn\n// \t}\n// \tf.e.encodeValue(rv.Elem(), nil)\n// }\n\nfunc (f *encFnInfo) kMap(rv reflect.Value) {\n\tee := f.e.e\n\tif rv.IsNil() {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\n\tl := rv.Len()\n\tee.EncodeMapStart(l)\n\te := f.e\n\tcr := e.cr\n\tif l == 0 {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerMapEnd)\n\t\t}\n\t\treturn\n\t}\n\tvar asSymbols bool\n\t// determine the underlying key and val encFn's for the map.\n\t// This eliminates some work which is done for each loop iteration i.e.\n\t// rv.Type(), ref.ValueOf(rt).Pointer(), then check map/list for fn.\n\t//\n\t// However, if kind is reflect.Interface, do not pre-determine the\n\t// encoding type, because preEncodeValue may break it down to\n\t// a concrete type and kInterface will bomb.\n\tvar keyFn, valFn *encFn\n\tti := f.ti\n\trtkey := ti.rt.Key()\n\trtval := ti.rt.Elem()\n\trtkeyid := reflect.ValueOf(rtkey).Pointer()\n\t// keyTypeIsString := f.ti.rt.Key().Kind() == reflect.String\n\tvar keyTypeIsString = rtkeyid == stringTypId\n\tif keyTypeIsString {\n\t\tasSymbols = e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\t} else {\n\t\tfor rtkey.Kind() == reflect.Ptr {\n\t\t\trtkey = rtkey.Elem()\n\t\t}\n\t\tif rtkey.Kind() != reflect.Interface {\n\t\t\trtkeyid = reflect.ValueOf(rtkey).Pointer()\n\t\t\tkeyFn = e.getEncFn(rtkeyid, rtkey, true, true)\n\t\t}\n\t}\n\tfor rtval.Kind() == reflect.Ptr {\n\t\trtval = rtval.Elem()\n\t}\n\tif rtval.Kind() != reflect.Interface {\n\t\trtvalid := reflect.ValueOf(rtval).Pointer()\n\t\tvalFn = e.getEncFn(rtvalid, rtval, true, true)\n\t}\n\tmks := rv.MapKeys()\n\t// for j, lmks := 0, len(mks); j < lmks; j++ {\n\n\tif e.h.Canonical {\n\t\te.kMapCanonical(rtkeyid, rtkey, rv, mks, valFn, asSymbols)\n\t} else {\n\t\tfor j := range mks {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif keyTypeIsString {\n\t\t\t\tif asSymbols {\n\t\t\t\t\tee.EncodeSymbol(mks[j].String())\n\t\t\t\t} else {\n\t\t\t\t\tee.EncodeString(c_UTF8, mks[j].String())\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\te.encodeValue(mks[j], keyFn)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encodeValue(rv.MapIndex(mks[j]), valFn)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (e *Encoder) kMapCanonical(rtkeyid uintptr, rtkey reflect.Type, rv reflect.Value, mks []reflect.Value, valFn *encFn, asSymbols bool) {\n\tee := e.e\n\tcr := e.cr\n\t// we previously did out-of-band if an extension was registered.\n\t// This is not necessary, as the natural kind is sufficient for ordering.\n\n\tif rtkeyid == uint8SliceTypId {\n\t\tmksv := make([]bytesRv, len(mks))\n\t\tfor i, k := range mks {\n\t\t\tv := &mksv[i]\n\t\t\tv.r = k\n\t\t\tv.v = k.Bytes()\n\t\t}\n\t\tsort.Sort(bytesRvSlice(mksv))\n\t\tfor i := range mksv {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeStringBytes(c_RAW, mksv[i].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t}\n\t} else {\n\t\tswitch rtkey.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tmksv := make([]boolRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.Bool()\n\t\t\t}\n\t\t\tsort.Sort(boolRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tee.EncodeBool(mksv[i].v)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tcase reflect.String:\n\t\t\tmksv := make([]stringRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.String()\n\t\t\t}\n\t\t\tsort.Sort(stringRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tif asSymbols {\n\t\t\t\t\tee.EncodeSymbol(mksv[i].v)\n\t\t\t\t} else {\n\t\t\t\t\tee.EncodeString(c_UTF8, mksv[i].v)\n\t\t\t\t}\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr:\n\t\t\tmksv := make([]uintRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.Uint()\n\t\t\t}\n\t\t\tsort.Sort(uintRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tee.EncodeUint(mksv[i].v)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\t\tmksv := make([]intRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.Int()\n\t\t\t}\n\t\t\tsort.Sort(intRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tee.EncodeInt(mksv[i].v)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tcase reflect.Float32:\n\t\t\tmksv := make([]floatRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.Float()\n\t\t\t}\n\t\t\tsort.Sort(floatRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tee.EncodeFloat32(float32(mksv[i].v))\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tcase reflect.Float64:\n\t\t\tmksv := make([]floatRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksv[i]\n\t\t\t\tv.r = k\n\t\t\t\tv.v = k.Float()\n\t\t\t}\n\t\t\tsort.Sort(floatRvSlice(mksv))\n\t\t\tfor i := range mksv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\tee.EncodeFloat64(mksv[i].v)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksv[i].r), valFn)\n\t\t\t}\n\t\tdefault:\n\t\t\t// out-of-band\n\t\t\t// first encode each key to a []byte first, then sort them, then record\n\t\t\tvar mksv []byte = make([]byte, 0, len(mks)*16) // temporary byte slice for the encoding\n\t\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\t\tmksbv := make([]bytesRv, len(mks))\n\t\t\tfor i, k := range mks {\n\t\t\t\tv := &mksbv[i]\n\t\t\t\tl := len(mksv)\n\t\t\t\te2.MustEncode(k)\n\t\t\t\tv.r = k\n\t\t\t\tv.v = mksv[l:]\n\t\t\t\t// fmt.Printf(\">>>>> %s\\n\", mksv[l:])\n\t\t\t}\n\t\t\tsort.Sort(bytesRvSlice(mksbv))\n\t\t\tfor j := range mksbv {\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t\t}\n\t\t\t\te.asis(mksbv[j].v)\n\t\t\t\tif cr != nil {\n\t\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t\t}\n\t\t\t\te.encodeValue(rv.MapIndex(mksbv[j].r), valFn)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// --------------------------------------------------\n\n// encFn encapsulates the captured variables and the encode function.\n// This way, we only do some calculations one times, and pass to the\n// code block that should be called (encapsulated in a function)\n// instead of executing the checks every time.\ntype encFn struct {\n\ti encFnInfo\n\tf func(*encFnInfo, reflect.Value)\n}\n\n// --------------------------------------------------\n\ntype encRtidFn struct {\n\trtid uintptr\n\tfn   encFn\n}\n\n// An Encoder writes an object to an output stream in the codec format.\ntype Encoder struct {\n\t// hopefully, reduce derefencing cost by laying the encWriter inside the Encoder\n\te encDriver\n\t// NOTE: Encoder shouldn't call it's write methods,\n\t// as the handler MAY need to do some coordination.\n\tw  encWriter\n\ts  []encRtidFn\n\tci set\n\tbe bool // is binary encoding\n\tjs bool // is json handle\n\n\twi ioEncWriter\n\twb bytesEncWriter\n\n\th  *BasicHandle\n\thh Handle\n\n\tcr containerStateRecv\n\tas encDriverAsis\n\n\tf map[uintptr]*encFn\n\tb [scratchByteArrayLen]byte\n}\n\n// NewEncoder returns an Encoder for encoding into an io.Writer.\n//\n// For efficiency, Users are encouraged to pass in a memory buffered writer\n// (eg bufio.Writer, bytes.Buffer).\nfunc NewEncoder(w io.Writer, h Handle) *Encoder {\n\te := newEncoder(h)\n\te.Reset(w)\n\treturn e\n}\n\n// NewEncoderBytes returns an encoder for encoding directly and efficiently\n// into a byte slice, using zero-copying to temporary slices.\n//\n// It will potentially replace the output byte slice pointed to.\n// After encoding, the out parameter contains the encoded contents.\nfunc NewEncoderBytes(out *[]byte, h Handle) *Encoder {\n\te := newEncoder(h)\n\te.ResetBytes(out)\n\treturn e\n}\n\nfunc newEncoder(h Handle) *Encoder {\n\te := &Encoder{hh: h, h: h.getBasicHandle(), be: h.isBinary()}\n\t_, e.js = h.(*JsonHandle)\n\te.e = h.newEncDriver(e)\n\te.as, _ = e.e.(encDriverAsis)\n\te.cr, _ = e.e.(containerStateRecv)\n\treturn e\n}\n\n// Reset the Encoder with a new output stream.\n//\n// This accommodates using the state of the Encoder,\n// where it has \"cached\" information about sub-engines.\nfunc (e *Encoder) Reset(w io.Writer) {\n\tww, ok := w.(ioEncWriterWriter)\n\tif ok {\n\t\te.wi.w = ww\n\t} else {\n\t\tsww := &e.wi.s\n\t\tsww.w = w\n\t\tsww.bw, _ = w.(io.ByteWriter)\n\t\tsww.sw, _ = w.(ioEncStringWriter)\n\t\te.wi.w = sww\n\t\t//ww = bufio.NewWriterSize(w, defEncByteBufSize)\n\t}\n\te.w = &e.wi\n\te.e.reset()\n}\n\nfunc (e *Encoder) ResetBytes(out *[]byte) {\n\tin := *out\n\tif in == nil {\n\t\tin = make([]byte, defEncByteBufSize)\n\t}\n\te.wb.b, e.wb.out, e.wb.c = in, out, 0\n\te.w = &e.wb\n\te.e.reset()\n}\n\n// func (e *Encoder) sendContainerState(c containerState) {\n// \tif e.cr != nil {\n// \t\te.cr.sendContainerState(c)\n// \t}\n// }\n\n// Encode writes an object into a stream.\n//\n// Encoding can be configured via the struct tag for the fields.\n// The \"codec\" key in struct field's tag value is the key name,\n// followed by an optional comma and options.\n// Note that the \"json\" key is used in the absence of the \"codec\" key.\n//\n// To set an option on all fields (e.g. omitempty on all fields), you\n// can create a field called _struct, and set flags on it.\n//\n// Struct values \"usually\" encode as maps. Each exported struct field is encoded unless:\n//    - the field's tag is \"-\", OR\n//    - the field is empty (empty or the zero value) and its tag specifies the \"omitempty\" option.\n//\n// When encoding as a map, the first string in the tag (before the comma)\n// is the map key string to use when encoding.\n//\n// However, struct values may encode as arrays. This happens when:\n//    - StructToArray Encode option is set, OR\n//    - the tag on the _struct field sets the \"toarray\" option\n//\n// Values with types that implement MapBySlice are encoded as stream maps.\n//\n// The empty values (for omitempty option) are false, 0, any nil pointer\n// or interface value, and any array, slice, map, or string of length zero.\n//\n// Anonymous fields are encoded inline except:\n//    - the struct tag specifies a replacement name (first value)\n//    - the field is of an interface type\n//\n// Examples:\n//\n//      // NOTE: 'json:' can be used as struct tag key, in place 'codec:' below.\n//      type MyStruct struct {\n//          _struct bool    `codec:\",omitempty\"`   //set omitempty for every field\n//          Field1 string   `codec:\"-\"`            //skip this field\n//          Field2 int      `codec:\"myName\"`       //Use key \"myName\" in encode stream\n//          Field3 int32    `codec:\",omitempty\"`   //use key \"Field3\". Omit if empty.\n//          Field4 bool     `codec:\"f4,omitempty\"` //use key \"f4\". Omit if empty.\n//          io.Reader                              //use key \"Reader\".\n//          MyStruct        `codec:\"my1\"           //use key \"my1\".\n//          MyStruct                               //inline it\n//          ...\n//      }\n//\n//      type MyStruct struct {\n//          _struct bool    `codec:\",omitempty,toarray\"`   //set omitempty for every field\n//                                                         //and encode struct as an array\n//      }\n//\n// The mode of encoding is based on the type of the value. When a value is seen:\n//   - If a Selfer, call its CodecEncodeSelf method\n//   - If an extension is registered for it, call that extension function\n//   - If it implements encoding.(Binary|Text|JSON)Marshaler, call its Marshal(Binary|Text|JSON) method\n//   - Else encode it based on its reflect.Kind\n//\n// Note that struct field names and keys in map[string]XXX will be treated as symbols.\n// Some formats support symbols (e.g. binc) and will properly encode the string\n// only once in the stream, and use a tag to refer to it thereafter.\nfunc (e *Encoder) Encode(v interface{}) (err error) {\n\tdefer panicToErr(&err)\n\te.encode(v)\n\te.w.atEndOfEncode()\n\treturn\n}\n\n// MustEncode is like Encode, but panics if unable to Encode.\n// This provides insight to the code location that triggered the error.\nfunc (e *Encoder) MustEncode(v interface{}) {\n\te.encode(v)\n\te.w.atEndOfEncode()\n}\n\nfunc (e *Encoder) encode(iv interface{}) {\n\t// if ics, ok := iv.(Selfer); ok {\n\t// \tics.CodecEncodeSelf(e)\n\t// \treturn\n\t// }\n\n\tswitch v := iv.(type) {\n\tcase nil:\n\t\te.e.EncodeNil()\n\tcase Selfer:\n\t\tv.CodecEncodeSelf(e)\n\tcase Raw:\n\t\te.raw(v)\n\tcase reflect.Value:\n\t\te.encodeValue(v, nil)\n\n\tcase string:\n\t\te.e.EncodeString(c_UTF8, v)\n\tcase bool:\n\t\te.e.EncodeBool(v)\n\tcase int:\n\t\te.e.EncodeInt(int64(v))\n\tcase int8:\n\t\te.e.EncodeInt(int64(v))\n\tcase int16:\n\t\te.e.EncodeInt(int64(v))\n\tcase int32:\n\t\te.e.EncodeInt(int64(v))\n\tcase int64:\n\t\te.e.EncodeInt(v)\n\tcase uint:\n\t\te.e.EncodeUint(uint64(v))\n\tcase uint8:\n\t\te.e.EncodeUint(uint64(v))\n\tcase uint16:\n\t\te.e.EncodeUint(uint64(v))\n\tcase uint32:\n\t\te.e.EncodeUint(uint64(v))\n\tcase uint64:\n\t\te.e.EncodeUint(v)\n\tcase float32:\n\t\te.e.EncodeFloat32(v)\n\tcase float64:\n\t\te.e.EncodeFloat64(v)\n\n\tcase []uint8:\n\t\te.e.EncodeStringBytes(c_RAW, v)\n\n\tcase *string:\n\t\te.e.EncodeString(c_UTF8, *v)\n\tcase *bool:\n\t\te.e.EncodeBool(*v)\n\tcase *int:\n\t\te.e.EncodeInt(int64(*v))\n\tcase *int8:\n\t\te.e.EncodeInt(int64(*v))\n\tcase *int16:\n\t\te.e.EncodeInt(int64(*v))\n\tcase *int32:\n\t\te.e.EncodeInt(int64(*v))\n\tcase *int64:\n\t\te.e.EncodeInt(*v)\n\tcase *uint:\n\t\te.e.EncodeUint(uint64(*v))\n\tcase *uint8:\n\t\te.e.EncodeUint(uint64(*v))\n\tcase *uint16:\n\t\te.e.EncodeUint(uint64(*v))\n\tcase *uint32:\n\t\te.e.EncodeUint(uint64(*v))\n\tcase *uint64:\n\t\te.e.EncodeUint(*v)\n\tcase *float32:\n\t\te.e.EncodeFloat32(*v)\n\tcase *float64:\n\t\te.e.EncodeFloat64(*v)\n\n\tcase *[]uint8:\n\t\te.e.EncodeStringBytes(c_RAW, *v)\n\n\tdefault:\n\t\tconst checkCodecSelfer1 = true // in case T is passed, where *T is a Selfer, still checkCodecSelfer\n\t\tif !fastpathEncodeTypeSwitch(iv, e) {\n\t\t\te.encodeI(iv, false, checkCodecSelfer1)\n\t\t}\n\t}\n}\n\nfunc (e *Encoder) preEncodeValue(rv reflect.Value) (rv2 reflect.Value, sptr uintptr, proceed bool) {\n\t// use a goto statement instead of a recursive function for ptr/interface.\nTOP:\n\tswitch rv.Kind() {\n\tcase reflect.Ptr:\n\t\tif rv.IsNil() {\n\t\t\te.e.EncodeNil()\n\t\t\treturn\n\t\t}\n\t\trv = rv.Elem()\n\t\tif e.h.CheckCircularRef && rv.Kind() == reflect.Struct {\n\t\t\t// TODO: Movable pointers will be an issue here. Future problem.\n\t\t\tsptr = rv.UnsafeAddr()\n\t\t\tbreak TOP\n\t\t}\n\t\tgoto TOP\n\tcase reflect.Interface:\n\t\tif rv.IsNil() {\n\t\t\te.e.EncodeNil()\n\t\t\treturn\n\t\t}\n\t\trv = rv.Elem()\n\t\tgoto TOP\n\tcase reflect.Slice, reflect.Map:\n\t\tif rv.IsNil() {\n\t\t\te.e.EncodeNil()\n\t\t\treturn\n\t\t}\n\tcase reflect.Invalid, reflect.Func:\n\t\te.e.EncodeNil()\n\t\treturn\n\t}\n\n\tproceed = true\n\trv2 = rv\n\treturn\n}\n\nfunc (e *Encoder) doEncodeValue(rv reflect.Value, fn *encFn, sptr uintptr,\n\tcheckFastpath, checkCodecSelfer bool) {\n\tif sptr != 0 {\n\t\tif (&e.ci).add(sptr) {\n\t\t\te.errorf(\"circular reference found: # %d\", sptr)\n\t\t}\n\t}\n\tif fn == nil {\n\t\trt := rv.Type()\n\t\trtid := reflect.ValueOf(rt).Pointer()\n\t\t// fn = e.getEncFn(rtid, rt, true, true)\n\t\tfn = e.getEncFn(rtid, rt, checkFastpath, checkCodecSelfer)\n\t}\n\tfn.f(&fn.i, rv)\n\tif sptr != 0 {\n\t\t(&e.ci).remove(sptr)\n\t}\n}\n\nfunc (e *Encoder) encodeI(iv interface{}, checkFastpath, checkCodecSelfer bool) {\n\tif rv, sptr, proceed := e.preEncodeValue(reflect.ValueOf(iv)); proceed {\n\t\te.doEncodeValue(rv, nil, sptr, checkFastpath, checkCodecSelfer)\n\t}\n}\n\nfunc (e *Encoder) encodeValue(rv reflect.Value, fn *encFn) {\n\t// if a valid fn is passed, it MUST BE for the dereferenced type of rv\n\tif rv, sptr, proceed := e.preEncodeValue(rv); proceed {\n\t\te.doEncodeValue(rv, fn, sptr, true, true)\n\t}\n}\n\nfunc (e *Encoder) getEncFn(rtid uintptr, rt reflect.Type, checkFastpath, checkCodecSelfer bool) (fn *encFn) {\n\t// rtid := reflect.ValueOf(rt).Pointer()\n\tvar ok bool\n\tif useMapForCodecCache {\n\t\tfn, ok = e.f[rtid]\n\t} else {\n\t\tfor i := range e.s {\n\t\t\tv := &(e.s[i])\n\t\t\tif v.rtid == rtid {\n\t\t\t\tfn, ok = &(v.fn), true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif ok {\n\t\treturn\n\t}\n\n\tif useMapForCodecCache {\n\t\tif e.f == nil {\n\t\t\te.f = make(map[uintptr]*encFn, initCollectionCap)\n\t\t}\n\t\tfn = new(encFn)\n\t\te.f[rtid] = fn\n\t} else {\n\t\tif e.s == nil {\n\t\t\te.s = make([]encRtidFn, 0, initCollectionCap)\n\t\t}\n\t\te.s = append(e.s, encRtidFn{rtid: rtid})\n\t\tfn = &(e.s[len(e.s)-1]).fn\n\t}\n\n\tti := e.h.getTypeInfo(rtid, rt)\n\tfi := &(fn.i)\n\tfi.e = e\n\tfi.ti = ti\n\n\tif checkCodecSelfer && ti.cs {\n\t\tfn.f = (*encFnInfo).selferMarshal\n\t} else if rtid == rawTypId {\n\t\tfn.f = (*encFnInfo).raw\n\t} else if rtid == rawExtTypId {\n\t\tfn.f = (*encFnInfo).rawExt\n\t} else if e.e.IsBuiltinType(rtid) {\n\t\tfn.f = (*encFnInfo).builtin\n\t} else if xfFn := e.h.getExt(rtid); xfFn != nil {\n\t\tfi.xfTag, fi.xfFn = xfFn.tag, xfFn.ext\n\t\tfn.f = (*encFnInfo).ext\n\t} else if supportMarshalInterfaces && e.be && ti.bm {\n\t\tfn.f = (*encFnInfo).binaryMarshal\n\t} else if supportMarshalInterfaces && !e.be && e.js && ti.jm {\n\t\t//If JSON, we should check JSONMarshal before textMarshal\n\t\tfn.f = (*encFnInfo).jsonMarshal\n\t} else if supportMarshalInterfaces && !e.be && ti.tm {\n\t\tfn.f = (*encFnInfo).textMarshal\n\t} else {\n\t\trk := rt.Kind()\n\t\tif fastpathEnabled && checkFastpath && (rk == reflect.Map || rk == reflect.Slice) {\n\t\t\tif rt.PkgPath() == \"\" { // un-named slice or map\n\t\t\t\tif idx := fastpathAV.index(rtid); idx != -1 {\n\t\t\t\t\tfn.f = fastpathAV[idx].encfn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tok = false\n\t\t\t\t// use mapping for underlying type if there\n\t\t\t\tvar rtu reflect.Type\n\t\t\t\tif rk == reflect.Map {\n\t\t\t\t\trtu = reflect.MapOf(rt.Key(), rt.Elem())\n\t\t\t\t} else {\n\t\t\t\t\trtu = reflect.SliceOf(rt.Elem())\n\t\t\t\t}\n\t\t\t\trtuid := reflect.ValueOf(rtu).Pointer()\n\t\t\t\tif idx := fastpathAV.index(rtuid); idx != -1 {\n\t\t\t\t\txfnf := fastpathAV[idx].encfn\n\t\t\t\t\txrt := fastpathAV[idx].rt\n\t\t\t\t\tfn.f = func(xf *encFnInfo, xrv reflect.Value) {\n\t\t\t\t\t\txfnf(xf, xrv.Convert(xrt))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif fn.f == nil {\n\t\t\tswitch rk {\n\t\t\tcase reflect.Bool:\n\t\t\t\tfn.f = (*encFnInfo).kBool\n\t\t\tcase reflect.String:\n\t\t\t\tfn.f = (*encFnInfo).kString\n\t\t\tcase reflect.Float64:\n\t\t\t\tfn.f = (*encFnInfo).kFloat64\n\t\t\tcase reflect.Float32:\n\t\t\t\tfn.f = (*encFnInfo).kFloat32\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int64, reflect.Int32, reflect.Int16:\n\t\t\t\tfn.f = (*encFnInfo).kInt\n\t\t\tcase reflect.Uint8, reflect.Uint64, reflect.Uint, reflect.Uint32, reflect.Uint16, reflect.Uintptr:\n\t\t\t\tfn.f = (*encFnInfo).kUint\n\t\t\tcase reflect.Invalid:\n\t\t\t\tfn.f = (*encFnInfo).kInvalid\n\t\t\tcase reflect.Chan:\n\t\t\t\tfi.seq = seqTypeChan\n\t\t\t\tfn.f = (*encFnInfo).kSlice\n\t\t\tcase reflect.Slice:\n\t\t\t\tfi.seq = seqTypeSlice\n\t\t\t\tfn.f = (*encFnInfo).kSlice\n\t\t\tcase reflect.Array:\n\t\t\t\tfi.seq = seqTypeArray\n\t\t\t\tfn.f = (*encFnInfo).kSlice\n\t\t\tcase reflect.Struct:\n\t\t\t\tfn.f = (*encFnInfo).kStruct\n\t\t\t\t// reflect.Ptr and reflect.Interface are handled already by preEncodeValue\n\t\t\t\t// case reflect.Ptr:\n\t\t\t\t// \tfn.f = (*encFnInfo).kPtr\n\t\t\t\t// case reflect.Interface:\n\t\t\t\t// \tfn.f = (*encFnInfo).kInterface\n\t\t\tcase reflect.Map:\n\t\t\t\tfn.f = (*encFnInfo).kMap\n\t\t\tdefault:\n\t\t\t\tfn.f = (*encFnInfo).kErr\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (e *Encoder) marshal(bs []byte, fnerr error, asis bool, c charEncoding) {\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n\tif bs == nil {\n\t\te.e.EncodeNil()\n\t} else if asis {\n\t\te.asis(bs)\n\t} else {\n\t\te.e.EncodeStringBytes(c, bs)\n\t}\n}\n\nfunc (e *Encoder) asis(v []byte) {\n\tif e.as == nil {\n\t\te.w.writeb(v)\n\t} else {\n\t\te.as.EncodeAsis(v)\n\t}\n}\n\nfunc (e *Encoder) raw(vv Raw) {\n\tv := []byte(vv)\n\tif !e.h.Raw {\n\t\te.errorf(\"Raw values cannot be encoded: %v\", v)\n\t}\n\tif e.as == nil {\n\t\te.w.writeb(v)\n\t} else {\n\t\te.as.EncodeAsis(v)\n\t}\n}\n\nfunc (e *Encoder) errorf(format string, params ...interface{}) {\n\terr := fmt.Errorf(format, params...)\n\tpanic(err)\n}\n\n// ----------------------------------------\n\nconst encStructPoolLen = 5\n\n// encStructPool is an array of sync.Pool.\n// Each element of the array pools one of encStructPool(8|16|32|64).\n// It allows the re-use of slices up to 64 in length.\n// A performance cost of encoding structs was collecting\n// which values were empty and should be omitted.\n// We needed slices of reflect.Value and string to collect them.\n// This shared pool reduces the amount of unnecessary creation we do.\n// The cost is that of locking sometimes, but sync.Pool is efficient\n// enough to reduce thread contention.\nvar encStructPool [encStructPoolLen]sync.Pool\n\nfunc init() {\n\tencStructPool[0].New = func() interface{} { return new([8]stringRv) }\n\tencStructPool[1].New = func() interface{} { return new([16]stringRv) }\n\tencStructPool[2].New = func() interface{} { return new([32]stringRv) }\n\tencStructPool[3].New = func() interface{} { return new([64]stringRv) }\n\tencStructPool[4].New = func() interface{} { return new([128]stringRv) }\n}\n\nfunc encStructPoolGet(newlen int) (p *sync.Pool, v interface{}, s []stringRv) {\n\t// if encStructPoolLen != 5 { // constant chec, so removed at build time.\n\t// \tpanic(errors.New(\"encStructPoolLen must be equal to 4\")) // defensive, in case it is changed\n\t// }\n\t// idxpool := newlen / 8\n\tif newlen <= 8 {\n\t\tp = &encStructPool[0]\n\t\tv = p.Get()\n\t\ts = v.(*[8]stringRv)[:newlen]\n\t} else if newlen <= 16 {\n\t\tp = &encStructPool[1]\n\t\tv = p.Get()\n\t\ts = v.(*[16]stringRv)[:newlen]\n\t} else if newlen <= 32 {\n\t\tp = &encStructPool[2]\n\t\tv = p.Get()\n\t\ts = v.(*[32]stringRv)[:newlen]\n\t} else if newlen <= 64 {\n\t\tp = &encStructPool[3]\n\t\tv = p.Get()\n\t\ts = v.(*[64]stringRv)[:newlen]\n\t} else if newlen <= 128 {\n\t\tp = &encStructPool[4]\n\t\tv = p.Get()\n\t\ts = v.(*[128]stringRv)[:newlen]\n\t} else {\n\t\ts = make([]stringRv, newlen)\n\t}\n\treturn\n}\n\n// ----------------------------------------\n\n// func encErr(format string, params ...interface{}) {\n// \tdoPanic(msgTagEnc, format, params...)\n// }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/fast-path.generated.go",
    "content": "// +build !notfastpath\n\n// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// ************************************************************\n// DO NOT EDIT.\n// THIS FILE IS AUTO-GENERATED from fast-path.go.tmpl\n// ************************************************************\n\npackage codec\n\n// Fast path functions try to create a fast path encode or decode implementation\n// for common maps and slices.\n//\n// We define the functions and register then in this single file\n// so as not to pollute the encode.go and decode.go, and create a dependency in there.\n// This file can be omitted without causing a build failure.\n//\n// The advantage of fast paths is:\n//    - Many calls bypass reflection altogether\n//\n// Currently support\n//    - slice of all builtin types,\n//    - map of all builtin types to string or interface value\n//    - symmetrical maps of all builtin types (e.g. str-str, uint8-uint8)\n// This should provide adequate \"typical\" implementations.\n//\n// Note that fast track decode functions must handle values for which an address cannot be obtained.\n// For example:\n//   m2 := map[string]int{}\n//   p2 := []interface{}{m2}\n//   // decoding into p2 will bomb if fast track functions do not treat like unaddressable.\n//\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n)\n\nconst fastpathEnabled = true\n\nconst fastpathCheckNilFalse = false // for reflect\nconst fastpathCheckNilTrue = true   // for type switch\n\ntype fastpathT struct{}\n\nvar fastpathTV fastpathT\n\ntype fastpathE struct {\n\trtid  uintptr\n\trt    reflect.Type\n\tencfn func(*encFnInfo, reflect.Value)\n\tdecfn func(*decFnInfo, reflect.Value)\n}\n\ntype fastpathA [271]fastpathE\n\nfunc (x *fastpathA) index(rtid uintptr) int {\n\t// use binary search to grab the index (adapted from sort/search.go)\n\th, i, j := 0, 0, 271 // len(x)\n\tfor i < j {\n\t\th = i + (j-i)/2\n\t\tif x[h].rtid < rtid {\n\t\t\ti = h + 1\n\t\t} else {\n\t\t\tj = h\n\t\t}\n\t}\n\tif i < 271 && x[i].rtid == rtid {\n\t\treturn i\n\t}\n\treturn -1\n}\n\ntype fastpathAslice []fastpathE\n\nfunc (x fastpathAslice) Len() int           { return len(x) }\nfunc (x fastpathAslice) Less(i, j int) bool { return x[i].rtid < x[j].rtid }\nfunc (x fastpathAslice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }\n\nvar fastpathAV fastpathA\n\n// due to possible initialization loop error, make fastpath in an init()\nfunc init() {\n\ti := 0\n\tfn := func(v interface{}, fe func(*encFnInfo, reflect.Value), fd func(*decFnInfo, reflect.Value)) (f fastpathE) {\n\t\txrt := reflect.TypeOf(v)\n\t\txptr := reflect.ValueOf(xrt).Pointer()\n\t\tfastpathAV[i] = fastpathE{xptr, xrt, fe, fd}\n\t\ti++\n\t\treturn\n\t}\n\n\tfn([]interface{}(nil), (*encFnInfo).fastpathEncSliceIntfR, (*decFnInfo).fastpathDecSliceIntfR)\n\tfn([]string(nil), (*encFnInfo).fastpathEncSliceStringR, (*decFnInfo).fastpathDecSliceStringR)\n\tfn([]float32(nil), (*encFnInfo).fastpathEncSliceFloat32R, (*decFnInfo).fastpathDecSliceFloat32R)\n\tfn([]float64(nil), (*encFnInfo).fastpathEncSliceFloat64R, (*decFnInfo).fastpathDecSliceFloat64R)\n\tfn([]uint(nil), (*encFnInfo).fastpathEncSliceUintR, (*decFnInfo).fastpathDecSliceUintR)\n\tfn([]uint16(nil), (*encFnInfo).fastpathEncSliceUint16R, (*decFnInfo).fastpathDecSliceUint16R)\n\tfn([]uint32(nil), (*encFnInfo).fastpathEncSliceUint32R, (*decFnInfo).fastpathDecSliceUint32R)\n\tfn([]uint64(nil), (*encFnInfo).fastpathEncSliceUint64R, (*decFnInfo).fastpathDecSliceUint64R)\n\tfn([]uintptr(nil), (*encFnInfo).fastpathEncSliceUintptrR, (*decFnInfo).fastpathDecSliceUintptrR)\n\tfn([]int(nil), (*encFnInfo).fastpathEncSliceIntR, (*decFnInfo).fastpathDecSliceIntR)\n\tfn([]int8(nil), (*encFnInfo).fastpathEncSliceInt8R, (*decFnInfo).fastpathDecSliceInt8R)\n\tfn([]int16(nil), (*encFnInfo).fastpathEncSliceInt16R, (*decFnInfo).fastpathDecSliceInt16R)\n\tfn([]int32(nil), (*encFnInfo).fastpathEncSliceInt32R, (*decFnInfo).fastpathDecSliceInt32R)\n\tfn([]int64(nil), (*encFnInfo).fastpathEncSliceInt64R, (*decFnInfo).fastpathDecSliceInt64R)\n\tfn([]bool(nil), (*encFnInfo).fastpathEncSliceBoolR, (*decFnInfo).fastpathDecSliceBoolR)\n\n\tfn(map[interface{}]interface{}(nil), (*encFnInfo).fastpathEncMapIntfIntfR, (*decFnInfo).fastpathDecMapIntfIntfR)\n\tfn(map[interface{}]string(nil), (*encFnInfo).fastpathEncMapIntfStringR, (*decFnInfo).fastpathDecMapIntfStringR)\n\tfn(map[interface{}]uint(nil), (*encFnInfo).fastpathEncMapIntfUintR, (*decFnInfo).fastpathDecMapIntfUintR)\n\tfn(map[interface{}]uint8(nil), (*encFnInfo).fastpathEncMapIntfUint8R, (*decFnInfo).fastpathDecMapIntfUint8R)\n\tfn(map[interface{}]uint16(nil), (*encFnInfo).fastpathEncMapIntfUint16R, (*decFnInfo).fastpathDecMapIntfUint16R)\n\tfn(map[interface{}]uint32(nil), (*encFnInfo).fastpathEncMapIntfUint32R, (*decFnInfo).fastpathDecMapIntfUint32R)\n\tfn(map[interface{}]uint64(nil), (*encFnInfo).fastpathEncMapIntfUint64R, (*decFnInfo).fastpathDecMapIntfUint64R)\n\tfn(map[interface{}]uintptr(nil), (*encFnInfo).fastpathEncMapIntfUintptrR, (*decFnInfo).fastpathDecMapIntfUintptrR)\n\tfn(map[interface{}]int(nil), (*encFnInfo).fastpathEncMapIntfIntR, (*decFnInfo).fastpathDecMapIntfIntR)\n\tfn(map[interface{}]int8(nil), (*encFnInfo).fastpathEncMapIntfInt8R, (*decFnInfo).fastpathDecMapIntfInt8R)\n\tfn(map[interface{}]int16(nil), (*encFnInfo).fastpathEncMapIntfInt16R, (*decFnInfo).fastpathDecMapIntfInt16R)\n\tfn(map[interface{}]int32(nil), (*encFnInfo).fastpathEncMapIntfInt32R, (*decFnInfo).fastpathDecMapIntfInt32R)\n\tfn(map[interface{}]int64(nil), (*encFnInfo).fastpathEncMapIntfInt64R, (*decFnInfo).fastpathDecMapIntfInt64R)\n\tfn(map[interface{}]float32(nil), (*encFnInfo).fastpathEncMapIntfFloat32R, (*decFnInfo).fastpathDecMapIntfFloat32R)\n\tfn(map[interface{}]float64(nil), (*encFnInfo).fastpathEncMapIntfFloat64R, (*decFnInfo).fastpathDecMapIntfFloat64R)\n\tfn(map[interface{}]bool(nil), (*encFnInfo).fastpathEncMapIntfBoolR, (*decFnInfo).fastpathDecMapIntfBoolR)\n\tfn(map[string]interface{}(nil), (*encFnInfo).fastpathEncMapStringIntfR, (*decFnInfo).fastpathDecMapStringIntfR)\n\tfn(map[string]string(nil), (*encFnInfo).fastpathEncMapStringStringR, (*decFnInfo).fastpathDecMapStringStringR)\n\tfn(map[string]uint(nil), (*encFnInfo).fastpathEncMapStringUintR, (*decFnInfo).fastpathDecMapStringUintR)\n\tfn(map[string]uint8(nil), (*encFnInfo).fastpathEncMapStringUint8R, (*decFnInfo).fastpathDecMapStringUint8R)\n\tfn(map[string]uint16(nil), (*encFnInfo).fastpathEncMapStringUint16R, (*decFnInfo).fastpathDecMapStringUint16R)\n\tfn(map[string]uint32(nil), (*encFnInfo).fastpathEncMapStringUint32R, (*decFnInfo).fastpathDecMapStringUint32R)\n\tfn(map[string]uint64(nil), (*encFnInfo).fastpathEncMapStringUint64R, (*decFnInfo).fastpathDecMapStringUint64R)\n\tfn(map[string]uintptr(nil), (*encFnInfo).fastpathEncMapStringUintptrR, (*decFnInfo).fastpathDecMapStringUintptrR)\n\tfn(map[string]int(nil), (*encFnInfo).fastpathEncMapStringIntR, (*decFnInfo).fastpathDecMapStringIntR)\n\tfn(map[string]int8(nil), (*encFnInfo).fastpathEncMapStringInt8R, (*decFnInfo).fastpathDecMapStringInt8R)\n\tfn(map[string]int16(nil), (*encFnInfo).fastpathEncMapStringInt16R, (*decFnInfo).fastpathDecMapStringInt16R)\n\tfn(map[string]int32(nil), (*encFnInfo).fastpathEncMapStringInt32R, (*decFnInfo).fastpathDecMapStringInt32R)\n\tfn(map[string]int64(nil), (*encFnInfo).fastpathEncMapStringInt64R, (*decFnInfo).fastpathDecMapStringInt64R)\n\tfn(map[string]float32(nil), (*encFnInfo).fastpathEncMapStringFloat32R, (*decFnInfo).fastpathDecMapStringFloat32R)\n\tfn(map[string]float64(nil), (*encFnInfo).fastpathEncMapStringFloat64R, (*decFnInfo).fastpathDecMapStringFloat64R)\n\tfn(map[string]bool(nil), (*encFnInfo).fastpathEncMapStringBoolR, (*decFnInfo).fastpathDecMapStringBoolR)\n\tfn(map[float32]interface{}(nil), (*encFnInfo).fastpathEncMapFloat32IntfR, (*decFnInfo).fastpathDecMapFloat32IntfR)\n\tfn(map[float32]string(nil), (*encFnInfo).fastpathEncMapFloat32StringR, (*decFnInfo).fastpathDecMapFloat32StringR)\n\tfn(map[float32]uint(nil), (*encFnInfo).fastpathEncMapFloat32UintR, (*decFnInfo).fastpathDecMapFloat32UintR)\n\tfn(map[float32]uint8(nil), (*encFnInfo).fastpathEncMapFloat32Uint8R, (*decFnInfo).fastpathDecMapFloat32Uint8R)\n\tfn(map[float32]uint16(nil), (*encFnInfo).fastpathEncMapFloat32Uint16R, (*decFnInfo).fastpathDecMapFloat32Uint16R)\n\tfn(map[float32]uint32(nil), (*encFnInfo).fastpathEncMapFloat32Uint32R, (*decFnInfo).fastpathDecMapFloat32Uint32R)\n\tfn(map[float32]uint64(nil), (*encFnInfo).fastpathEncMapFloat32Uint64R, (*decFnInfo).fastpathDecMapFloat32Uint64R)\n\tfn(map[float32]uintptr(nil), (*encFnInfo).fastpathEncMapFloat32UintptrR, (*decFnInfo).fastpathDecMapFloat32UintptrR)\n\tfn(map[float32]int(nil), (*encFnInfo).fastpathEncMapFloat32IntR, (*decFnInfo).fastpathDecMapFloat32IntR)\n\tfn(map[float32]int8(nil), (*encFnInfo).fastpathEncMapFloat32Int8R, (*decFnInfo).fastpathDecMapFloat32Int8R)\n\tfn(map[float32]int16(nil), (*encFnInfo).fastpathEncMapFloat32Int16R, (*decFnInfo).fastpathDecMapFloat32Int16R)\n\tfn(map[float32]int32(nil), (*encFnInfo).fastpathEncMapFloat32Int32R, (*decFnInfo).fastpathDecMapFloat32Int32R)\n\tfn(map[float32]int64(nil), (*encFnInfo).fastpathEncMapFloat32Int64R, (*decFnInfo).fastpathDecMapFloat32Int64R)\n\tfn(map[float32]float32(nil), (*encFnInfo).fastpathEncMapFloat32Float32R, (*decFnInfo).fastpathDecMapFloat32Float32R)\n\tfn(map[float32]float64(nil), (*encFnInfo).fastpathEncMapFloat32Float64R, (*decFnInfo).fastpathDecMapFloat32Float64R)\n\tfn(map[float32]bool(nil), (*encFnInfo).fastpathEncMapFloat32BoolR, (*decFnInfo).fastpathDecMapFloat32BoolR)\n\tfn(map[float64]interface{}(nil), (*encFnInfo).fastpathEncMapFloat64IntfR, (*decFnInfo).fastpathDecMapFloat64IntfR)\n\tfn(map[float64]string(nil), (*encFnInfo).fastpathEncMapFloat64StringR, (*decFnInfo).fastpathDecMapFloat64StringR)\n\tfn(map[float64]uint(nil), (*encFnInfo).fastpathEncMapFloat64UintR, (*decFnInfo).fastpathDecMapFloat64UintR)\n\tfn(map[float64]uint8(nil), (*encFnInfo).fastpathEncMapFloat64Uint8R, (*decFnInfo).fastpathDecMapFloat64Uint8R)\n\tfn(map[float64]uint16(nil), (*encFnInfo).fastpathEncMapFloat64Uint16R, (*decFnInfo).fastpathDecMapFloat64Uint16R)\n\tfn(map[float64]uint32(nil), (*encFnInfo).fastpathEncMapFloat64Uint32R, (*decFnInfo).fastpathDecMapFloat64Uint32R)\n\tfn(map[float64]uint64(nil), (*encFnInfo).fastpathEncMapFloat64Uint64R, (*decFnInfo).fastpathDecMapFloat64Uint64R)\n\tfn(map[float64]uintptr(nil), (*encFnInfo).fastpathEncMapFloat64UintptrR, (*decFnInfo).fastpathDecMapFloat64UintptrR)\n\tfn(map[float64]int(nil), (*encFnInfo).fastpathEncMapFloat64IntR, (*decFnInfo).fastpathDecMapFloat64IntR)\n\tfn(map[float64]int8(nil), (*encFnInfo).fastpathEncMapFloat64Int8R, (*decFnInfo).fastpathDecMapFloat64Int8R)\n\tfn(map[float64]int16(nil), (*encFnInfo).fastpathEncMapFloat64Int16R, (*decFnInfo).fastpathDecMapFloat64Int16R)\n\tfn(map[float64]int32(nil), (*encFnInfo).fastpathEncMapFloat64Int32R, (*decFnInfo).fastpathDecMapFloat64Int32R)\n\tfn(map[float64]int64(nil), (*encFnInfo).fastpathEncMapFloat64Int64R, (*decFnInfo).fastpathDecMapFloat64Int64R)\n\tfn(map[float64]float32(nil), (*encFnInfo).fastpathEncMapFloat64Float32R, (*decFnInfo).fastpathDecMapFloat64Float32R)\n\tfn(map[float64]float64(nil), (*encFnInfo).fastpathEncMapFloat64Float64R, (*decFnInfo).fastpathDecMapFloat64Float64R)\n\tfn(map[float64]bool(nil), (*encFnInfo).fastpathEncMapFloat64BoolR, (*decFnInfo).fastpathDecMapFloat64BoolR)\n\tfn(map[uint]interface{}(nil), (*encFnInfo).fastpathEncMapUintIntfR, (*decFnInfo).fastpathDecMapUintIntfR)\n\tfn(map[uint]string(nil), (*encFnInfo).fastpathEncMapUintStringR, (*decFnInfo).fastpathDecMapUintStringR)\n\tfn(map[uint]uint(nil), (*encFnInfo).fastpathEncMapUintUintR, (*decFnInfo).fastpathDecMapUintUintR)\n\tfn(map[uint]uint8(nil), (*encFnInfo).fastpathEncMapUintUint8R, (*decFnInfo).fastpathDecMapUintUint8R)\n\tfn(map[uint]uint16(nil), (*encFnInfo).fastpathEncMapUintUint16R, (*decFnInfo).fastpathDecMapUintUint16R)\n\tfn(map[uint]uint32(nil), (*encFnInfo).fastpathEncMapUintUint32R, (*decFnInfo).fastpathDecMapUintUint32R)\n\tfn(map[uint]uint64(nil), (*encFnInfo).fastpathEncMapUintUint64R, (*decFnInfo).fastpathDecMapUintUint64R)\n\tfn(map[uint]uintptr(nil), (*encFnInfo).fastpathEncMapUintUintptrR, (*decFnInfo).fastpathDecMapUintUintptrR)\n\tfn(map[uint]int(nil), (*encFnInfo).fastpathEncMapUintIntR, (*decFnInfo).fastpathDecMapUintIntR)\n\tfn(map[uint]int8(nil), (*encFnInfo).fastpathEncMapUintInt8R, (*decFnInfo).fastpathDecMapUintInt8R)\n\tfn(map[uint]int16(nil), (*encFnInfo).fastpathEncMapUintInt16R, (*decFnInfo).fastpathDecMapUintInt16R)\n\tfn(map[uint]int32(nil), (*encFnInfo).fastpathEncMapUintInt32R, (*decFnInfo).fastpathDecMapUintInt32R)\n\tfn(map[uint]int64(nil), (*encFnInfo).fastpathEncMapUintInt64R, (*decFnInfo).fastpathDecMapUintInt64R)\n\tfn(map[uint]float32(nil), (*encFnInfo).fastpathEncMapUintFloat32R, (*decFnInfo).fastpathDecMapUintFloat32R)\n\tfn(map[uint]float64(nil), (*encFnInfo).fastpathEncMapUintFloat64R, (*decFnInfo).fastpathDecMapUintFloat64R)\n\tfn(map[uint]bool(nil), (*encFnInfo).fastpathEncMapUintBoolR, (*decFnInfo).fastpathDecMapUintBoolR)\n\tfn(map[uint8]interface{}(nil), (*encFnInfo).fastpathEncMapUint8IntfR, (*decFnInfo).fastpathDecMapUint8IntfR)\n\tfn(map[uint8]string(nil), (*encFnInfo).fastpathEncMapUint8StringR, (*decFnInfo).fastpathDecMapUint8StringR)\n\tfn(map[uint8]uint(nil), (*encFnInfo).fastpathEncMapUint8UintR, (*decFnInfo).fastpathDecMapUint8UintR)\n\tfn(map[uint8]uint8(nil), (*encFnInfo).fastpathEncMapUint8Uint8R, (*decFnInfo).fastpathDecMapUint8Uint8R)\n\tfn(map[uint8]uint16(nil), (*encFnInfo).fastpathEncMapUint8Uint16R, (*decFnInfo).fastpathDecMapUint8Uint16R)\n\tfn(map[uint8]uint32(nil), (*encFnInfo).fastpathEncMapUint8Uint32R, (*decFnInfo).fastpathDecMapUint8Uint32R)\n\tfn(map[uint8]uint64(nil), (*encFnInfo).fastpathEncMapUint8Uint64R, (*decFnInfo).fastpathDecMapUint8Uint64R)\n\tfn(map[uint8]uintptr(nil), (*encFnInfo).fastpathEncMapUint8UintptrR, (*decFnInfo).fastpathDecMapUint8UintptrR)\n\tfn(map[uint8]int(nil), (*encFnInfo).fastpathEncMapUint8IntR, (*decFnInfo).fastpathDecMapUint8IntR)\n\tfn(map[uint8]int8(nil), (*encFnInfo).fastpathEncMapUint8Int8R, (*decFnInfo).fastpathDecMapUint8Int8R)\n\tfn(map[uint8]int16(nil), (*encFnInfo).fastpathEncMapUint8Int16R, (*decFnInfo).fastpathDecMapUint8Int16R)\n\tfn(map[uint8]int32(nil), (*encFnInfo).fastpathEncMapUint8Int32R, (*decFnInfo).fastpathDecMapUint8Int32R)\n\tfn(map[uint8]int64(nil), (*encFnInfo).fastpathEncMapUint8Int64R, (*decFnInfo).fastpathDecMapUint8Int64R)\n\tfn(map[uint8]float32(nil), (*encFnInfo).fastpathEncMapUint8Float32R, (*decFnInfo).fastpathDecMapUint8Float32R)\n\tfn(map[uint8]float64(nil), (*encFnInfo).fastpathEncMapUint8Float64R, (*decFnInfo).fastpathDecMapUint8Float64R)\n\tfn(map[uint8]bool(nil), (*encFnInfo).fastpathEncMapUint8BoolR, (*decFnInfo).fastpathDecMapUint8BoolR)\n\tfn(map[uint16]interface{}(nil), (*encFnInfo).fastpathEncMapUint16IntfR, (*decFnInfo).fastpathDecMapUint16IntfR)\n\tfn(map[uint16]string(nil), (*encFnInfo).fastpathEncMapUint16StringR, (*decFnInfo).fastpathDecMapUint16StringR)\n\tfn(map[uint16]uint(nil), (*encFnInfo).fastpathEncMapUint16UintR, (*decFnInfo).fastpathDecMapUint16UintR)\n\tfn(map[uint16]uint8(nil), (*encFnInfo).fastpathEncMapUint16Uint8R, (*decFnInfo).fastpathDecMapUint16Uint8R)\n\tfn(map[uint16]uint16(nil), (*encFnInfo).fastpathEncMapUint16Uint16R, (*decFnInfo).fastpathDecMapUint16Uint16R)\n\tfn(map[uint16]uint32(nil), (*encFnInfo).fastpathEncMapUint16Uint32R, (*decFnInfo).fastpathDecMapUint16Uint32R)\n\tfn(map[uint16]uint64(nil), (*encFnInfo).fastpathEncMapUint16Uint64R, (*decFnInfo).fastpathDecMapUint16Uint64R)\n\tfn(map[uint16]uintptr(nil), (*encFnInfo).fastpathEncMapUint16UintptrR, (*decFnInfo).fastpathDecMapUint16UintptrR)\n\tfn(map[uint16]int(nil), (*encFnInfo).fastpathEncMapUint16IntR, (*decFnInfo).fastpathDecMapUint16IntR)\n\tfn(map[uint16]int8(nil), (*encFnInfo).fastpathEncMapUint16Int8R, (*decFnInfo).fastpathDecMapUint16Int8R)\n\tfn(map[uint16]int16(nil), (*encFnInfo).fastpathEncMapUint16Int16R, (*decFnInfo).fastpathDecMapUint16Int16R)\n\tfn(map[uint16]int32(nil), (*encFnInfo).fastpathEncMapUint16Int32R, (*decFnInfo).fastpathDecMapUint16Int32R)\n\tfn(map[uint16]int64(nil), (*encFnInfo).fastpathEncMapUint16Int64R, (*decFnInfo).fastpathDecMapUint16Int64R)\n\tfn(map[uint16]float32(nil), (*encFnInfo).fastpathEncMapUint16Float32R, (*decFnInfo).fastpathDecMapUint16Float32R)\n\tfn(map[uint16]float64(nil), (*encFnInfo).fastpathEncMapUint16Float64R, (*decFnInfo).fastpathDecMapUint16Float64R)\n\tfn(map[uint16]bool(nil), (*encFnInfo).fastpathEncMapUint16BoolR, (*decFnInfo).fastpathDecMapUint16BoolR)\n\tfn(map[uint32]interface{}(nil), (*encFnInfo).fastpathEncMapUint32IntfR, (*decFnInfo).fastpathDecMapUint32IntfR)\n\tfn(map[uint32]string(nil), (*encFnInfo).fastpathEncMapUint32StringR, (*decFnInfo).fastpathDecMapUint32StringR)\n\tfn(map[uint32]uint(nil), (*encFnInfo).fastpathEncMapUint32UintR, (*decFnInfo).fastpathDecMapUint32UintR)\n\tfn(map[uint32]uint8(nil), (*encFnInfo).fastpathEncMapUint32Uint8R, (*decFnInfo).fastpathDecMapUint32Uint8R)\n\tfn(map[uint32]uint16(nil), (*encFnInfo).fastpathEncMapUint32Uint16R, (*decFnInfo).fastpathDecMapUint32Uint16R)\n\tfn(map[uint32]uint32(nil), (*encFnInfo).fastpathEncMapUint32Uint32R, (*decFnInfo).fastpathDecMapUint32Uint32R)\n\tfn(map[uint32]uint64(nil), (*encFnInfo).fastpathEncMapUint32Uint64R, (*decFnInfo).fastpathDecMapUint32Uint64R)\n\tfn(map[uint32]uintptr(nil), (*encFnInfo).fastpathEncMapUint32UintptrR, (*decFnInfo).fastpathDecMapUint32UintptrR)\n\tfn(map[uint32]int(nil), (*encFnInfo).fastpathEncMapUint32IntR, (*decFnInfo).fastpathDecMapUint32IntR)\n\tfn(map[uint32]int8(nil), (*encFnInfo).fastpathEncMapUint32Int8R, (*decFnInfo).fastpathDecMapUint32Int8R)\n\tfn(map[uint32]int16(nil), (*encFnInfo).fastpathEncMapUint32Int16R, (*decFnInfo).fastpathDecMapUint32Int16R)\n\tfn(map[uint32]int32(nil), (*encFnInfo).fastpathEncMapUint32Int32R, (*decFnInfo).fastpathDecMapUint32Int32R)\n\tfn(map[uint32]int64(nil), (*encFnInfo).fastpathEncMapUint32Int64R, (*decFnInfo).fastpathDecMapUint32Int64R)\n\tfn(map[uint32]float32(nil), (*encFnInfo).fastpathEncMapUint32Float32R, (*decFnInfo).fastpathDecMapUint32Float32R)\n\tfn(map[uint32]float64(nil), (*encFnInfo).fastpathEncMapUint32Float64R, (*decFnInfo).fastpathDecMapUint32Float64R)\n\tfn(map[uint32]bool(nil), (*encFnInfo).fastpathEncMapUint32BoolR, (*decFnInfo).fastpathDecMapUint32BoolR)\n\tfn(map[uint64]interface{}(nil), (*encFnInfo).fastpathEncMapUint64IntfR, (*decFnInfo).fastpathDecMapUint64IntfR)\n\tfn(map[uint64]string(nil), (*encFnInfo).fastpathEncMapUint64StringR, (*decFnInfo).fastpathDecMapUint64StringR)\n\tfn(map[uint64]uint(nil), (*encFnInfo).fastpathEncMapUint64UintR, (*decFnInfo).fastpathDecMapUint64UintR)\n\tfn(map[uint64]uint8(nil), (*encFnInfo).fastpathEncMapUint64Uint8R, (*decFnInfo).fastpathDecMapUint64Uint8R)\n\tfn(map[uint64]uint16(nil), (*encFnInfo).fastpathEncMapUint64Uint16R, (*decFnInfo).fastpathDecMapUint64Uint16R)\n\tfn(map[uint64]uint32(nil), (*encFnInfo).fastpathEncMapUint64Uint32R, (*decFnInfo).fastpathDecMapUint64Uint32R)\n\tfn(map[uint64]uint64(nil), (*encFnInfo).fastpathEncMapUint64Uint64R, (*decFnInfo).fastpathDecMapUint64Uint64R)\n\tfn(map[uint64]uintptr(nil), (*encFnInfo).fastpathEncMapUint64UintptrR, (*decFnInfo).fastpathDecMapUint64UintptrR)\n\tfn(map[uint64]int(nil), (*encFnInfo).fastpathEncMapUint64IntR, (*decFnInfo).fastpathDecMapUint64IntR)\n\tfn(map[uint64]int8(nil), (*encFnInfo).fastpathEncMapUint64Int8R, (*decFnInfo).fastpathDecMapUint64Int8R)\n\tfn(map[uint64]int16(nil), (*encFnInfo).fastpathEncMapUint64Int16R, (*decFnInfo).fastpathDecMapUint64Int16R)\n\tfn(map[uint64]int32(nil), (*encFnInfo).fastpathEncMapUint64Int32R, (*decFnInfo).fastpathDecMapUint64Int32R)\n\tfn(map[uint64]int64(nil), (*encFnInfo).fastpathEncMapUint64Int64R, (*decFnInfo).fastpathDecMapUint64Int64R)\n\tfn(map[uint64]float32(nil), (*encFnInfo).fastpathEncMapUint64Float32R, (*decFnInfo).fastpathDecMapUint64Float32R)\n\tfn(map[uint64]float64(nil), (*encFnInfo).fastpathEncMapUint64Float64R, (*decFnInfo).fastpathDecMapUint64Float64R)\n\tfn(map[uint64]bool(nil), (*encFnInfo).fastpathEncMapUint64BoolR, (*decFnInfo).fastpathDecMapUint64BoolR)\n\tfn(map[uintptr]interface{}(nil), (*encFnInfo).fastpathEncMapUintptrIntfR, (*decFnInfo).fastpathDecMapUintptrIntfR)\n\tfn(map[uintptr]string(nil), (*encFnInfo).fastpathEncMapUintptrStringR, (*decFnInfo).fastpathDecMapUintptrStringR)\n\tfn(map[uintptr]uint(nil), (*encFnInfo).fastpathEncMapUintptrUintR, (*decFnInfo).fastpathDecMapUintptrUintR)\n\tfn(map[uintptr]uint8(nil), (*encFnInfo).fastpathEncMapUintptrUint8R, (*decFnInfo).fastpathDecMapUintptrUint8R)\n\tfn(map[uintptr]uint16(nil), (*encFnInfo).fastpathEncMapUintptrUint16R, (*decFnInfo).fastpathDecMapUintptrUint16R)\n\tfn(map[uintptr]uint32(nil), (*encFnInfo).fastpathEncMapUintptrUint32R, (*decFnInfo).fastpathDecMapUintptrUint32R)\n\tfn(map[uintptr]uint64(nil), (*encFnInfo).fastpathEncMapUintptrUint64R, (*decFnInfo).fastpathDecMapUintptrUint64R)\n\tfn(map[uintptr]uintptr(nil), (*encFnInfo).fastpathEncMapUintptrUintptrR, (*decFnInfo).fastpathDecMapUintptrUintptrR)\n\tfn(map[uintptr]int(nil), (*encFnInfo).fastpathEncMapUintptrIntR, (*decFnInfo).fastpathDecMapUintptrIntR)\n\tfn(map[uintptr]int8(nil), (*encFnInfo).fastpathEncMapUintptrInt8R, (*decFnInfo).fastpathDecMapUintptrInt8R)\n\tfn(map[uintptr]int16(nil), (*encFnInfo).fastpathEncMapUintptrInt16R, (*decFnInfo).fastpathDecMapUintptrInt16R)\n\tfn(map[uintptr]int32(nil), (*encFnInfo).fastpathEncMapUintptrInt32R, (*decFnInfo).fastpathDecMapUintptrInt32R)\n\tfn(map[uintptr]int64(nil), (*encFnInfo).fastpathEncMapUintptrInt64R, (*decFnInfo).fastpathDecMapUintptrInt64R)\n\tfn(map[uintptr]float32(nil), (*encFnInfo).fastpathEncMapUintptrFloat32R, (*decFnInfo).fastpathDecMapUintptrFloat32R)\n\tfn(map[uintptr]float64(nil), (*encFnInfo).fastpathEncMapUintptrFloat64R, (*decFnInfo).fastpathDecMapUintptrFloat64R)\n\tfn(map[uintptr]bool(nil), (*encFnInfo).fastpathEncMapUintptrBoolR, (*decFnInfo).fastpathDecMapUintptrBoolR)\n\tfn(map[int]interface{}(nil), (*encFnInfo).fastpathEncMapIntIntfR, (*decFnInfo).fastpathDecMapIntIntfR)\n\tfn(map[int]string(nil), (*encFnInfo).fastpathEncMapIntStringR, (*decFnInfo).fastpathDecMapIntStringR)\n\tfn(map[int]uint(nil), (*encFnInfo).fastpathEncMapIntUintR, (*decFnInfo).fastpathDecMapIntUintR)\n\tfn(map[int]uint8(nil), (*encFnInfo).fastpathEncMapIntUint8R, (*decFnInfo).fastpathDecMapIntUint8R)\n\tfn(map[int]uint16(nil), (*encFnInfo).fastpathEncMapIntUint16R, (*decFnInfo).fastpathDecMapIntUint16R)\n\tfn(map[int]uint32(nil), (*encFnInfo).fastpathEncMapIntUint32R, (*decFnInfo).fastpathDecMapIntUint32R)\n\tfn(map[int]uint64(nil), (*encFnInfo).fastpathEncMapIntUint64R, (*decFnInfo).fastpathDecMapIntUint64R)\n\tfn(map[int]uintptr(nil), (*encFnInfo).fastpathEncMapIntUintptrR, (*decFnInfo).fastpathDecMapIntUintptrR)\n\tfn(map[int]int(nil), (*encFnInfo).fastpathEncMapIntIntR, (*decFnInfo).fastpathDecMapIntIntR)\n\tfn(map[int]int8(nil), (*encFnInfo).fastpathEncMapIntInt8R, (*decFnInfo).fastpathDecMapIntInt8R)\n\tfn(map[int]int16(nil), (*encFnInfo).fastpathEncMapIntInt16R, (*decFnInfo).fastpathDecMapIntInt16R)\n\tfn(map[int]int32(nil), (*encFnInfo).fastpathEncMapIntInt32R, (*decFnInfo).fastpathDecMapIntInt32R)\n\tfn(map[int]int64(nil), (*encFnInfo).fastpathEncMapIntInt64R, (*decFnInfo).fastpathDecMapIntInt64R)\n\tfn(map[int]float32(nil), (*encFnInfo).fastpathEncMapIntFloat32R, (*decFnInfo).fastpathDecMapIntFloat32R)\n\tfn(map[int]float64(nil), (*encFnInfo).fastpathEncMapIntFloat64R, (*decFnInfo).fastpathDecMapIntFloat64R)\n\tfn(map[int]bool(nil), (*encFnInfo).fastpathEncMapIntBoolR, (*decFnInfo).fastpathDecMapIntBoolR)\n\tfn(map[int8]interface{}(nil), (*encFnInfo).fastpathEncMapInt8IntfR, (*decFnInfo).fastpathDecMapInt8IntfR)\n\tfn(map[int8]string(nil), (*encFnInfo).fastpathEncMapInt8StringR, (*decFnInfo).fastpathDecMapInt8StringR)\n\tfn(map[int8]uint(nil), (*encFnInfo).fastpathEncMapInt8UintR, (*decFnInfo).fastpathDecMapInt8UintR)\n\tfn(map[int8]uint8(nil), (*encFnInfo).fastpathEncMapInt8Uint8R, (*decFnInfo).fastpathDecMapInt8Uint8R)\n\tfn(map[int8]uint16(nil), (*encFnInfo).fastpathEncMapInt8Uint16R, (*decFnInfo).fastpathDecMapInt8Uint16R)\n\tfn(map[int8]uint32(nil), (*encFnInfo).fastpathEncMapInt8Uint32R, (*decFnInfo).fastpathDecMapInt8Uint32R)\n\tfn(map[int8]uint64(nil), (*encFnInfo).fastpathEncMapInt8Uint64R, (*decFnInfo).fastpathDecMapInt8Uint64R)\n\tfn(map[int8]uintptr(nil), (*encFnInfo).fastpathEncMapInt8UintptrR, (*decFnInfo).fastpathDecMapInt8UintptrR)\n\tfn(map[int8]int(nil), (*encFnInfo).fastpathEncMapInt8IntR, (*decFnInfo).fastpathDecMapInt8IntR)\n\tfn(map[int8]int8(nil), (*encFnInfo).fastpathEncMapInt8Int8R, (*decFnInfo).fastpathDecMapInt8Int8R)\n\tfn(map[int8]int16(nil), (*encFnInfo).fastpathEncMapInt8Int16R, (*decFnInfo).fastpathDecMapInt8Int16R)\n\tfn(map[int8]int32(nil), (*encFnInfo).fastpathEncMapInt8Int32R, (*decFnInfo).fastpathDecMapInt8Int32R)\n\tfn(map[int8]int64(nil), (*encFnInfo).fastpathEncMapInt8Int64R, (*decFnInfo).fastpathDecMapInt8Int64R)\n\tfn(map[int8]float32(nil), (*encFnInfo).fastpathEncMapInt8Float32R, (*decFnInfo).fastpathDecMapInt8Float32R)\n\tfn(map[int8]float64(nil), (*encFnInfo).fastpathEncMapInt8Float64R, (*decFnInfo).fastpathDecMapInt8Float64R)\n\tfn(map[int8]bool(nil), (*encFnInfo).fastpathEncMapInt8BoolR, (*decFnInfo).fastpathDecMapInt8BoolR)\n\tfn(map[int16]interface{}(nil), (*encFnInfo).fastpathEncMapInt16IntfR, (*decFnInfo).fastpathDecMapInt16IntfR)\n\tfn(map[int16]string(nil), (*encFnInfo).fastpathEncMapInt16StringR, (*decFnInfo).fastpathDecMapInt16StringR)\n\tfn(map[int16]uint(nil), (*encFnInfo).fastpathEncMapInt16UintR, (*decFnInfo).fastpathDecMapInt16UintR)\n\tfn(map[int16]uint8(nil), (*encFnInfo).fastpathEncMapInt16Uint8R, (*decFnInfo).fastpathDecMapInt16Uint8R)\n\tfn(map[int16]uint16(nil), (*encFnInfo).fastpathEncMapInt16Uint16R, (*decFnInfo).fastpathDecMapInt16Uint16R)\n\tfn(map[int16]uint32(nil), (*encFnInfo).fastpathEncMapInt16Uint32R, (*decFnInfo).fastpathDecMapInt16Uint32R)\n\tfn(map[int16]uint64(nil), (*encFnInfo).fastpathEncMapInt16Uint64R, (*decFnInfo).fastpathDecMapInt16Uint64R)\n\tfn(map[int16]uintptr(nil), (*encFnInfo).fastpathEncMapInt16UintptrR, (*decFnInfo).fastpathDecMapInt16UintptrR)\n\tfn(map[int16]int(nil), (*encFnInfo).fastpathEncMapInt16IntR, (*decFnInfo).fastpathDecMapInt16IntR)\n\tfn(map[int16]int8(nil), (*encFnInfo).fastpathEncMapInt16Int8R, (*decFnInfo).fastpathDecMapInt16Int8R)\n\tfn(map[int16]int16(nil), (*encFnInfo).fastpathEncMapInt16Int16R, (*decFnInfo).fastpathDecMapInt16Int16R)\n\tfn(map[int16]int32(nil), (*encFnInfo).fastpathEncMapInt16Int32R, (*decFnInfo).fastpathDecMapInt16Int32R)\n\tfn(map[int16]int64(nil), (*encFnInfo).fastpathEncMapInt16Int64R, (*decFnInfo).fastpathDecMapInt16Int64R)\n\tfn(map[int16]float32(nil), (*encFnInfo).fastpathEncMapInt16Float32R, (*decFnInfo).fastpathDecMapInt16Float32R)\n\tfn(map[int16]float64(nil), (*encFnInfo).fastpathEncMapInt16Float64R, (*decFnInfo).fastpathDecMapInt16Float64R)\n\tfn(map[int16]bool(nil), (*encFnInfo).fastpathEncMapInt16BoolR, (*decFnInfo).fastpathDecMapInt16BoolR)\n\tfn(map[int32]interface{}(nil), (*encFnInfo).fastpathEncMapInt32IntfR, (*decFnInfo).fastpathDecMapInt32IntfR)\n\tfn(map[int32]string(nil), (*encFnInfo).fastpathEncMapInt32StringR, (*decFnInfo).fastpathDecMapInt32StringR)\n\tfn(map[int32]uint(nil), (*encFnInfo).fastpathEncMapInt32UintR, (*decFnInfo).fastpathDecMapInt32UintR)\n\tfn(map[int32]uint8(nil), (*encFnInfo).fastpathEncMapInt32Uint8R, (*decFnInfo).fastpathDecMapInt32Uint8R)\n\tfn(map[int32]uint16(nil), (*encFnInfo).fastpathEncMapInt32Uint16R, (*decFnInfo).fastpathDecMapInt32Uint16R)\n\tfn(map[int32]uint32(nil), (*encFnInfo).fastpathEncMapInt32Uint32R, (*decFnInfo).fastpathDecMapInt32Uint32R)\n\tfn(map[int32]uint64(nil), (*encFnInfo).fastpathEncMapInt32Uint64R, (*decFnInfo).fastpathDecMapInt32Uint64R)\n\tfn(map[int32]uintptr(nil), (*encFnInfo).fastpathEncMapInt32UintptrR, (*decFnInfo).fastpathDecMapInt32UintptrR)\n\tfn(map[int32]int(nil), (*encFnInfo).fastpathEncMapInt32IntR, (*decFnInfo).fastpathDecMapInt32IntR)\n\tfn(map[int32]int8(nil), (*encFnInfo).fastpathEncMapInt32Int8R, (*decFnInfo).fastpathDecMapInt32Int8R)\n\tfn(map[int32]int16(nil), (*encFnInfo).fastpathEncMapInt32Int16R, (*decFnInfo).fastpathDecMapInt32Int16R)\n\tfn(map[int32]int32(nil), (*encFnInfo).fastpathEncMapInt32Int32R, (*decFnInfo).fastpathDecMapInt32Int32R)\n\tfn(map[int32]int64(nil), (*encFnInfo).fastpathEncMapInt32Int64R, (*decFnInfo).fastpathDecMapInt32Int64R)\n\tfn(map[int32]float32(nil), (*encFnInfo).fastpathEncMapInt32Float32R, (*decFnInfo).fastpathDecMapInt32Float32R)\n\tfn(map[int32]float64(nil), (*encFnInfo).fastpathEncMapInt32Float64R, (*decFnInfo).fastpathDecMapInt32Float64R)\n\tfn(map[int32]bool(nil), (*encFnInfo).fastpathEncMapInt32BoolR, (*decFnInfo).fastpathDecMapInt32BoolR)\n\tfn(map[int64]interface{}(nil), (*encFnInfo).fastpathEncMapInt64IntfR, (*decFnInfo).fastpathDecMapInt64IntfR)\n\tfn(map[int64]string(nil), (*encFnInfo).fastpathEncMapInt64StringR, (*decFnInfo).fastpathDecMapInt64StringR)\n\tfn(map[int64]uint(nil), (*encFnInfo).fastpathEncMapInt64UintR, (*decFnInfo).fastpathDecMapInt64UintR)\n\tfn(map[int64]uint8(nil), (*encFnInfo).fastpathEncMapInt64Uint8R, (*decFnInfo).fastpathDecMapInt64Uint8R)\n\tfn(map[int64]uint16(nil), (*encFnInfo).fastpathEncMapInt64Uint16R, (*decFnInfo).fastpathDecMapInt64Uint16R)\n\tfn(map[int64]uint32(nil), (*encFnInfo).fastpathEncMapInt64Uint32R, (*decFnInfo).fastpathDecMapInt64Uint32R)\n\tfn(map[int64]uint64(nil), (*encFnInfo).fastpathEncMapInt64Uint64R, (*decFnInfo).fastpathDecMapInt64Uint64R)\n\tfn(map[int64]uintptr(nil), (*encFnInfo).fastpathEncMapInt64UintptrR, (*decFnInfo).fastpathDecMapInt64UintptrR)\n\tfn(map[int64]int(nil), (*encFnInfo).fastpathEncMapInt64IntR, (*decFnInfo).fastpathDecMapInt64IntR)\n\tfn(map[int64]int8(nil), (*encFnInfo).fastpathEncMapInt64Int8R, (*decFnInfo).fastpathDecMapInt64Int8R)\n\tfn(map[int64]int16(nil), (*encFnInfo).fastpathEncMapInt64Int16R, (*decFnInfo).fastpathDecMapInt64Int16R)\n\tfn(map[int64]int32(nil), (*encFnInfo).fastpathEncMapInt64Int32R, (*decFnInfo).fastpathDecMapInt64Int32R)\n\tfn(map[int64]int64(nil), (*encFnInfo).fastpathEncMapInt64Int64R, (*decFnInfo).fastpathDecMapInt64Int64R)\n\tfn(map[int64]float32(nil), (*encFnInfo).fastpathEncMapInt64Float32R, (*decFnInfo).fastpathDecMapInt64Float32R)\n\tfn(map[int64]float64(nil), (*encFnInfo).fastpathEncMapInt64Float64R, (*decFnInfo).fastpathDecMapInt64Float64R)\n\tfn(map[int64]bool(nil), (*encFnInfo).fastpathEncMapInt64BoolR, (*decFnInfo).fastpathDecMapInt64BoolR)\n\tfn(map[bool]interface{}(nil), (*encFnInfo).fastpathEncMapBoolIntfR, (*decFnInfo).fastpathDecMapBoolIntfR)\n\tfn(map[bool]string(nil), (*encFnInfo).fastpathEncMapBoolStringR, (*decFnInfo).fastpathDecMapBoolStringR)\n\tfn(map[bool]uint(nil), (*encFnInfo).fastpathEncMapBoolUintR, (*decFnInfo).fastpathDecMapBoolUintR)\n\tfn(map[bool]uint8(nil), (*encFnInfo).fastpathEncMapBoolUint8R, (*decFnInfo).fastpathDecMapBoolUint8R)\n\tfn(map[bool]uint16(nil), (*encFnInfo).fastpathEncMapBoolUint16R, (*decFnInfo).fastpathDecMapBoolUint16R)\n\tfn(map[bool]uint32(nil), (*encFnInfo).fastpathEncMapBoolUint32R, (*decFnInfo).fastpathDecMapBoolUint32R)\n\tfn(map[bool]uint64(nil), (*encFnInfo).fastpathEncMapBoolUint64R, (*decFnInfo).fastpathDecMapBoolUint64R)\n\tfn(map[bool]uintptr(nil), (*encFnInfo).fastpathEncMapBoolUintptrR, (*decFnInfo).fastpathDecMapBoolUintptrR)\n\tfn(map[bool]int(nil), (*encFnInfo).fastpathEncMapBoolIntR, (*decFnInfo).fastpathDecMapBoolIntR)\n\tfn(map[bool]int8(nil), (*encFnInfo).fastpathEncMapBoolInt8R, (*decFnInfo).fastpathDecMapBoolInt8R)\n\tfn(map[bool]int16(nil), (*encFnInfo).fastpathEncMapBoolInt16R, (*decFnInfo).fastpathDecMapBoolInt16R)\n\tfn(map[bool]int32(nil), (*encFnInfo).fastpathEncMapBoolInt32R, (*decFnInfo).fastpathDecMapBoolInt32R)\n\tfn(map[bool]int64(nil), (*encFnInfo).fastpathEncMapBoolInt64R, (*decFnInfo).fastpathDecMapBoolInt64R)\n\tfn(map[bool]float32(nil), (*encFnInfo).fastpathEncMapBoolFloat32R, (*decFnInfo).fastpathDecMapBoolFloat32R)\n\tfn(map[bool]float64(nil), (*encFnInfo).fastpathEncMapBoolFloat64R, (*decFnInfo).fastpathDecMapBoolFloat64R)\n\tfn(map[bool]bool(nil), (*encFnInfo).fastpathEncMapBoolBoolR, (*decFnInfo).fastpathDecMapBoolBoolR)\n\n\tsort.Sort(fastpathAslice(fastpathAV[:]))\n}\n\n// -- encode\n\n// -- -- fast path type switch\nfunc fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool {\n\tswitch v := iv.(type) {\n\n\tcase []interface{}:\n\t\tfastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e)\n\tcase *[]interface{}:\n\t\tfastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]interface{}:\n\t\tfastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]interface{}:\n\t\tfastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]string:\n\t\tfastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]string:\n\t\tfastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint:\n\t\tfastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint:\n\t\tfastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint8:\n\t\tfastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint8:\n\t\tfastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint16:\n\t\tfastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint16:\n\t\tfastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint32:\n\t\tfastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint32:\n\t\tfastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint64:\n\t\tfastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint64:\n\t\tfastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uintptr:\n\t\tfastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uintptr:\n\t\tfastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int:\n\t\tfastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int:\n\t\tfastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int8:\n\t\tfastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int8:\n\t\tfastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int16:\n\t\tfastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int16:\n\t\tfastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int32:\n\t\tfastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int32:\n\t\tfastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int64:\n\t\tfastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int64:\n\t\tfastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]float32:\n\t\tfastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]float32:\n\t\tfastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]float64:\n\t\tfastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]float64:\n\t\tfastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]bool:\n\t\tfastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]bool:\n\t\tfastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []string:\n\t\tfastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e)\n\tcase *[]string:\n\t\tfastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]interface{}:\n\t\tfastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]interface{}:\n\t\tfastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]string:\n\t\tfastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]string:\n\t\tfastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint:\n\t\tfastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint:\n\t\tfastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint8:\n\t\tfastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint8:\n\t\tfastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint16:\n\t\tfastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint16:\n\t\tfastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint32:\n\t\tfastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint32:\n\t\tfastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint64:\n\t\tfastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint64:\n\t\tfastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uintptr:\n\t\tfastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uintptr:\n\t\tfastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int:\n\t\tfastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int:\n\t\tfastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int8:\n\t\tfastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int8:\n\t\tfastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int16:\n\t\tfastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int16:\n\t\tfastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int32:\n\t\tfastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int32:\n\t\tfastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int64:\n\t\tfastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int64:\n\t\tfastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]float32:\n\t\tfastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]float32:\n\t\tfastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]float64:\n\t\tfastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]float64:\n\t\tfastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]bool:\n\t\tfastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]bool:\n\t\tfastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []float32:\n\t\tfastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *[]float32:\n\t\tfastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]interface{}:\n\t\tfastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]interface{}:\n\t\tfastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]string:\n\t\tfastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]string:\n\t\tfastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint:\n\t\tfastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint:\n\t\tfastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint8:\n\t\tfastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint8:\n\t\tfastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint16:\n\t\tfastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint16:\n\t\tfastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint32:\n\t\tfastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint32:\n\t\tfastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint64:\n\t\tfastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint64:\n\t\tfastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uintptr:\n\t\tfastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uintptr:\n\t\tfastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int:\n\t\tfastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int:\n\t\tfastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int8:\n\t\tfastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int8:\n\t\tfastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int16:\n\t\tfastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int16:\n\t\tfastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int32:\n\t\tfastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int32:\n\t\tfastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int64:\n\t\tfastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int64:\n\t\tfastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]float32:\n\t\tfastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]float32:\n\t\tfastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]float64:\n\t\tfastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]float64:\n\t\tfastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]bool:\n\t\tfastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]bool:\n\t\tfastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []float64:\n\t\tfastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *[]float64:\n\t\tfastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]interface{}:\n\t\tfastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]interface{}:\n\t\tfastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]string:\n\t\tfastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]string:\n\t\tfastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint:\n\t\tfastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint:\n\t\tfastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint8:\n\t\tfastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint8:\n\t\tfastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint16:\n\t\tfastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint16:\n\t\tfastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint32:\n\t\tfastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint32:\n\t\tfastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint64:\n\t\tfastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint64:\n\t\tfastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uintptr:\n\t\tfastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uintptr:\n\t\tfastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int:\n\t\tfastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int:\n\t\tfastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int8:\n\t\tfastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int8:\n\t\tfastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int16:\n\t\tfastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int16:\n\t\tfastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int32:\n\t\tfastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int32:\n\t\tfastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int64:\n\t\tfastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int64:\n\t\tfastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]float32:\n\t\tfastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]float32:\n\t\tfastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]float64:\n\t\tfastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]float64:\n\t\tfastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]bool:\n\t\tfastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]bool:\n\t\tfastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint:\n\t\tfastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e)\n\tcase *[]uint:\n\t\tfastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]interface{}:\n\t\tfastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]interface{}:\n\t\tfastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]string:\n\t\tfastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]string:\n\t\tfastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint:\n\t\tfastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint:\n\t\tfastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint8:\n\t\tfastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint8:\n\t\tfastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint16:\n\t\tfastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint16:\n\t\tfastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint32:\n\t\tfastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint32:\n\t\tfastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint64:\n\t\tfastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint64:\n\t\tfastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uintptr:\n\t\tfastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uintptr:\n\t\tfastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int:\n\t\tfastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int:\n\t\tfastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int8:\n\t\tfastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int8:\n\t\tfastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int16:\n\t\tfastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int16:\n\t\tfastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int32:\n\t\tfastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int32:\n\t\tfastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int64:\n\t\tfastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int64:\n\t\tfastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]float32:\n\t\tfastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]float32:\n\t\tfastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]float64:\n\t\tfastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]float64:\n\t\tfastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]bool:\n\t\tfastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]bool:\n\t\tfastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]interface{}:\n\t\tfastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]interface{}:\n\t\tfastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]string:\n\t\tfastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]string:\n\t\tfastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint:\n\t\tfastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint:\n\t\tfastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint8:\n\t\tfastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint8:\n\t\tfastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint16:\n\t\tfastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint16:\n\t\tfastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint32:\n\t\tfastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint32:\n\t\tfastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint64:\n\t\tfastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint64:\n\t\tfastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uintptr:\n\t\tfastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uintptr:\n\t\tfastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int:\n\t\tfastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int:\n\t\tfastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int8:\n\t\tfastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int8:\n\t\tfastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int16:\n\t\tfastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int16:\n\t\tfastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int32:\n\t\tfastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int32:\n\t\tfastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int64:\n\t\tfastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int64:\n\t\tfastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]float32:\n\t\tfastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]float32:\n\t\tfastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]float64:\n\t\tfastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]float64:\n\t\tfastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]bool:\n\t\tfastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]bool:\n\t\tfastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint16:\n\t\tfastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint16:\n\t\tfastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]interface{}:\n\t\tfastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]interface{}:\n\t\tfastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]string:\n\t\tfastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]string:\n\t\tfastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint:\n\t\tfastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint:\n\t\tfastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint8:\n\t\tfastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint8:\n\t\tfastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint16:\n\t\tfastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint16:\n\t\tfastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint32:\n\t\tfastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint32:\n\t\tfastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint64:\n\t\tfastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint64:\n\t\tfastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uintptr:\n\t\tfastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uintptr:\n\t\tfastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int:\n\t\tfastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int:\n\t\tfastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int8:\n\t\tfastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int8:\n\t\tfastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int16:\n\t\tfastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int16:\n\t\tfastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int32:\n\t\tfastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int32:\n\t\tfastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int64:\n\t\tfastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int64:\n\t\tfastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]float32:\n\t\tfastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]float32:\n\t\tfastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]float64:\n\t\tfastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]float64:\n\t\tfastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]bool:\n\t\tfastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]bool:\n\t\tfastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint32:\n\t\tfastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint32:\n\t\tfastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]interface{}:\n\t\tfastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]interface{}:\n\t\tfastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]string:\n\t\tfastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]string:\n\t\tfastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint:\n\t\tfastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint:\n\t\tfastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint8:\n\t\tfastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint8:\n\t\tfastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint16:\n\t\tfastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint16:\n\t\tfastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint32:\n\t\tfastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint32:\n\t\tfastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint64:\n\t\tfastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint64:\n\t\tfastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uintptr:\n\t\tfastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uintptr:\n\t\tfastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int:\n\t\tfastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int:\n\t\tfastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int8:\n\t\tfastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int8:\n\t\tfastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int16:\n\t\tfastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int16:\n\t\tfastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int32:\n\t\tfastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int32:\n\t\tfastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int64:\n\t\tfastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int64:\n\t\tfastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]float32:\n\t\tfastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]float32:\n\t\tfastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]float64:\n\t\tfastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]float64:\n\t\tfastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]bool:\n\t\tfastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]bool:\n\t\tfastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint64:\n\t\tfastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint64:\n\t\tfastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]interface{}:\n\t\tfastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]interface{}:\n\t\tfastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]string:\n\t\tfastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]string:\n\t\tfastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint:\n\t\tfastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint:\n\t\tfastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint8:\n\t\tfastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint8:\n\t\tfastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint16:\n\t\tfastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint16:\n\t\tfastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint32:\n\t\tfastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint32:\n\t\tfastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint64:\n\t\tfastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint64:\n\t\tfastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uintptr:\n\t\tfastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uintptr:\n\t\tfastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int:\n\t\tfastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int:\n\t\tfastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int8:\n\t\tfastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int8:\n\t\tfastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int16:\n\t\tfastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int16:\n\t\tfastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int32:\n\t\tfastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int32:\n\t\tfastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int64:\n\t\tfastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int64:\n\t\tfastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]float32:\n\t\tfastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]float32:\n\t\tfastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]float64:\n\t\tfastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]float64:\n\t\tfastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]bool:\n\t\tfastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]bool:\n\t\tfastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uintptr:\n\t\tfastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *[]uintptr:\n\t\tfastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]interface{}:\n\t\tfastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]interface{}:\n\t\tfastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]string:\n\t\tfastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]string:\n\t\tfastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint:\n\t\tfastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint:\n\t\tfastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint8:\n\t\tfastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint8:\n\t\tfastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint16:\n\t\tfastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint16:\n\t\tfastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint32:\n\t\tfastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint32:\n\t\tfastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint64:\n\t\tfastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint64:\n\t\tfastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uintptr:\n\t\tfastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uintptr:\n\t\tfastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int:\n\t\tfastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int:\n\t\tfastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int8:\n\t\tfastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int8:\n\t\tfastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int16:\n\t\tfastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int16:\n\t\tfastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int32:\n\t\tfastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int32:\n\t\tfastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int64:\n\t\tfastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int64:\n\t\tfastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]float32:\n\t\tfastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]float32:\n\t\tfastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]float64:\n\t\tfastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]float64:\n\t\tfastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]bool:\n\t\tfastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]bool:\n\t\tfastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int:\n\t\tfastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e)\n\tcase *[]int:\n\t\tfastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]interface{}:\n\t\tfastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]interface{}:\n\t\tfastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]string:\n\t\tfastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]string:\n\t\tfastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint:\n\t\tfastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint:\n\t\tfastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint8:\n\t\tfastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint8:\n\t\tfastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint16:\n\t\tfastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint16:\n\t\tfastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint32:\n\t\tfastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint32:\n\t\tfastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint64:\n\t\tfastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint64:\n\t\tfastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uintptr:\n\t\tfastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uintptr:\n\t\tfastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int:\n\t\tfastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int:\n\t\tfastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int8:\n\t\tfastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int8:\n\t\tfastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int16:\n\t\tfastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int16:\n\t\tfastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int32:\n\t\tfastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int32:\n\t\tfastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int64:\n\t\tfastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int64:\n\t\tfastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]float32:\n\t\tfastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]float32:\n\t\tfastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]float64:\n\t\tfastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]float64:\n\t\tfastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]bool:\n\t\tfastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]bool:\n\t\tfastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int8:\n\t\tfastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e)\n\tcase *[]int8:\n\t\tfastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]interface{}:\n\t\tfastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]interface{}:\n\t\tfastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]string:\n\t\tfastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]string:\n\t\tfastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint:\n\t\tfastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint:\n\t\tfastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint8:\n\t\tfastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint8:\n\t\tfastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint16:\n\t\tfastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint16:\n\t\tfastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint32:\n\t\tfastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint32:\n\t\tfastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint64:\n\t\tfastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint64:\n\t\tfastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uintptr:\n\t\tfastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uintptr:\n\t\tfastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int:\n\t\tfastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int:\n\t\tfastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int8:\n\t\tfastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int8:\n\t\tfastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int16:\n\t\tfastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int16:\n\t\tfastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int32:\n\t\tfastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int32:\n\t\tfastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int64:\n\t\tfastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int64:\n\t\tfastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]float32:\n\t\tfastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]float32:\n\t\tfastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]float64:\n\t\tfastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]float64:\n\t\tfastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]bool:\n\t\tfastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]bool:\n\t\tfastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int16:\n\t\tfastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e)\n\tcase *[]int16:\n\t\tfastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]interface{}:\n\t\tfastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]interface{}:\n\t\tfastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]string:\n\t\tfastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]string:\n\t\tfastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint:\n\t\tfastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint:\n\t\tfastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint8:\n\t\tfastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint8:\n\t\tfastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint16:\n\t\tfastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint16:\n\t\tfastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint32:\n\t\tfastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint32:\n\t\tfastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint64:\n\t\tfastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint64:\n\t\tfastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uintptr:\n\t\tfastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uintptr:\n\t\tfastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int:\n\t\tfastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int:\n\t\tfastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int8:\n\t\tfastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int8:\n\t\tfastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int16:\n\t\tfastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int16:\n\t\tfastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int32:\n\t\tfastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int32:\n\t\tfastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int64:\n\t\tfastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int64:\n\t\tfastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]float32:\n\t\tfastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]float32:\n\t\tfastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]float64:\n\t\tfastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]float64:\n\t\tfastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]bool:\n\t\tfastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]bool:\n\t\tfastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int32:\n\t\tfastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e)\n\tcase *[]int32:\n\t\tfastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]interface{}:\n\t\tfastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]interface{}:\n\t\tfastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]string:\n\t\tfastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]string:\n\t\tfastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint:\n\t\tfastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint:\n\t\tfastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint8:\n\t\tfastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint8:\n\t\tfastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint16:\n\t\tfastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint16:\n\t\tfastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint32:\n\t\tfastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint32:\n\t\tfastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint64:\n\t\tfastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint64:\n\t\tfastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uintptr:\n\t\tfastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uintptr:\n\t\tfastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int:\n\t\tfastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int:\n\t\tfastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int8:\n\t\tfastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int8:\n\t\tfastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int16:\n\t\tfastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int16:\n\t\tfastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int32:\n\t\tfastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int32:\n\t\tfastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int64:\n\t\tfastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int64:\n\t\tfastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]float32:\n\t\tfastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]float32:\n\t\tfastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]float64:\n\t\tfastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]float64:\n\t\tfastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]bool:\n\t\tfastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]bool:\n\t\tfastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int64:\n\t\tfastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e)\n\tcase *[]int64:\n\t\tfastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]interface{}:\n\t\tfastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]interface{}:\n\t\tfastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]string:\n\t\tfastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]string:\n\t\tfastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint:\n\t\tfastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint:\n\t\tfastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint8:\n\t\tfastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint8:\n\t\tfastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint16:\n\t\tfastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint16:\n\t\tfastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint32:\n\t\tfastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint32:\n\t\tfastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint64:\n\t\tfastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint64:\n\t\tfastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uintptr:\n\t\tfastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uintptr:\n\t\tfastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int:\n\t\tfastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int:\n\t\tfastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int8:\n\t\tfastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int8:\n\t\tfastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int16:\n\t\tfastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int16:\n\t\tfastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int32:\n\t\tfastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int32:\n\t\tfastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int64:\n\t\tfastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int64:\n\t\tfastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]float32:\n\t\tfastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]float32:\n\t\tfastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]float64:\n\t\tfastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]float64:\n\t\tfastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]bool:\n\t\tfastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]bool:\n\t\tfastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase []bool:\n\t\tfastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e)\n\tcase *[]bool:\n\t\tfastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]interface{}:\n\t\tfastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]interface{}:\n\t\tfastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]string:\n\t\tfastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]string:\n\t\tfastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint:\n\t\tfastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint:\n\t\tfastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint8:\n\t\tfastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint8:\n\t\tfastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint16:\n\t\tfastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint16:\n\t\tfastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint32:\n\t\tfastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint32:\n\t\tfastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint64:\n\t\tfastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint64:\n\t\tfastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uintptr:\n\t\tfastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uintptr:\n\t\tfastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int:\n\t\tfastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int:\n\t\tfastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int8:\n\t\tfastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int8:\n\t\tfastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int16:\n\t\tfastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int16:\n\t\tfastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int32:\n\t\tfastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int32:\n\t\tfastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int64:\n\t\tfastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int64:\n\t\tfastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]float32:\n\t\tfastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]float32:\n\t\tfastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]float64:\n\t\tfastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]float64:\n\t\tfastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]bool:\n\t\tfastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]bool:\n\t\tfastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e)\n\n\tdefault:\n\t\t_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool {\n\tswitch v := iv.(type) {\n\n\tcase []interface{}:\n\t\tfastpathTV.EncSliceIntfV(v, fastpathCheckNilTrue, e)\n\tcase *[]interface{}:\n\t\tfastpathTV.EncSliceIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase []string:\n\t\tfastpathTV.EncSliceStringV(v, fastpathCheckNilTrue, e)\n\tcase *[]string:\n\t\tfastpathTV.EncSliceStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase []float32:\n\t\tfastpathTV.EncSliceFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *[]float32:\n\t\tfastpathTV.EncSliceFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase []float64:\n\t\tfastpathTV.EncSliceFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *[]float64:\n\t\tfastpathTV.EncSliceFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint:\n\t\tfastpathTV.EncSliceUintV(v, fastpathCheckNilTrue, e)\n\tcase *[]uint:\n\t\tfastpathTV.EncSliceUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint16:\n\t\tfastpathTV.EncSliceUint16V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint16:\n\t\tfastpathTV.EncSliceUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint32:\n\t\tfastpathTV.EncSliceUint32V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint32:\n\t\tfastpathTV.EncSliceUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase []uint64:\n\t\tfastpathTV.EncSliceUint64V(v, fastpathCheckNilTrue, e)\n\tcase *[]uint64:\n\t\tfastpathTV.EncSliceUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase []uintptr:\n\t\tfastpathTV.EncSliceUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *[]uintptr:\n\t\tfastpathTV.EncSliceUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int:\n\t\tfastpathTV.EncSliceIntV(v, fastpathCheckNilTrue, e)\n\tcase *[]int:\n\t\tfastpathTV.EncSliceIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase []int8:\n\t\tfastpathTV.EncSliceInt8V(v, fastpathCheckNilTrue, e)\n\tcase *[]int8:\n\t\tfastpathTV.EncSliceInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase []int16:\n\t\tfastpathTV.EncSliceInt16V(v, fastpathCheckNilTrue, e)\n\tcase *[]int16:\n\t\tfastpathTV.EncSliceInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase []int32:\n\t\tfastpathTV.EncSliceInt32V(v, fastpathCheckNilTrue, e)\n\tcase *[]int32:\n\t\tfastpathTV.EncSliceInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase []int64:\n\t\tfastpathTV.EncSliceInt64V(v, fastpathCheckNilTrue, e)\n\tcase *[]int64:\n\t\tfastpathTV.EncSliceInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase []bool:\n\t\tfastpathTV.EncSliceBoolV(v, fastpathCheckNilTrue, e)\n\tcase *[]bool:\n\t\tfastpathTV.EncSliceBoolV(*v, fastpathCheckNilTrue, e)\n\n\tdefault:\n\t\t_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool {\n\tswitch v := iv.(type) {\n\n\tcase map[interface{}]interface{}:\n\t\tfastpathTV.EncMapIntfIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]interface{}:\n\t\tfastpathTV.EncMapIntfIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]string:\n\t\tfastpathTV.EncMapIntfStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]string:\n\t\tfastpathTV.EncMapIntfStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint:\n\t\tfastpathTV.EncMapIntfUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint:\n\t\tfastpathTV.EncMapIntfUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint8:\n\t\tfastpathTV.EncMapIntfUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint8:\n\t\tfastpathTV.EncMapIntfUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint16:\n\t\tfastpathTV.EncMapIntfUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint16:\n\t\tfastpathTV.EncMapIntfUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint32:\n\t\tfastpathTV.EncMapIntfUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint32:\n\t\tfastpathTV.EncMapIntfUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uint64:\n\t\tfastpathTV.EncMapIntfUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uint64:\n\t\tfastpathTV.EncMapIntfUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]uintptr:\n\t\tfastpathTV.EncMapIntfUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]uintptr:\n\t\tfastpathTV.EncMapIntfUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int:\n\t\tfastpathTV.EncMapIntfIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int:\n\t\tfastpathTV.EncMapIntfIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int8:\n\t\tfastpathTV.EncMapIntfInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int8:\n\t\tfastpathTV.EncMapIntfInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int16:\n\t\tfastpathTV.EncMapIntfInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int16:\n\t\tfastpathTV.EncMapIntfInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int32:\n\t\tfastpathTV.EncMapIntfInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int32:\n\t\tfastpathTV.EncMapIntfInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]int64:\n\t\tfastpathTV.EncMapIntfInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]int64:\n\t\tfastpathTV.EncMapIntfInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]float32:\n\t\tfastpathTV.EncMapIntfFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]float32:\n\t\tfastpathTV.EncMapIntfFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]float64:\n\t\tfastpathTV.EncMapIntfFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]float64:\n\t\tfastpathTV.EncMapIntfFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[interface{}]bool:\n\t\tfastpathTV.EncMapIntfBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[interface{}]bool:\n\t\tfastpathTV.EncMapIntfBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]interface{}:\n\t\tfastpathTV.EncMapStringIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]interface{}:\n\t\tfastpathTV.EncMapStringIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]string:\n\t\tfastpathTV.EncMapStringStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]string:\n\t\tfastpathTV.EncMapStringStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint:\n\t\tfastpathTV.EncMapStringUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint:\n\t\tfastpathTV.EncMapStringUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint8:\n\t\tfastpathTV.EncMapStringUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint8:\n\t\tfastpathTV.EncMapStringUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint16:\n\t\tfastpathTV.EncMapStringUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint16:\n\t\tfastpathTV.EncMapStringUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint32:\n\t\tfastpathTV.EncMapStringUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint32:\n\t\tfastpathTV.EncMapStringUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uint64:\n\t\tfastpathTV.EncMapStringUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uint64:\n\t\tfastpathTV.EncMapStringUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]uintptr:\n\t\tfastpathTV.EncMapStringUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]uintptr:\n\t\tfastpathTV.EncMapStringUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int:\n\t\tfastpathTV.EncMapStringIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int:\n\t\tfastpathTV.EncMapStringIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int8:\n\t\tfastpathTV.EncMapStringInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int8:\n\t\tfastpathTV.EncMapStringInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int16:\n\t\tfastpathTV.EncMapStringInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int16:\n\t\tfastpathTV.EncMapStringInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int32:\n\t\tfastpathTV.EncMapStringInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int32:\n\t\tfastpathTV.EncMapStringInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]int64:\n\t\tfastpathTV.EncMapStringInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]int64:\n\t\tfastpathTV.EncMapStringInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]float32:\n\t\tfastpathTV.EncMapStringFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]float32:\n\t\tfastpathTV.EncMapStringFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]float64:\n\t\tfastpathTV.EncMapStringFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[string]float64:\n\t\tfastpathTV.EncMapStringFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[string]bool:\n\t\tfastpathTV.EncMapStringBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[string]bool:\n\t\tfastpathTV.EncMapStringBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]interface{}:\n\t\tfastpathTV.EncMapFloat32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]interface{}:\n\t\tfastpathTV.EncMapFloat32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]string:\n\t\tfastpathTV.EncMapFloat32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]string:\n\t\tfastpathTV.EncMapFloat32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint:\n\t\tfastpathTV.EncMapFloat32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint:\n\t\tfastpathTV.EncMapFloat32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint8:\n\t\tfastpathTV.EncMapFloat32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint8:\n\t\tfastpathTV.EncMapFloat32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint16:\n\t\tfastpathTV.EncMapFloat32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint16:\n\t\tfastpathTV.EncMapFloat32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint32:\n\t\tfastpathTV.EncMapFloat32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint32:\n\t\tfastpathTV.EncMapFloat32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uint64:\n\t\tfastpathTV.EncMapFloat32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uint64:\n\t\tfastpathTV.EncMapFloat32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]uintptr:\n\t\tfastpathTV.EncMapFloat32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]uintptr:\n\t\tfastpathTV.EncMapFloat32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int:\n\t\tfastpathTV.EncMapFloat32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int:\n\t\tfastpathTV.EncMapFloat32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int8:\n\t\tfastpathTV.EncMapFloat32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int8:\n\t\tfastpathTV.EncMapFloat32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int16:\n\t\tfastpathTV.EncMapFloat32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int16:\n\t\tfastpathTV.EncMapFloat32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int32:\n\t\tfastpathTV.EncMapFloat32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int32:\n\t\tfastpathTV.EncMapFloat32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]int64:\n\t\tfastpathTV.EncMapFloat32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]int64:\n\t\tfastpathTV.EncMapFloat32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]float32:\n\t\tfastpathTV.EncMapFloat32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]float32:\n\t\tfastpathTV.EncMapFloat32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]float64:\n\t\tfastpathTV.EncMapFloat32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]float64:\n\t\tfastpathTV.EncMapFloat32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float32]bool:\n\t\tfastpathTV.EncMapFloat32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[float32]bool:\n\t\tfastpathTV.EncMapFloat32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]interface{}:\n\t\tfastpathTV.EncMapFloat64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]interface{}:\n\t\tfastpathTV.EncMapFloat64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]string:\n\t\tfastpathTV.EncMapFloat64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]string:\n\t\tfastpathTV.EncMapFloat64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint:\n\t\tfastpathTV.EncMapFloat64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint:\n\t\tfastpathTV.EncMapFloat64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint8:\n\t\tfastpathTV.EncMapFloat64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint8:\n\t\tfastpathTV.EncMapFloat64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint16:\n\t\tfastpathTV.EncMapFloat64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint16:\n\t\tfastpathTV.EncMapFloat64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint32:\n\t\tfastpathTV.EncMapFloat64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint32:\n\t\tfastpathTV.EncMapFloat64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uint64:\n\t\tfastpathTV.EncMapFloat64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uint64:\n\t\tfastpathTV.EncMapFloat64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]uintptr:\n\t\tfastpathTV.EncMapFloat64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]uintptr:\n\t\tfastpathTV.EncMapFloat64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int:\n\t\tfastpathTV.EncMapFloat64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int:\n\t\tfastpathTV.EncMapFloat64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int8:\n\t\tfastpathTV.EncMapFloat64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int8:\n\t\tfastpathTV.EncMapFloat64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int16:\n\t\tfastpathTV.EncMapFloat64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int16:\n\t\tfastpathTV.EncMapFloat64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int32:\n\t\tfastpathTV.EncMapFloat64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int32:\n\t\tfastpathTV.EncMapFloat64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]int64:\n\t\tfastpathTV.EncMapFloat64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]int64:\n\t\tfastpathTV.EncMapFloat64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]float32:\n\t\tfastpathTV.EncMapFloat64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]float32:\n\t\tfastpathTV.EncMapFloat64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]float64:\n\t\tfastpathTV.EncMapFloat64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]float64:\n\t\tfastpathTV.EncMapFloat64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[float64]bool:\n\t\tfastpathTV.EncMapFloat64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[float64]bool:\n\t\tfastpathTV.EncMapFloat64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]interface{}:\n\t\tfastpathTV.EncMapUintIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]interface{}:\n\t\tfastpathTV.EncMapUintIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]string:\n\t\tfastpathTV.EncMapUintStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]string:\n\t\tfastpathTV.EncMapUintStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint:\n\t\tfastpathTV.EncMapUintUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint:\n\t\tfastpathTV.EncMapUintUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint8:\n\t\tfastpathTV.EncMapUintUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint8:\n\t\tfastpathTV.EncMapUintUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint16:\n\t\tfastpathTV.EncMapUintUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint16:\n\t\tfastpathTV.EncMapUintUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint32:\n\t\tfastpathTV.EncMapUintUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint32:\n\t\tfastpathTV.EncMapUintUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uint64:\n\t\tfastpathTV.EncMapUintUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uint64:\n\t\tfastpathTV.EncMapUintUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]uintptr:\n\t\tfastpathTV.EncMapUintUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]uintptr:\n\t\tfastpathTV.EncMapUintUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int:\n\t\tfastpathTV.EncMapUintIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int:\n\t\tfastpathTV.EncMapUintIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int8:\n\t\tfastpathTV.EncMapUintInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int8:\n\t\tfastpathTV.EncMapUintInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int16:\n\t\tfastpathTV.EncMapUintInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int16:\n\t\tfastpathTV.EncMapUintInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int32:\n\t\tfastpathTV.EncMapUintInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int32:\n\t\tfastpathTV.EncMapUintInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]int64:\n\t\tfastpathTV.EncMapUintInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]int64:\n\t\tfastpathTV.EncMapUintInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]float32:\n\t\tfastpathTV.EncMapUintFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]float32:\n\t\tfastpathTV.EncMapUintFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]float64:\n\t\tfastpathTV.EncMapUintFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]float64:\n\t\tfastpathTV.EncMapUintFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint]bool:\n\t\tfastpathTV.EncMapUintBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint]bool:\n\t\tfastpathTV.EncMapUintBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]interface{}:\n\t\tfastpathTV.EncMapUint8IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]interface{}:\n\t\tfastpathTV.EncMapUint8IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]string:\n\t\tfastpathTV.EncMapUint8StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]string:\n\t\tfastpathTV.EncMapUint8StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint:\n\t\tfastpathTV.EncMapUint8UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint:\n\t\tfastpathTV.EncMapUint8UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint8:\n\t\tfastpathTV.EncMapUint8Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint8:\n\t\tfastpathTV.EncMapUint8Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint16:\n\t\tfastpathTV.EncMapUint8Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint16:\n\t\tfastpathTV.EncMapUint8Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint32:\n\t\tfastpathTV.EncMapUint8Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint32:\n\t\tfastpathTV.EncMapUint8Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uint64:\n\t\tfastpathTV.EncMapUint8Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uint64:\n\t\tfastpathTV.EncMapUint8Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]uintptr:\n\t\tfastpathTV.EncMapUint8UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]uintptr:\n\t\tfastpathTV.EncMapUint8UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int:\n\t\tfastpathTV.EncMapUint8IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int:\n\t\tfastpathTV.EncMapUint8IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int8:\n\t\tfastpathTV.EncMapUint8Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int8:\n\t\tfastpathTV.EncMapUint8Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int16:\n\t\tfastpathTV.EncMapUint8Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int16:\n\t\tfastpathTV.EncMapUint8Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int32:\n\t\tfastpathTV.EncMapUint8Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int32:\n\t\tfastpathTV.EncMapUint8Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]int64:\n\t\tfastpathTV.EncMapUint8Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]int64:\n\t\tfastpathTV.EncMapUint8Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]float32:\n\t\tfastpathTV.EncMapUint8Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]float32:\n\t\tfastpathTV.EncMapUint8Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]float64:\n\t\tfastpathTV.EncMapUint8Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]float64:\n\t\tfastpathTV.EncMapUint8Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint8]bool:\n\t\tfastpathTV.EncMapUint8BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint8]bool:\n\t\tfastpathTV.EncMapUint8BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]interface{}:\n\t\tfastpathTV.EncMapUint16IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]interface{}:\n\t\tfastpathTV.EncMapUint16IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]string:\n\t\tfastpathTV.EncMapUint16StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]string:\n\t\tfastpathTV.EncMapUint16StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint:\n\t\tfastpathTV.EncMapUint16UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint:\n\t\tfastpathTV.EncMapUint16UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint8:\n\t\tfastpathTV.EncMapUint16Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint8:\n\t\tfastpathTV.EncMapUint16Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint16:\n\t\tfastpathTV.EncMapUint16Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint16:\n\t\tfastpathTV.EncMapUint16Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint32:\n\t\tfastpathTV.EncMapUint16Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint32:\n\t\tfastpathTV.EncMapUint16Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uint64:\n\t\tfastpathTV.EncMapUint16Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uint64:\n\t\tfastpathTV.EncMapUint16Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]uintptr:\n\t\tfastpathTV.EncMapUint16UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]uintptr:\n\t\tfastpathTV.EncMapUint16UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int:\n\t\tfastpathTV.EncMapUint16IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int:\n\t\tfastpathTV.EncMapUint16IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int8:\n\t\tfastpathTV.EncMapUint16Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int8:\n\t\tfastpathTV.EncMapUint16Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int16:\n\t\tfastpathTV.EncMapUint16Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int16:\n\t\tfastpathTV.EncMapUint16Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int32:\n\t\tfastpathTV.EncMapUint16Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int32:\n\t\tfastpathTV.EncMapUint16Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]int64:\n\t\tfastpathTV.EncMapUint16Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]int64:\n\t\tfastpathTV.EncMapUint16Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]float32:\n\t\tfastpathTV.EncMapUint16Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]float32:\n\t\tfastpathTV.EncMapUint16Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]float64:\n\t\tfastpathTV.EncMapUint16Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]float64:\n\t\tfastpathTV.EncMapUint16Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint16]bool:\n\t\tfastpathTV.EncMapUint16BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint16]bool:\n\t\tfastpathTV.EncMapUint16BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]interface{}:\n\t\tfastpathTV.EncMapUint32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]interface{}:\n\t\tfastpathTV.EncMapUint32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]string:\n\t\tfastpathTV.EncMapUint32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]string:\n\t\tfastpathTV.EncMapUint32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint:\n\t\tfastpathTV.EncMapUint32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint:\n\t\tfastpathTV.EncMapUint32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint8:\n\t\tfastpathTV.EncMapUint32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint8:\n\t\tfastpathTV.EncMapUint32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint16:\n\t\tfastpathTV.EncMapUint32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint16:\n\t\tfastpathTV.EncMapUint32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint32:\n\t\tfastpathTV.EncMapUint32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint32:\n\t\tfastpathTV.EncMapUint32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uint64:\n\t\tfastpathTV.EncMapUint32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uint64:\n\t\tfastpathTV.EncMapUint32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]uintptr:\n\t\tfastpathTV.EncMapUint32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]uintptr:\n\t\tfastpathTV.EncMapUint32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int:\n\t\tfastpathTV.EncMapUint32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int:\n\t\tfastpathTV.EncMapUint32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int8:\n\t\tfastpathTV.EncMapUint32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int8:\n\t\tfastpathTV.EncMapUint32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int16:\n\t\tfastpathTV.EncMapUint32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int16:\n\t\tfastpathTV.EncMapUint32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int32:\n\t\tfastpathTV.EncMapUint32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int32:\n\t\tfastpathTV.EncMapUint32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]int64:\n\t\tfastpathTV.EncMapUint32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]int64:\n\t\tfastpathTV.EncMapUint32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]float32:\n\t\tfastpathTV.EncMapUint32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]float32:\n\t\tfastpathTV.EncMapUint32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]float64:\n\t\tfastpathTV.EncMapUint32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]float64:\n\t\tfastpathTV.EncMapUint32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint32]bool:\n\t\tfastpathTV.EncMapUint32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint32]bool:\n\t\tfastpathTV.EncMapUint32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]interface{}:\n\t\tfastpathTV.EncMapUint64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]interface{}:\n\t\tfastpathTV.EncMapUint64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]string:\n\t\tfastpathTV.EncMapUint64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]string:\n\t\tfastpathTV.EncMapUint64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint:\n\t\tfastpathTV.EncMapUint64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint:\n\t\tfastpathTV.EncMapUint64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint8:\n\t\tfastpathTV.EncMapUint64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint8:\n\t\tfastpathTV.EncMapUint64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint16:\n\t\tfastpathTV.EncMapUint64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint16:\n\t\tfastpathTV.EncMapUint64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint32:\n\t\tfastpathTV.EncMapUint64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint32:\n\t\tfastpathTV.EncMapUint64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uint64:\n\t\tfastpathTV.EncMapUint64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uint64:\n\t\tfastpathTV.EncMapUint64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]uintptr:\n\t\tfastpathTV.EncMapUint64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]uintptr:\n\t\tfastpathTV.EncMapUint64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int:\n\t\tfastpathTV.EncMapUint64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int:\n\t\tfastpathTV.EncMapUint64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int8:\n\t\tfastpathTV.EncMapUint64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int8:\n\t\tfastpathTV.EncMapUint64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int16:\n\t\tfastpathTV.EncMapUint64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int16:\n\t\tfastpathTV.EncMapUint64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int32:\n\t\tfastpathTV.EncMapUint64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int32:\n\t\tfastpathTV.EncMapUint64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]int64:\n\t\tfastpathTV.EncMapUint64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]int64:\n\t\tfastpathTV.EncMapUint64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]float32:\n\t\tfastpathTV.EncMapUint64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]float32:\n\t\tfastpathTV.EncMapUint64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]float64:\n\t\tfastpathTV.EncMapUint64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]float64:\n\t\tfastpathTV.EncMapUint64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uint64]bool:\n\t\tfastpathTV.EncMapUint64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uint64]bool:\n\t\tfastpathTV.EncMapUint64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]interface{}:\n\t\tfastpathTV.EncMapUintptrIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]interface{}:\n\t\tfastpathTV.EncMapUintptrIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]string:\n\t\tfastpathTV.EncMapUintptrStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]string:\n\t\tfastpathTV.EncMapUintptrStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint:\n\t\tfastpathTV.EncMapUintptrUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint:\n\t\tfastpathTV.EncMapUintptrUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint8:\n\t\tfastpathTV.EncMapUintptrUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint8:\n\t\tfastpathTV.EncMapUintptrUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint16:\n\t\tfastpathTV.EncMapUintptrUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint16:\n\t\tfastpathTV.EncMapUintptrUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint32:\n\t\tfastpathTV.EncMapUintptrUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint32:\n\t\tfastpathTV.EncMapUintptrUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uint64:\n\t\tfastpathTV.EncMapUintptrUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uint64:\n\t\tfastpathTV.EncMapUintptrUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]uintptr:\n\t\tfastpathTV.EncMapUintptrUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]uintptr:\n\t\tfastpathTV.EncMapUintptrUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int:\n\t\tfastpathTV.EncMapUintptrIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int:\n\t\tfastpathTV.EncMapUintptrIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int8:\n\t\tfastpathTV.EncMapUintptrInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int8:\n\t\tfastpathTV.EncMapUintptrInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int16:\n\t\tfastpathTV.EncMapUintptrInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int16:\n\t\tfastpathTV.EncMapUintptrInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int32:\n\t\tfastpathTV.EncMapUintptrInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int32:\n\t\tfastpathTV.EncMapUintptrInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]int64:\n\t\tfastpathTV.EncMapUintptrInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]int64:\n\t\tfastpathTV.EncMapUintptrInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]float32:\n\t\tfastpathTV.EncMapUintptrFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]float32:\n\t\tfastpathTV.EncMapUintptrFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]float64:\n\t\tfastpathTV.EncMapUintptrFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]float64:\n\t\tfastpathTV.EncMapUintptrFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[uintptr]bool:\n\t\tfastpathTV.EncMapUintptrBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[uintptr]bool:\n\t\tfastpathTV.EncMapUintptrBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]interface{}:\n\t\tfastpathTV.EncMapIntIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]interface{}:\n\t\tfastpathTV.EncMapIntIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]string:\n\t\tfastpathTV.EncMapIntStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]string:\n\t\tfastpathTV.EncMapIntStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint:\n\t\tfastpathTV.EncMapIntUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint:\n\t\tfastpathTV.EncMapIntUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint8:\n\t\tfastpathTV.EncMapIntUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint8:\n\t\tfastpathTV.EncMapIntUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint16:\n\t\tfastpathTV.EncMapIntUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint16:\n\t\tfastpathTV.EncMapIntUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint32:\n\t\tfastpathTV.EncMapIntUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint32:\n\t\tfastpathTV.EncMapIntUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uint64:\n\t\tfastpathTV.EncMapIntUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uint64:\n\t\tfastpathTV.EncMapIntUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]uintptr:\n\t\tfastpathTV.EncMapIntUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]uintptr:\n\t\tfastpathTV.EncMapIntUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int:\n\t\tfastpathTV.EncMapIntIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int:\n\t\tfastpathTV.EncMapIntIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int8:\n\t\tfastpathTV.EncMapIntInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int8:\n\t\tfastpathTV.EncMapIntInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int16:\n\t\tfastpathTV.EncMapIntInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int16:\n\t\tfastpathTV.EncMapIntInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int32:\n\t\tfastpathTV.EncMapIntInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int32:\n\t\tfastpathTV.EncMapIntInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]int64:\n\t\tfastpathTV.EncMapIntInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]int64:\n\t\tfastpathTV.EncMapIntInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]float32:\n\t\tfastpathTV.EncMapIntFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]float32:\n\t\tfastpathTV.EncMapIntFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]float64:\n\t\tfastpathTV.EncMapIntFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int]float64:\n\t\tfastpathTV.EncMapIntFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int]bool:\n\t\tfastpathTV.EncMapIntBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int]bool:\n\t\tfastpathTV.EncMapIntBoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]interface{}:\n\t\tfastpathTV.EncMapInt8IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]interface{}:\n\t\tfastpathTV.EncMapInt8IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]string:\n\t\tfastpathTV.EncMapInt8StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]string:\n\t\tfastpathTV.EncMapInt8StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint:\n\t\tfastpathTV.EncMapInt8UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint:\n\t\tfastpathTV.EncMapInt8UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint8:\n\t\tfastpathTV.EncMapInt8Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint8:\n\t\tfastpathTV.EncMapInt8Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint16:\n\t\tfastpathTV.EncMapInt8Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint16:\n\t\tfastpathTV.EncMapInt8Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint32:\n\t\tfastpathTV.EncMapInt8Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint32:\n\t\tfastpathTV.EncMapInt8Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uint64:\n\t\tfastpathTV.EncMapInt8Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uint64:\n\t\tfastpathTV.EncMapInt8Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]uintptr:\n\t\tfastpathTV.EncMapInt8UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]uintptr:\n\t\tfastpathTV.EncMapInt8UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int:\n\t\tfastpathTV.EncMapInt8IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int:\n\t\tfastpathTV.EncMapInt8IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int8:\n\t\tfastpathTV.EncMapInt8Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int8:\n\t\tfastpathTV.EncMapInt8Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int16:\n\t\tfastpathTV.EncMapInt8Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int16:\n\t\tfastpathTV.EncMapInt8Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int32:\n\t\tfastpathTV.EncMapInt8Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int32:\n\t\tfastpathTV.EncMapInt8Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]int64:\n\t\tfastpathTV.EncMapInt8Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]int64:\n\t\tfastpathTV.EncMapInt8Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]float32:\n\t\tfastpathTV.EncMapInt8Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]float32:\n\t\tfastpathTV.EncMapInt8Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]float64:\n\t\tfastpathTV.EncMapInt8Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]float64:\n\t\tfastpathTV.EncMapInt8Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int8]bool:\n\t\tfastpathTV.EncMapInt8BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int8]bool:\n\t\tfastpathTV.EncMapInt8BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]interface{}:\n\t\tfastpathTV.EncMapInt16IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]interface{}:\n\t\tfastpathTV.EncMapInt16IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]string:\n\t\tfastpathTV.EncMapInt16StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]string:\n\t\tfastpathTV.EncMapInt16StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint:\n\t\tfastpathTV.EncMapInt16UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint:\n\t\tfastpathTV.EncMapInt16UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint8:\n\t\tfastpathTV.EncMapInt16Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint8:\n\t\tfastpathTV.EncMapInt16Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint16:\n\t\tfastpathTV.EncMapInt16Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint16:\n\t\tfastpathTV.EncMapInt16Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint32:\n\t\tfastpathTV.EncMapInt16Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint32:\n\t\tfastpathTV.EncMapInt16Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uint64:\n\t\tfastpathTV.EncMapInt16Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uint64:\n\t\tfastpathTV.EncMapInt16Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]uintptr:\n\t\tfastpathTV.EncMapInt16UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]uintptr:\n\t\tfastpathTV.EncMapInt16UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int:\n\t\tfastpathTV.EncMapInt16IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int:\n\t\tfastpathTV.EncMapInt16IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int8:\n\t\tfastpathTV.EncMapInt16Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int8:\n\t\tfastpathTV.EncMapInt16Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int16:\n\t\tfastpathTV.EncMapInt16Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int16:\n\t\tfastpathTV.EncMapInt16Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int32:\n\t\tfastpathTV.EncMapInt16Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int32:\n\t\tfastpathTV.EncMapInt16Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]int64:\n\t\tfastpathTV.EncMapInt16Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]int64:\n\t\tfastpathTV.EncMapInt16Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]float32:\n\t\tfastpathTV.EncMapInt16Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]float32:\n\t\tfastpathTV.EncMapInt16Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]float64:\n\t\tfastpathTV.EncMapInt16Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]float64:\n\t\tfastpathTV.EncMapInt16Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int16]bool:\n\t\tfastpathTV.EncMapInt16BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int16]bool:\n\t\tfastpathTV.EncMapInt16BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]interface{}:\n\t\tfastpathTV.EncMapInt32IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]interface{}:\n\t\tfastpathTV.EncMapInt32IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]string:\n\t\tfastpathTV.EncMapInt32StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]string:\n\t\tfastpathTV.EncMapInt32StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint:\n\t\tfastpathTV.EncMapInt32UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint:\n\t\tfastpathTV.EncMapInt32UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint8:\n\t\tfastpathTV.EncMapInt32Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint8:\n\t\tfastpathTV.EncMapInt32Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint16:\n\t\tfastpathTV.EncMapInt32Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint16:\n\t\tfastpathTV.EncMapInt32Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint32:\n\t\tfastpathTV.EncMapInt32Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint32:\n\t\tfastpathTV.EncMapInt32Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uint64:\n\t\tfastpathTV.EncMapInt32Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uint64:\n\t\tfastpathTV.EncMapInt32Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]uintptr:\n\t\tfastpathTV.EncMapInt32UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]uintptr:\n\t\tfastpathTV.EncMapInt32UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int:\n\t\tfastpathTV.EncMapInt32IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int:\n\t\tfastpathTV.EncMapInt32IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int8:\n\t\tfastpathTV.EncMapInt32Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int8:\n\t\tfastpathTV.EncMapInt32Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int16:\n\t\tfastpathTV.EncMapInt32Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int16:\n\t\tfastpathTV.EncMapInt32Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int32:\n\t\tfastpathTV.EncMapInt32Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int32:\n\t\tfastpathTV.EncMapInt32Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]int64:\n\t\tfastpathTV.EncMapInt32Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]int64:\n\t\tfastpathTV.EncMapInt32Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]float32:\n\t\tfastpathTV.EncMapInt32Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]float32:\n\t\tfastpathTV.EncMapInt32Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]float64:\n\t\tfastpathTV.EncMapInt32Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]float64:\n\t\tfastpathTV.EncMapInt32Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int32]bool:\n\t\tfastpathTV.EncMapInt32BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int32]bool:\n\t\tfastpathTV.EncMapInt32BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]interface{}:\n\t\tfastpathTV.EncMapInt64IntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]interface{}:\n\t\tfastpathTV.EncMapInt64IntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]string:\n\t\tfastpathTV.EncMapInt64StringV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]string:\n\t\tfastpathTV.EncMapInt64StringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint:\n\t\tfastpathTV.EncMapInt64UintV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint:\n\t\tfastpathTV.EncMapInt64UintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint8:\n\t\tfastpathTV.EncMapInt64Uint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint8:\n\t\tfastpathTV.EncMapInt64Uint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint16:\n\t\tfastpathTV.EncMapInt64Uint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint16:\n\t\tfastpathTV.EncMapInt64Uint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint32:\n\t\tfastpathTV.EncMapInt64Uint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint32:\n\t\tfastpathTV.EncMapInt64Uint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uint64:\n\t\tfastpathTV.EncMapInt64Uint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uint64:\n\t\tfastpathTV.EncMapInt64Uint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]uintptr:\n\t\tfastpathTV.EncMapInt64UintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]uintptr:\n\t\tfastpathTV.EncMapInt64UintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int:\n\t\tfastpathTV.EncMapInt64IntV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int:\n\t\tfastpathTV.EncMapInt64IntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int8:\n\t\tfastpathTV.EncMapInt64Int8V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int8:\n\t\tfastpathTV.EncMapInt64Int8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int16:\n\t\tfastpathTV.EncMapInt64Int16V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int16:\n\t\tfastpathTV.EncMapInt64Int16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int32:\n\t\tfastpathTV.EncMapInt64Int32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int32:\n\t\tfastpathTV.EncMapInt64Int32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]int64:\n\t\tfastpathTV.EncMapInt64Int64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]int64:\n\t\tfastpathTV.EncMapInt64Int64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]float32:\n\t\tfastpathTV.EncMapInt64Float32V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]float32:\n\t\tfastpathTV.EncMapInt64Float32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]float64:\n\t\tfastpathTV.EncMapInt64Float64V(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]float64:\n\t\tfastpathTV.EncMapInt64Float64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[int64]bool:\n\t\tfastpathTV.EncMapInt64BoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[int64]bool:\n\t\tfastpathTV.EncMapInt64BoolV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]interface{}:\n\t\tfastpathTV.EncMapBoolIntfV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]interface{}:\n\t\tfastpathTV.EncMapBoolIntfV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]string:\n\t\tfastpathTV.EncMapBoolStringV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]string:\n\t\tfastpathTV.EncMapBoolStringV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint:\n\t\tfastpathTV.EncMapBoolUintV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint:\n\t\tfastpathTV.EncMapBoolUintV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint8:\n\t\tfastpathTV.EncMapBoolUint8V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint8:\n\t\tfastpathTV.EncMapBoolUint8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint16:\n\t\tfastpathTV.EncMapBoolUint16V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint16:\n\t\tfastpathTV.EncMapBoolUint16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint32:\n\t\tfastpathTV.EncMapBoolUint32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint32:\n\t\tfastpathTV.EncMapBoolUint32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uint64:\n\t\tfastpathTV.EncMapBoolUint64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uint64:\n\t\tfastpathTV.EncMapBoolUint64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]uintptr:\n\t\tfastpathTV.EncMapBoolUintptrV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]uintptr:\n\t\tfastpathTV.EncMapBoolUintptrV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int:\n\t\tfastpathTV.EncMapBoolIntV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int:\n\t\tfastpathTV.EncMapBoolIntV(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int8:\n\t\tfastpathTV.EncMapBoolInt8V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int8:\n\t\tfastpathTV.EncMapBoolInt8V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int16:\n\t\tfastpathTV.EncMapBoolInt16V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int16:\n\t\tfastpathTV.EncMapBoolInt16V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int32:\n\t\tfastpathTV.EncMapBoolInt32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int32:\n\t\tfastpathTV.EncMapBoolInt32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]int64:\n\t\tfastpathTV.EncMapBoolInt64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]int64:\n\t\tfastpathTV.EncMapBoolInt64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]float32:\n\t\tfastpathTV.EncMapBoolFloat32V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]float32:\n\t\tfastpathTV.EncMapBoolFloat32V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]float64:\n\t\tfastpathTV.EncMapBoolFloat64V(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]float64:\n\t\tfastpathTV.EncMapBoolFloat64V(*v, fastpathCheckNilTrue, e)\n\n\tcase map[bool]bool:\n\t\tfastpathTV.EncMapBoolBoolV(v, fastpathCheckNilTrue, e)\n\tcase *map[bool]bool:\n\t\tfastpathTV.EncMapBoolBoolV(*v, fastpathCheckNilTrue, e)\n\n\tdefault:\n\t\t_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)\n\t\treturn false\n\t}\n\treturn true\n}\n\n// -- -- fast path functions\n\nfunc (f *encFnInfo) fastpathEncSliceIntfR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceIntfV(rv.Interface().([]interface{}), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceIntfV(rv.Interface().([]interface{}), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceIntfV(v []interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\te.encode(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceIntfV(v []interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\te.encode(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceStringR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceStringV(rv.Interface().([]string), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceStringV(rv.Interface().([]string), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceStringV(v []string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeString(c_UTF8, v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceStringV(v []string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeString(c_UTF8, v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceFloat32R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceFloat32V(rv.Interface().([]float32), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceFloat32V(rv.Interface().([]float32), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceFloat32V(v []float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeFloat32(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceFloat32V(v []float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeFloat32(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceFloat64R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceFloat64V(rv.Interface().([]float64), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceFloat64V(rv.Interface().([]float64), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceFloat64V(v []float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeFloat64(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceFloat64V(v []float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeFloat64(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceUintR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceUintV(rv.Interface().([]uint), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceUintV(rv.Interface().([]uint), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceUintV(v []uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceUintV(v []uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceUint16R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceUint16V(rv.Interface().([]uint16), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceUint16V(rv.Interface().([]uint16), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceUint16V(v []uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceUint16V(v []uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceUint32R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceUint32V(rv.Interface().([]uint32), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceUint32V(rv.Interface().([]uint32), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceUint32V(v []uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceUint32V(v []uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceUint64R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceUint64V(rv.Interface().([]uint64), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceUint64V(rv.Interface().([]uint64), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceUint64V(v []uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceUint64V(v []uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeUint(uint64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceUintptrR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceUintptrV(rv.Interface().([]uintptr), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceUintptrV(rv.Interface().([]uintptr), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceUintptrV(v []uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\te.encode(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceUintptrV(v []uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\te.encode(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceIntR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceIntV(rv.Interface().([]int), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceIntV(rv.Interface().([]int), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceIntV(v []int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceIntV(v []int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceInt8R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceInt8V(rv.Interface().([]int8), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceInt8V(rv.Interface().([]int8), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceInt8V(v []int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceInt8V(v []int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceInt16R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceInt16V(rv.Interface().([]int16), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceInt16V(rv.Interface().([]int16), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceInt16V(v []int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceInt16V(v []int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceInt32R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceInt32V(rv.Interface().([]int32), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceInt32V(rv.Interface().([]int32), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceInt32V(v []int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceInt32V(v []int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceInt64R(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceInt64V(rv.Interface().([]int64), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceInt64V(rv.Interface().([]int64), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceInt64V(v []int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceInt64V(v []int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeInt(int64(v2))\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncSliceBoolR(rv reflect.Value) {\n\tif f.ti.mbs {\n\t\tfastpathTV.EncAsMapSliceBoolV(rv.Interface().([]bool), fastpathCheckNilFalse, f.e)\n\t} else {\n\t\tfastpathTV.EncSliceBoolV(rv.Interface().([]bool), fastpathCheckNilFalse, f.e)\n\t}\n}\nfunc (_ fastpathT) EncSliceBoolV(v []bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeArrayStart(len(v))\n\tfor _, v2 := range v {\n\t\tif cr != nil {\n\t\t\tcr.sendContainerState(containerArrayElem)\n\t\t}\n\t\tee.EncodeBool(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerArrayEnd)\n\t}\n}\n\nfunc (_ fastpathT) EncAsMapSliceBoolV(v []bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tif len(v)%2 == 1 {\n\t\te.errorf(\"mapBySlice requires even slice length, but got %v\", len(v))\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v) / 2)\n\tfor j, v2 := range v {\n\t\tif cr != nil {\n\t\t\tif j%2 == 0 {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t} else {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t}\n\t\tee.EncodeBool(v2)\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfIntfV(rv.Interface().(map[interface{}]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfStringR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfStringV(rv.Interface().(map[interface{}]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfStringV(v map[interface{}]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUintR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUintV(rv.Interface().(map[interface{}]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUintV(v map[interface{}]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUint8V(rv.Interface().(map[interface{}]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUint8V(v map[interface{}]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUint16V(rv.Interface().(map[interface{}]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUint16V(v map[interface{}]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUint32V(rv.Interface().(map[interface{}]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUint32V(v map[interface{}]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUint64V(rv.Interface().(map[interface{}]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUint64V(v map[interface{}]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfUintptrV(rv.Interface().(map[interface{}]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfIntR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfIntV(rv.Interface().(map[interface{}]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfIntV(v map[interface{}]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfInt8V(rv.Interface().(map[interface{}]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfInt8V(v map[interface{}]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfInt16V(rv.Interface().(map[interface{}]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfInt16V(v map[interface{}]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfInt32V(rv.Interface().(map[interface{}]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfInt32V(v map[interface{}]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfInt64V(rv.Interface().(map[interface{}]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfInt64V(v map[interface{}]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfFloat32V(rv.Interface().(map[interface{}]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfFloat32V(v map[interface{}]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntfFloat64V(rv.Interface().(map[interface{}]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfFloat64V(v map[interface{}]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntfBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapIntfBoolV(rv.Interface().(map[interface{}]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntfBoolV(v map[interface{}]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tvar mksv []byte = make([]byte, 0, len(v)*16) // temporary byte slice for the encoding\n\t\te2 := NewEncoderBytes(&mksv, e.hh)\n\t\tv2 := make([]bytesI, len(v))\n\t\tvar i, l int\n\t\tvar vp *bytesI\n\t\tfor k2, _ := range v {\n\t\t\tl = len(mksv)\n\t\t\te2.MustEncode(k2)\n\t\t\tvp = &v2[i]\n\t\t\tvp.v = mksv[l:]\n\t\t\tvp.i = k2\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(bytesISlice(v2))\n\t\tfor j := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.asis(v2[j].v)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[v2[j].i])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapStringIntfV(rv.Interface().(map[string]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringIntfV(v map[string]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringStringR(rv reflect.Value) {\n\tfastpathTV.EncMapStringStringV(rv.Interface().(map[string]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringStringV(v map[string]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUintR(rv reflect.Value) {\n\tfastpathTV.EncMapStringUintV(rv.Interface().(map[string]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUintV(v map[string]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapStringUint8V(rv.Interface().(map[string]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUint8V(v map[string]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapStringUint16V(rv.Interface().(map[string]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUint16V(v map[string]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapStringUint32V(rv.Interface().(map[string]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUint32V(v map[string]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapStringUint64V(rv.Interface().(map[string]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUint64V(v map[string]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapStringUintptrV(rv.Interface().(map[string]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringUintptrV(v map[string]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringIntR(rv reflect.Value) {\n\tfastpathTV.EncMapStringIntV(rv.Interface().(map[string]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringIntV(v map[string]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapStringInt8V(rv.Interface().(map[string]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringInt8V(v map[string]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapStringInt16V(rv.Interface().(map[string]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringInt16V(v map[string]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapStringInt32V(rv.Interface().(map[string]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringInt32V(v map[string]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapStringInt64V(rv.Interface().(map[string]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringInt64V(v map[string]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[string(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapStringFloat32V(rv.Interface().(map[string]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringFloat32V(v map[string]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapStringFloat64V(rv.Interface().(map[string]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringFloat64V(v map[string]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapStringBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapStringBoolV(rv.Interface().(map[string]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapStringBoolV(v map[string]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tasSymbols := e.h.AsSymbols&AsSymbolMapStringKeysFlag != 0\n\tif e.h.Canonical {\n\t\tv2 := make([]string, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = string(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(stringSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[string(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tif asSymbols {\n\t\t\t\tee.EncodeSymbol(k2)\n\t\t\t} else {\n\t\t\t\tee.EncodeString(c_UTF8, k2)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32IntfV(rv.Interface().(map[float32]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32IntfV(v map[float32]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32StringR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32StringV(rv.Interface().(map[float32]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32StringV(v map[float32]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32UintR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32UintV(rv.Interface().(map[float32]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32UintV(v map[float32]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Uint8V(rv.Interface().(map[float32]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Uint8V(v map[float32]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Uint16V(rv.Interface().(map[float32]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Uint16V(v map[float32]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Uint32V(rv.Interface().(map[float32]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Uint32V(v map[float32]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Uint64V(rv.Interface().(map[float32]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Uint64V(v map[float32]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32UintptrV(rv.Interface().(map[float32]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32IntR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32IntV(rv.Interface().(map[float32]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32IntV(v map[float32]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Int8V(rv.Interface().(map[float32]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Int8V(v map[float32]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Int16V(rv.Interface().(map[float32]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Int16V(v map[float32]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Int32V(rv.Interface().(map[float32]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Int32V(v map[float32]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Int64V(rv.Interface().(map[float32]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Int64V(v map[float32]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Float32V(rv.Interface().(map[float32]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Float32V(v map[float32]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32Float64V(rv.Interface().(map[float32]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32Float64V(v map[float32]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat32BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat32BoolV(rv.Interface().(map[float32]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat32BoolV(v map[float32]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(float32(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[float32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat32(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64IntfV(rv.Interface().(map[float64]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64IntfV(v map[float64]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64StringR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64StringV(rv.Interface().(map[float64]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64StringV(v map[float64]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64UintR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64UintV(rv.Interface().(map[float64]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64UintV(v map[float64]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Uint8V(rv.Interface().(map[float64]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Uint8V(v map[float64]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Uint16V(rv.Interface().(map[float64]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Uint16V(v map[float64]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Uint32V(rv.Interface().(map[float64]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Uint32V(v map[float64]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Uint64V(rv.Interface().(map[float64]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Uint64V(v map[float64]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64UintptrV(rv.Interface().(map[float64]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64IntR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64IntV(rv.Interface().(map[float64]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64IntV(v map[float64]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Int8V(rv.Interface().(map[float64]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Int8V(v map[float64]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Int16V(rv.Interface().(map[float64]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Int16V(v map[float64]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Int32V(rv.Interface().(map[float64]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Int32V(v map[float64]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Int64V(rv.Interface().(map[float64]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Int64V(v map[float64]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[float64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Float32V(rv.Interface().(map[float64]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Float32V(v map[float64]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64Float64V(rv.Interface().(map[float64]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64Float64V(v map[float64]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapFloat64BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapFloat64BoolV(rv.Interface().(map[float64]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapFloat64BoolV(v map[float64]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]float64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = float64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(floatSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(float64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[float64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeFloat64(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUintIntfV(rv.Interface().(map[uint]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintIntfV(v map[uint]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintStringR(rv reflect.Value) {\n\tfastpathTV.EncMapUintStringV(rv.Interface().(map[uint]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintStringV(v map[uint]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUintR(rv reflect.Value) {\n\tfastpathTV.EncMapUintUintV(rv.Interface().(map[uint]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUintV(v map[uint]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUintUint8V(rv.Interface().(map[uint]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUint8V(v map[uint]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUintUint16V(rv.Interface().(map[uint]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUint16V(v map[uint]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintUint32V(rv.Interface().(map[uint]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUint32V(v map[uint]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintUint64V(rv.Interface().(map[uint]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUint64V(v map[uint]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUintUintptrV(rv.Interface().(map[uint]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintUintptrV(v map[uint]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintIntR(rv reflect.Value) {\n\tfastpathTV.EncMapUintIntV(rv.Interface().(map[uint]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintIntV(v map[uint]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapUintInt8V(rv.Interface().(map[uint]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintInt8V(v map[uint]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapUintInt16V(rv.Interface().(map[uint]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintInt16V(v map[uint]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintInt32V(rv.Interface().(map[uint]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintInt32V(v map[uint]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintInt64V(rv.Interface().(map[uint]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintInt64V(v map[uint]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintFloat32V(rv.Interface().(map[uint]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintFloat32V(v map[uint]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintFloat64V(rv.Interface().(map[uint]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintFloat64V(v map[uint]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUintBoolV(rv.Interface().(map[uint]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintBoolV(v map[uint]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uint(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8IntfV(rv.Interface().(map[uint8]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8IntfV(v map[uint8]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8StringR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8StringV(rv.Interface().(map[uint8]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8StringV(v map[uint8]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8UintR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8UintV(rv.Interface().(map[uint8]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8UintV(v map[uint8]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Uint8V(rv.Interface().(map[uint8]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Uint8V(v map[uint8]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Uint16V(rv.Interface().(map[uint8]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Uint16V(v map[uint8]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Uint32V(rv.Interface().(map[uint8]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Uint32V(v map[uint8]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Uint64V(rv.Interface().(map[uint8]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Uint64V(v map[uint8]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8UintptrV(rv.Interface().(map[uint8]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8IntR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8IntV(rv.Interface().(map[uint8]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8IntV(v map[uint8]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Int8V(rv.Interface().(map[uint8]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Int8V(v map[uint8]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Int16V(rv.Interface().(map[uint8]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Int16V(v map[uint8]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Int32V(rv.Interface().(map[uint8]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Int32V(v map[uint8]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Int64V(rv.Interface().(map[uint8]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Int64V(v map[uint8]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Float32V(rv.Interface().(map[uint8]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Float32V(v map[uint8]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint8Float64V(rv.Interface().(map[uint8]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8Float64V(v map[uint8]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint8BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUint8BoolV(rv.Interface().(map[uint8]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint8BoolV(v map[uint8]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uint8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16IntfV(rv.Interface().(map[uint16]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16IntfV(v map[uint16]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16StringR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16StringV(rv.Interface().(map[uint16]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16StringV(v map[uint16]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16UintR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16UintV(rv.Interface().(map[uint16]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16UintV(v map[uint16]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Uint8V(rv.Interface().(map[uint16]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Uint8V(v map[uint16]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Uint16V(rv.Interface().(map[uint16]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Uint16V(v map[uint16]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Uint32V(rv.Interface().(map[uint16]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Uint32V(v map[uint16]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Uint64V(rv.Interface().(map[uint16]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Uint64V(v map[uint16]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16UintptrV(rv.Interface().(map[uint16]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16IntR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16IntV(rv.Interface().(map[uint16]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16IntV(v map[uint16]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Int8V(rv.Interface().(map[uint16]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Int8V(v map[uint16]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Int16V(rv.Interface().(map[uint16]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Int16V(v map[uint16]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Int32V(rv.Interface().(map[uint16]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Int32V(v map[uint16]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Int64V(rv.Interface().(map[uint16]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Int64V(v map[uint16]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Float32V(rv.Interface().(map[uint16]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Float32V(v map[uint16]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint16Float64V(rv.Interface().(map[uint16]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16Float64V(v map[uint16]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint16BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUint16BoolV(rv.Interface().(map[uint16]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint16BoolV(v map[uint16]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uint16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32IntfV(rv.Interface().(map[uint32]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32IntfV(v map[uint32]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32StringR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32StringV(rv.Interface().(map[uint32]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32StringV(v map[uint32]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32UintR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32UintV(rv.Interface().(map[uint32]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32UintV(v map[uint32]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Uint8V(rv.Interface().(map[uint32]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Uint8V(v map[uint32]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Uint16V(rv.Interface().(map[uint32]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Uint16V(v map[uint32]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Uint32V(rv.Interface().(map[uint32]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Uint32V(v map[uint32]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Uint64V(rv.Interface().(map[uint32]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Uint64V(v map[uint32]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32UintptrV(rv.Interface().(map[uint32]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32IntR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32IntV(rv.Interface().(map[uint32]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32IntV(v map[uint32]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Int8V(rv.Interface().(map[uint32]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Int8V(v map[uint32]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Int16V(rv.Interface().(map[uint32]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Int16V(v map[uint32]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Int32V(rv.Interface().(map[uint32]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Int32V(v map[uint32]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Int64V(rv.Interface().(map[uint32]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Int64V(v map[uint32]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Float32V(rv.Interface().(map[uint32]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Float32V(v map[uint32]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint32Float64V(rv.Interface().(map[uint32]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32Float64V(v map[uint32]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint32BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUint32BoolV(rv.Interface().(map[uint32]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint32BoolV(v map[uint32]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uint32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64IntfV(rv.Interface().(map[uint64]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64IntfV(v map[uint64]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64StringR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64StringV(rv.Interface().(map[uint64]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64StringV(v map[uint64]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64UintR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64UintV(rv.Interface().(map[uint64]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64UintV(v map[uint64]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Uint8V(rv.Interface().(map[uint64]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Uint8V(v map[uint64]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Uint16V(rv.Interface().(map[uint64]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Uint16V(v map[uint64]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Uint32V(rv.Interface().(map[uint64]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Uint32V(v map[uint64]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Uint64V(rv.Interface().(map[uint64]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Uint64V(v map[uint64]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64UintptrV(rv.Interface().(map[uint64]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64IntR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64IntV(rv.Interface().(map[uint64]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64IntV(v map[uint64]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Int8V(rv.Interface().(map[uint64]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Int8V(v map[uint64]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Int16V(rv.Interface().(map[uint64]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Int16V(v map[uint64]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Int32V(rv.Interface().(map[uint64]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Int32V(v map[uint64]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Int64V(rv.Interface().(map[uint64]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Int64V(v map[uint64]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uint64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Float32V(rv.Interface().(map[uint64]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Float32V(v map[uint64]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapUint64Float64V(rv.Interface().(map[uint64]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64Float64V(v map[uint64]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUint64BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUint64BoolV(rv.Interface().(map[uint64]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUint64BoolV(v map[uint64]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(uint64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uint64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrIntfV(rv.Interface().(map[uintptr]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrStringR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrStringV(rv.Interface().(map[uintptr]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrStringV(v map[uintptr]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUintR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUintV(rv.Interface().(map[uintptr]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUintV(v map[uintptr]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUint8V(rv.Interface().(map[uintptr]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUint16V(rv.Interface().(map[uintptr]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUint32V(rv.Interface().(map[uintptr]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUint64V(rv.Interface().(map[uintptr]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrUintptrV(rv.Interface().(map[uintptr]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrIntR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrIntV(rv.Interface().(map[uintptr]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrIntV(v map[uintptr]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrInt8V(rv.Interface().(map[uintptr]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrInt8V(v map[uintptr]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrInt16V(rv.Interface().(map[uintptr]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrInt16V(v map[uintptr]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrInt32V(rv.Interface().(map[uintptr]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrInt32V(v map[uintptr]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrInt64V(rv.Interface().(map[uintptr]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrInt64V(v map[uintptr]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[uintptr(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrFloat32V(rv.Interface().(map[uintptr]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrFloat64V(rv.Interface().(map[uintptr]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapUintptrBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapUintptrBoolV(rv.Interface().(map[uintptr]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapUintptrBoolV(v map[uintptr]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]uint64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = uint64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(uintSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(uintptr(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[uintptr(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\te.encode(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapIntIntfV(rv.Interface().(map[int]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntIntfV(v map[int]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntStringR(rv reflect.Value) {\n\tfastpathTV.EncMapIntStringV(rv.Interface().(map[int]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntStringV(v map[int]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUintR(rv reflect.Value) {\n\tfastpathTV.EncMapIntUintV(rv.Interface().(map[int]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUintV(v map[int]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapIntUint8V(rv.Interface().(map[int]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUint8V(v map[int]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapIntUint16V(rv.Interface().(map[int]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUint16V(v map[int]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntUint32V(rv.Interface().(map[int]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUint32V(v map[int]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntUint64V(rv.Interface().(map[int]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUint64V(v map[int]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapIntUintptrV(rv.Interface().(map[int]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntUintptrV(v map[int]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntIntR(rv reflect.Value) {\n\tfastpathTV.EncMapIntIntV(rv.Interface().(map[int]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntIntV(v map[int]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapIntInt8V(rv.Interface().(map[int]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntInt8V(v map[int]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapIntInt16V(rv.Interface().(map[int]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntInt16V(v map[int]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntInt32V(rv.Interface().(map[int]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntInt32V(v map[int]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntInt64V(rv.Interface().(map[int]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntInt64V(v map[int]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapIntFloat32V(rv.Interface().(map[int]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntFloat32V(v map[int]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapIntFloat64V(rv.Interface().(map[int]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntFloat64V(v map[int]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapIntBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapIntBoolV(rv.Interface().(map[int]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapIntBoolV(v map[int]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[int(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8IntfV(rv.Interface().(map[int8]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8IntfV(v map[int8]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8StringR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8StringV(rv.Interface().(map[int8]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8StringV(v map[int8]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8UintR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8UintV(rv.Interface().(map[int8]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8UintV(v map[int8]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Uint8V(rv.Interface().(map[int8]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Uint8V(v map[int8]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Uint16V(rv.Interface().(map[int8]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Uint16V(v map[int8]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Uint32V(rv.Interface().(map[int8]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Uint32V(v map[int8]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Uint64V(rv.Interface().(map[int8]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Uint64V(v map[int8]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8UintptrV(rv.Interface().(map[int8]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8UintptrV(v map[int8]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8IntR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8IntV(rv.Interface().(map[int8]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8IntV(v map[int8]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Int8V(rv.Interface().(map[int8]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Int8V(v map[int8]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Int16V(rv.Interface().(map[int8]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Int16V(v map[int8]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Int32V(rv.Interface().(map[int8]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Int32V(v map[int8]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Int64V(rv.Interface().(map[int8]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Int64V(v map[int8]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int8(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Float32V(rv.Interface().(map[int8]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Float32V(v map[int8]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt8Float64V(rv.Interface().(map[int8]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8Float64V(v map[int8]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt8BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapInt8BoolV(rv.Interface().(map[int8]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt8BoolV(v map[int8]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int8(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[int8(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16IntfV(rv.Interface().(map[int16]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16IntfV(v map[int16]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16StringR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16StringV(rv.Interface().(map[int16]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16StringV(v map[int16]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16UintR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16UintV(rv.Interface().(map[int16]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16UintV(v map[int16]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Uint8V(rv.Interface().(map[int16]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Uint8V(v map[int16]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Uint16V(rv.Interface().(map[int16]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Uint16V(v map[int16]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Uint32V(rv.Interface().(map[int16]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Uint32V(v map[int16]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Uint64V(rv.Interface().(map[int16]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Uint64V(v map[int16]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16UintptrV(rv.Interface().(map[int16]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16UintptrV(v map[int16]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16IntR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16IntV(rv.Interface().(map[int16]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16IntV(v map[int16]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Int8V(rv.Interface().(map[int16]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Int8V(v map[int16]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Int16V(rv.Interface().(map[int16]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Int16V(v map[int16]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Int32V(rv.Interface().(map[int16]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Int32V(v map[int16]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Int64V(rv.Interface().(map[int16]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Int64V(v map[int16]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int16(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Float32V(rv.Interface().(map[int16]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Float32V(v map[int16]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt16Float64V(rv.Interface().(map[int16]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16Float64V(v map[int16]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt16BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapInt16BoolV(rv.Interface().(map[int16]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt16BoolV(v map[int16]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int16(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[int16(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32IntfV(rv.Interface().(map[int32]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32IntfV(v map[int32]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32StringR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32StringV(rv.Interface().(map[int32]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32StringV(v map[int32]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32UintR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32UintV(rv.Interface().(map[int32]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32UintV(v map[int32]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Uint8V(rv.Interface().(map[int32]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Uint8V(v map[int32]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Uint16V(rv.Interface().(map[int32]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Uint16V(v map[int32]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Uint32V(rv.Interface().(map[int32]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Uint32V(v map[int32]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Uint64V(rv.Interface().(map[int32]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Uint64V(v map[int32]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32UintptrV(rv.Interface().(map[int32]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32UintptrV(v map[int32]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32IntR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32IntV(rv.Interface().(map[int32]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32IntV(v map[int32]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Int8V(rv.Interface().(map[int32]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Int8V(v map[int32]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Int16V(rv.Interface().(map[int32]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Int16V(v map[int32]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Int32V(rv.Interface().(map[int32]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Int32V(v map[int32]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Int64V(rv.Interface().(map[int32]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Int64V(v map[int32]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int32(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Float32V(rv.Interface().(map[int32]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Float32V(v map[int32]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt32Float64V(rv.Interface().(map[int32]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32Float64V(v map[int32]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt32BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapInt32BoolV(rv.Interface().(map[int32]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt32BoolV(v map[int32]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int32(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[int32(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64IntfR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64IntfV(rv.Interface().(map[int64]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64IntfV(v map[int64]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64StringR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64StringV(rv.Interface().(map[int64]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64StringV(v map[int64]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64UintR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64UintV(rv.Interface().(map[int64]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64UintV(v map[int64]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Uint8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Uint8V(rv.Interface().(map[int64]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Uint8V(v map[int64]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Uint16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Uint16V(rv.Interface().(map[int64]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Uint16V(v map[int64]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Uint32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Uint32V(rv.Interface().(map[int64]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Uint32V(v map[int64]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Uint64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Uint64V(rv.Interface().(map[int64]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Uint64V(v map[int64]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64UintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64UintptrV(rv.Interface().(map[int64]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64UintptrV(v map[int64]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64IntR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64IntV(rv.Interface().(map[int64]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64IntV(v map[int64]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Int8R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Int8V(rv.Interface().(map[int64]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Int8V(v map[int64]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Int16R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Int16V(rv.Interface().(map[int64]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Int16V(v map[int64]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Int32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Int32V(rv.Interface().(map[int64]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Int32V(v map[int64]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Int64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Int64V(rv.Interface().(map[int64]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Int64V(v map[int64]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[int64(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Float32R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Float32V(rv.Interface().(map[int64]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Float32V(v map[int64]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64Float64R(rv reflect.Value) {\n\tfastpathTV.EncMapInt64Float64V(rv.Interface().(map[int64]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64Float64V(v map[int64]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapInt64BoolR(rv reflect.Value) {\n\tfastpathTV.EncMapInt64BoolV(rv.Interface().(map[int64]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapInt64BoolV(v map[int64]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]int64, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = int64(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(intSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(int64(k2)))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[int64(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolIntfR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolIntfV(rv.Interface().(map[bool]interface{}), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolIntfV(v map[bool]interface{}, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolStringR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolStringV(rv.Interface().(map[bool]string), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolStringV(v map[bool]string, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeString(c_UTF8, v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUintR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUintV(rv.Interface().(map[bool]uint), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUintV(v map[bool]uint, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUint8R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUint8V(rv.Interface().(map[bool]uint8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUint8V(v map[bool]uint8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUint16R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUint16V(rv.Interface().(map[bool]uint16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUint16V(v map[bool]uint16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUint32R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUint32V(rv.Interface().(map[bool]uint32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUint32V(v map[bool]uint32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUint64R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUint64V(rv.Interface().(map[bool]uint64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUint64V(v map[bool]uint64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeUint(uint64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolUintptrR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolUintptrV(rv.Interface().(map[bool]uintptr), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolUintptrV(v map[bool]uintptr, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\te.encode(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolIntR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolIntV(rv.Interface().(map[bool]int), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolIntV(v map[bool]int, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolInt8R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolInt8V(rv.Interface().(map[bool]int8), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolInt8V(v map[bool]int8, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolInt16R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolInt16V(rv.Interface().(map[bool]int16), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolInt16V(v map[bool]int16, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolInt32R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolInt32V(rv.Interface().(map[bool]int32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolInt32V(v map[bool]int32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolInt64R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolInt64V(rv.Interface().(map[bool]int64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolInt64V(v map[bool]int64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v[bool(k2)]))\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeInt(int64(v2))\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolFloat32R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolFloat32V(rv.Interface().(map[bool]float32), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolFloat32V(v map[bool]float32, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat32(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolFloat64R(rv reflect.Value) {\n\tfastpathTV.EncMapBoolFloat64V(rv.Interface().(map[bool]float64), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolFloat64V(v map[bool]float64, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeFloat64(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\nfunc (f *encFnInfo) fastpathEncMapBoolBoolR(rv reflect.Value) {\n\tfastpathTV.EncMapBoolBoolV(rv.Interface().(map[bool]bool), fastpathCheckNilFalse, f.e)\n}\nfunc (_ fastpathT) EncMapBoolBoolV(v map[bool]bool, checkNil bool, e *Encoder) {\n\tee := e.e\n\tcr := e.cr\n\tif checkNil && v == nil {\n\t\tee.EncodeNil()\n\t\treturn\n\t}\n\tee.EncodeMapStart(len(v))\n\tif e.h.Canonical {\n\t\tv2 := make([]bool, len(v))\n\t\tvar i int\n\t\tfor k, _ := range v {\n\t\t\tv2[i] = bool(k)\n\t\t\ti++\n\t\t}\n\t\tsort.Sort(boolSlice(v2))\n\t\tfor _, k2 := range v2 {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(bool(k2))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v[bool(k2)])\n\t\t}\n\t} else {\n\t\tfor k2, v2 := range v {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tee.EncodeBool(k2)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tee.EncodeBool(v2)\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n}\n\n// -- decode\n\n// -- -- fast path type switch\nfunc fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool {\n\tswitch v := iv.(type) {\n\n\tcase []interface{}:\n\t\tfastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]interface{}:\n\t\tv2, changed2 := fastpathTV.DecSliceIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]interface{}:\n\t\tfastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapIntfIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]string:\n\t\tfastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]string:\n\t\tv2, changed2 := fastpathTV.DecMapIntfStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uint:\n\t\tfastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uint:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uint8:\n\t\tfastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uint16:\n\t\tfastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uint32:\n\t\tfastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uint64:\n\t\tfastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]uintptr:\n\t\tfastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapIntfUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]int:\n\t\tfastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]int:\n\t\tv2, changed2 := fastpathTV.DecMapIntfIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]int8:\n\t\tfastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]int8:\n\t\tv2, changed2 := fastpathTV.DecMapIntfInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]int16:\n\t\tfastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]int16:\n\t\tv2, changed2 := fastpathTV.DecMapIntfInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]int32:\n\t\tfastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]int32:\n\t\tv2, changed2 := fastpathTV.DecMapIntfInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]int64:\n\t\tfastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]int64:\n\t\tv2, changed2 := fastpathTV.DecMapIntfInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]float32:\n\t\tfastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]float32:\n\t\tv2, changed2 := fastpathTV.DecMapIntfFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]float64:\n\t\tfastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]float64:\n\t\tv2, changed2 := fastpathTV.DecMapIntfFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[interface{}]bool:\n\t\tfastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[interface{}]bool:\n\t\tv2, changed2 := fastpathTV.DecMapIntfBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []string:\n\t\tfastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]string:\n\t\tv2, changed2 := fastpathTV.DecSliceStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]interface{}:\n\t\tfastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapStringIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]string:\n\t\tfastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]string:\n\t\tv2, changed2 := fastpathTV.DecMapStringStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uint:\n\t\tfastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uint:\n\t\tv2, changed2 := fastpathTV.DecMapStringUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uint8:\n\t\tfastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapStringUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uint16:\n\t\tfastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapStringUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uint32:\n\t\tfastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapStringUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uint64:\n\t\tfastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapStringUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]uintptr:\n\t\tfastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapStringUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]int:\n\t\tfastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]int:\n\t\tv2, changed2 := fastpathTV.DecMapStringIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]int8:\n\t\tfastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]int8:\n\t\tv2, changed2 := fastpathTV.DecMapStringInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]int16:\n\t\tfastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]int16:\n\t\tv2, changed2 := fastpathTV.DecMapStringInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]int32:\n\t\tfastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]int32:\n\t\tv2, changed2 := fastpathTV.DecMapStringInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]int64:\n\t\tfastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]int64:\n\t\tv2, changed2 := fastpathTV.DecMapStringInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]float32:\n\t\tfastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]float32:\n\t\tv2, changed2 := fastpathTV.DecMapStringFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]float64:\n\t\tfastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]float64:\n\t\tv2, changed2 := fastpathTV.DecMapStringFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[string]bool:\n\t\tfastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[string]bool:\n\t\tv2, changed2 := fastpathTV.DecMapStringBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []float32:\n\t\tfastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]float32:\n\t\tv2, changed2 := fastpathTV.DecSliceFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]interface{}:\n\t\tfastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]string:\n\t\tfastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]string:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uint:\n\t\tfastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uint:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uint8:\n\t\tfastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uint16:\n\t\tfastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uint32:\n\t\tfastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uint64:\n\t\tfastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]uintptr:\n\t\tfastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]int:\n\t\tfastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]int:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]int8:\n\t\tfastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]int8:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]int16:\n\t\tfastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]int16:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]int32:\n\t\tfastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]int32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]int64:\n\t\tfastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]int64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]float32:\n\t\tfastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]float32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]float64:\n\t\tfastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]float64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float32]bool:\n\t\tfastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float32]bool:\n\t\tv2, changed2 := fastpathTV.DecMapFloat32BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []float64:\n\t\tfastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]float64:\n\t\tv2, changed2 := fastpathTV.DecSliceFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]interface{}:\n\t\tfastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]string:\n\t\tfastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]string:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uint:\n\t\tfastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uint:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uint8:\n\t\tfastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uint16:\n\t\tfastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uint32:\n\t\tfastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uint64:\n\t\tfastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]uintptr:\n\t\tfastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]int:\n\t\tfastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]int:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]int8:\n\t\tfastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]int8:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]int16:\n\t\tfastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]int16:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]int32:\n\t\tfastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]int32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]int64:\n\t\tfastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]int64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]float32:\n\t\tfastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]float32:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]float64:\n\t\tfastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]float64:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[float64]bool:\n\t\tfastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[float64]bool:\n\t\tv2, changed2 := fastpathTV.DecMapFloat64BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []uint:\n\t\tfastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]uint:\n\t\tv2, changed2 := fastpathTV.DecSliceUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]interface{}:\n\t\tfastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUintIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]string:\n\t\tfastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]string:\n\t\tv2, changed2 := fastpathTV.DecMapUintStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uint:\n\t\tfastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUintUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uint8:\n\t\tfastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUintUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uint16:\n\t\tfastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUintUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uint32:\n\t\tfastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUintUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uint64:\n\t\tfastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUintUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]uintptr:\n\t\tfastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUintUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]int:\n\t\tfastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]int:\n\t\tv2, changed2 := fastpathTV.DecMapUintIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]int8:\n\t\tfastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUintInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]int16:\n\t\tfastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUintInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]int32:\n\t\tfastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUintInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]int64:\n\t\tfastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUintInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]float32:\n\t\tfastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUintFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]float64:\n\t\tfastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUintFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint]bool:\n\t\tfastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUintBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]interface{}:\n\t\tfastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUint8IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]string:\n\t\tfastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]string:\n\t\tv2, changed2 := fastpathTV.DecMapUint8StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uint:\n\t\tfastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUint8UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uint8:\n\t\tfastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uint16:\n\t\tfastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uint32:\n\t\tfastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uint64:\n\t\tfastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]uintptr:\n\t\tfastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUint8UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]int:\n\t\tfastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]int:\n\t\tv2, changed2 := fastpathTV.DecMapUint8IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]int8:\n\t\tfastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]int16:\n\t\tfastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]int32:\n\t\tfastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]int64:\n\t\tfastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]float32:\n\t\tfastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]float64:\n\t\tfastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUint8Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint8]bool:\n\t\tfastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint8]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUint8BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []uint16:\n\t\tfastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]uint16:\n\t\tv2, changed2 := fastpathTV.DecSliceUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]interface{}:\n\t\tfastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUint16IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]string:\n\t\tfastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]string:\n\t\tv2, changed2 := fastpathTV.DecMapUint16StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uint:\n\t\tfastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUint16UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uint8:\n\t\tfastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uint16:\n\t\tfastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uint32:\n\t\tfastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uint64:\n\t\tfastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]uintptr:\n\t\tfastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUint16UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]int:\n\t\tfastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]int:\n\t\tv2, changed2 := fastpathTV.DecMapUint16IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]int8:\n\t\tfastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]int16:\n\t\tfastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]int32:\n\t\tfastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]int64:\n\t\tfastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]float32:\n\t\tfastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]float64:\n\t\tfastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUint16Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint16]bool:\n\t\tfastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint16]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUint16BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []uint32:\n\t\tfastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]uint32:\n\t\tv2, changed2 := fastpathTV.DecSliceUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]interface{}:\n\t\tfastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUint32IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]string:\n\t\tfastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]string:\n\t\tv2, changed2 := fastpathTV.DecMapUint32StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uint:\n\t\tfastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUint32UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uint8:\n\t\tfastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uint16:\n\t\tfastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uint32:\n\t\tfastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uint64:\n\t\tfastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]uintptr:\n\t\tfastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUint32UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]int:\n\t\tfastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]int:\n\t\tv2, changed2 := fastpathTV.DecMapUint32IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]int8:\n\t\tfastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]int16:\n\t\tfastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]int32:\n\t\tfastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]int64:\n\t\tfastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]float32:\n\t\tfastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]float64:\n\t\tfastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUint32Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint32]bool:\n\t\tfastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint32]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUint32BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []uint64:\n\t\tfastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]uint64:\n\t\tv2, changed2 := fastpathTV.DecSliceUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]interface{}:\n\t\tfastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUint64IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]string:\n\t\tfastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]string:\n\t\tv2, changed2 := fastpathTV.DecMapUint64StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uint:\n\t\tfastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUint64UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uint8:\n\t\tfastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uint16:\n\t\tfastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uint32:\n\t\tfastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uint64:\n\t\tfastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]uintptr:\n\t\tfastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUint64UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]int:\n\t\tfastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]int:\n\t\tv2, changed2 := fastpathTV.DecMapUint64IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]int8:\n\t\tfastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]int16:\n\t\tfastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]int32:\n\t\tfastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]int64:\n\t\tfastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]float32:\n\t\tfastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]float64:\n\t\tfastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUint64Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uint64]bool:\n\t\tfastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uint64]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUint64BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []uintptr:\n\t\tfastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]uintptr:\n\t\tv2, changed2 := fastpathTV.DecSliceUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]interface{}:\n\t\tfastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]string:\n\t\tfastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]string:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uint:\n\t\tfastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uint:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uint8:\n\t\tfastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uint16:\n\t\tfastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uint32:\n\t\tfastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uint64:\n\t\tfastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]uintptr:\n\t\tfastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]int:\n\t\tfastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]int:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]int8:\n\t\tfastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]int8:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]int16:\n\t\tfastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]int16:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]int32:\n\t\tfastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]int32:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]int64:\n\t\tfastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]int64:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]float32:\n\t\tfastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]float32:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]float64:\n\t\tfastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]float64:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[uintptr]bool:\n\t\tfastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[uintptr]bool:\n\t\tv2, changed2 := fastpathTV.DecMapUintptrBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []int:\n\t\tfastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]int:\n\t\tv2, changed2 := fastpathTV.DecSliceIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]interface{}:\n\t\tfastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapIntIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]string:\n\t\tfastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]string:\n\t\tv2, changed2 := fastpathTV.DecMapIntStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uint:\n\t\tfastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uint:\n\t\tv2, changed2 := fastpathTV.DecMapIntUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uint8:\n\t\tfastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapIntUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uint16:\n\t\tfastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapIntUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uint32:\n\t\tfastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapIntUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uint64:\n\t\tfastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapIntUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]uintptr:\n\t\tfastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapIntUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]int:\n\t\tfastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]int:\n\t\tv2, changed2 := fastpathTV.DecMapIntIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]int8:\n\t\tfastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]int8:\n\t\tv2, changed2 := fastpathTV.DecMapIntInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]int16:\n\t\tfastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]int16:\n\t\tv2, changed2 := fastpathTV.DecMapIntInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]int32:\n\t\tfastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]int32:\n\t\tv2, changed2 := fastpathTV.DecMapIntInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]int64:\n\t\tfastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]int64:\n\t\tv2, changed2 := fastpathTV.DecMapIntInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]float32:\n\t\tfastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]float32:\n\t\tv2, changed2 := fastpathTV.DecMapIntFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]float64:\n\t\tfastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]float64:\n\t\tv2, changed2 := fastpathTV.DecMapIntFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int]bool:\n\t\tfastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int]bool:\n\t\tv2, changed2 := fastpathTV.DecMapIntBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []int8:\n\t\tfastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]int8:\n\t\tv2, changed2 := fastpathTV.DecSliceInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]interface{}:\n\t\tfastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapInt8IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]string:\n\t\tfastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]string:\n\t\tv2, changed2 := fastpathTV.DecMapInt8StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uint:\n\t\tfastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uint:\n\t\tv2, changed2 := fastpathTV.DecMapInt8UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uint8:\n\t\tfastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uint16:\n\t\tfastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uint32:\n\t\tfastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uint64:\n\t\tfastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]uintptr:\n\t\tfastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapInt8UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]int:\n\t\tfastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]int:\n\t\tv2, changed2 := fastpathTV.DecMapInt8IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]int8:\n\t\tfastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]int8:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]int16:\n\t\tfastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]int16:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]int32:\n\t\tfastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]int32:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]int64:\n\t\tfastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]int64:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]float32:\n\t\tfastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]float32:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]float64:\n\t\tfastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]float64:\n\t\tv2, changed2 := fastpathTV.DecMapInt8Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int8]bool:\n\t\tfastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int8]bool:\n\t\tv2, changed2 := fastpathTV.DecMapInt8BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []int16:\n\t\tfastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]int16:\n\t\tv2, changed2 := fastpathTV.DecSliceInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]interface{}:\n\t\tfastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapInt16IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]string:\n\t\tfastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]string:\n\t\tv2, changed2 := fastpathTV.DecMapInt16StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uint:\n\t\tfastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uint:\n\t\tv2, changed2 := fastpathTV.DecMapInt16UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uint8:\n\t\tfastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uint16:\n\t\tfastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uint32:\n\t\tfastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uint64:\n\t\tfastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]uintptr:\n\t\tfastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapInt16UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]int:\n\t\tfastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]int:\n\t\tv2, changed2 := fastpathTV.DecMapInt16IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]int8:\n\t\tfastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]int8:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]int16:\n\t\tfastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]int16:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]int32:\n\t\tfastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]int32:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]int64:\n\t\tfastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]int64:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]float32:\n\t\tfastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]float32:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]float64:\n\t\tfastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]float64:\n\t\tv2, changed2 := fastpathTV.DecMapInt16Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int16]bool:\n\t\tfastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int16]bool:\n\t\tv2, changed2 := fastpathTV.DecMapInt16BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []int32:\n\t\tfastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]int32:\n\t\tv2, changed2 := fastpathTV.DecSliceInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]interface{}:\n\t\tfastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapInt32IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]string:\n\t\tfastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]string:\n\t\tv2, changed2 := fastpathTV.DecMapInt32StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uint:\n\t\tfastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uint:\n\t\tv2, changed2 := fastpathTV.DecMapInt32UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uint8:\n\t\tfastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uint16:\n\t\tfastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uint32:\n\t\tfastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uint64:\n\t\tfastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]uintptr:\n\t\tfastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapInt32UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]int:\n\t\tfastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]int:\n\t\tv2, changed2 := fastpathTV.DecMapInt32IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]int8:\n\t\tfastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]int8:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]int16:\n\t\tfastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]int16:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]int32:\n\t\tfastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]int32:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]int64:\n\t\tfastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]int64:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]float32:\n\t\tfastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]float32:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]float64:\n\t\tfastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]float64:\n\t\tv2, changed2 := fastpathTV.DecMapInt32Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int32]bool:\n\t\tfastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int32]bool:\n\t\tv2, changed2 := fastpathTV.DecMapInt32BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []int64:\n\t\tfastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *[]int64:\n\t\tv2, changed2 := fastpathTV.DecSliceInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]interface{}:\n\t\tfastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapInt64IntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]string:\n\t\tfastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]string:\n\t\tv2, changed2 := fastpathTV.DecMapInt64StringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uint:\n\t\tfastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uint:\n\t\tv2, changed2 := fastpathTV.DecMapInt64UintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uint8:\n\t\tfastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Uint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uint16:\n\t\tfastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Uint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uint32:\n\t\tfastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Uint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uint64:\n\t\tfastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Uint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]uintptr:\n\t\tfastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapInt64UintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]int:\n\t\tfastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]int:\n\t\tv2, changed2 := fastpathTV.DecMapInt64IntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]int8:\n\t\tfastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]int8:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Int8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]int16:\n\t\tfastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]int16:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Int16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]int32:\n\t\tfastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]int32:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Int32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]int64:\n\t\tfastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]int64:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Int64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]float32:\n\t\tfastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]float32:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Float32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]float64:\n\t\tfastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]float64:\n\t\tv2, changed2 := fastpathTV.DecMapInt64Float64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[int64]bool:\n\t\tfastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[int64]bool:\n\t\tv2, changed2 := fastpathTV.DecMapInt64BoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase []bool:\n\t\tfastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *[]bool:\n\t\tv2, changed2 := fastpathTV.DecSliceBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]interface{}:\n\t\tfastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]interface{}:\n\t\tv2, changed2 := fastpathTV.DecMapBoolIntfV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]string:\n\t\tfastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]string:\n\t\tv2, changed2 := fastpathTV.DecMapBoolStringV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uint:\n\t\tfastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uint:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUintV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uint8:\n\t\tfastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uint8:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUint8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uint16:\n\t\tfastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uint16:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUint16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uint32:\n\t\tfastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uint32:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUint32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uint64:\n\t\tfastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uint64:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUint64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]uintptr:\n\t\tfastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]uintptr:\n\t\tv2, changed2 := fastpathTV.DecMapBoolUintptrV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]int:\n\t\tfastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]int:\n\t\tv2, changed2 := fastpathTV.DecMapBoolIntV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]int8:\n\t\tfastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]int8:\n\t\tv2, changed2 := fastpathTV.DecMapBoolInt8V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]int16:\n\t\tfastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]int16:\n\t\tv2, changed2 := fastpathTV.DecMapBoolInt16V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]int32:\n\t\tfastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]int32:\n\t\tv2, changed2 := fastpathTV.DecMapBoolInt32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]int64:\n\t\tfastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]int64:\n\t\tv2, changed2 := fastpathTV.DecMapBoolInt64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]float32:\n\t\tfastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]float32:\n\t\tv2, changed2 := fastpathTV.DecMapBoolFloat32V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]float64:\n\t\tfastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]float64:\n\t\tv2, changed2 := fastpathTV.DecMapBoolFloat64V(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tcase map[bool]bool:\n\t\tfastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, d)\n\tcase *map[bool]bool:\n\t\tv2, changed2 := fastpathTV.DecMapBoolBoolV(*v, fastpathCheckNilFalse, true, d)\n\t\tif changed2 {\n\t\t\t*v = v2\n\t\t}\n\n\tdefault:\n\t\t_ = v // TODO: workaround https://github.com/golang/go/issues/12927 (remove after go 1.6 release)\n\t\treturn false\n\t}\n\treturn true\n}\n\n// -- -- fast path functions\n\nfunc (f *decFnInfo) fastpathDecSliceIntfR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]interface{})\n\t\tv, changed := fastpathTV.DecSliceIntfV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]interface{})\n\t\tfastpathTV.DecSliceIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceIntfX(vp *[]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceIntfV(v []interface{}, checkNil bool, canChange bool, d *Decoder) (_ []interface{}, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []interface{}{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]interface{}, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]interface{}, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\td.decode(&v[j])\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, nil)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.decode(&v[j])\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []interface{}{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]interface{}, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, nil)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\td.decode(&v[j])\n\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceStringR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]string)\n\t\tv, changed := fastpathTV.DecSliceStringV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]string)\n\t\tfastpathTV.DecSliceStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceStringX(vp *[]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceStringV(v []string, checkNil bool, canChange bool, d *Decoder) (_ []string, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []string{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 16)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]string, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]string, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = dd.DecodeString()\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, \"\")\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = dd.DecodeString()\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []string{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]string, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, \"\")\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = dd.DecodeString()\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceFloat32R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]float32)\n\t\tv, changed := fastpathTV.DecSliceFloat32V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]float32)\n\t\tfastpathTV.DecSliceFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceFloat32X(vp *[]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceFloat32V(v []float32, checkNil bool, canChange bool, d *Decoder) (_ []float32, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []float32{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]float32, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]float32, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = float32(dd.DecodeFloat(true))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = float32(dd.DecodeFloat(true))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []float32{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]float32, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = float32(dd.DecodeFloat(true))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceFloat64R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]float64)\n\t\tv, changed := fastpathTV.DecSliceFloat64V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]float64)\n\t\tfastpathTV.DecSliceFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceFloat64X(vp *[]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceFloat64V(v []float64, checkNil bool, canChange bool, d *Decoder) (_ []float64, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []float64{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]float64, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]float64, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = dd.DecodeFloat(false)\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = dd.DecodeFloat(false)\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []float64{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]float64, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = dd.DecodeFloat(false)\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceUintR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]uint)\n\t\tv, changed := fastpathTV.DecSliceUintV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]uint)\n\t\tfastpathTV.DecSliceUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceUintX(vp *[]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceUintV(v []uint, checkNil bool, canChange bool, d *Decoder) (_ []uint, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []uint{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]uint, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]uint, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = uint(dd.DecodeUint(uintBitsize))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = uint(dd.DecodeUint(uintBitsize))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []uint{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]uint, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = uint(dd.DecodeUint(uintBitsize))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceUint16R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]uint16)\n\t\tv, changed := fastpathTV.DecSliceUint16V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]uint16)\n\t\tfastpathTV.DecSliceUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceUint16X(vp *[]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceUint16V(v []uint16, checkNil bool, canChange bool, d *Decoder) (_ []uint16, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []uint16{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]uint16, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]uint16, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = uint16(dd.DecodeUint(16))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = uint16(dd.DecodeUint(16))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []uint16{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]uint16, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = uint16(dd.DecodeUint(16))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceUint32R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]uint32)\n\t\tv, changed := fastpathTV.DecSliceUint32V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]uint32)\n\t\tfastpathTV.DecSliceUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceUint32X(vp *[]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceUint32V(v []uint32, checkNil bool, canChange bool, d *Decoder) (_ []uint32, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []uint32{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]uint32, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]uint32, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = uint32(dd.DecodeUint(32))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = uint32(dd.DecodeUint(32))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []uint32{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]uint32, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = uint32(dd.DecodeUint(32))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceUint64R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]uint64)\n\t\tv, changed := fastpathTV.DecSliceUint64V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]uint64)\n\t\tfastpathTV.DecSliceUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceUint64X(vp *[]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceUint64V(v []uint64, checkNil bool, canChange bool, d *Decoder) (_ []uint64, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []uint64{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]uint64, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]uint64, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = dd.DecodeUint(64)\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = dd.DecodeUint(64)\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []uint64{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]uint64, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = dd.DecodeUint(64)\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceUintptrR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]uintptr)\n\t\tv, changed := fastpathTV.DecSliceUintptrV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]uintptr)\n\t\tfastpathTV.DecSliceUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceUintptrX(vp *[]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceUintptrV(v []uintptr, checkNil bool, canChange bool, d *Decoder) (_ []uintptr, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []uintptr{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]uintptr, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]uintptr, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = uintptr(dd.DecodeUint(uintBitsize))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []uintptr{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]uintptr, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceIntR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]int)\n\t\tv, changed := fastpathTV.DecSliceIntV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]int)\n\t\tfastpathTV.DecSliceIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceIntX(vp *[]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceIntV(v []int, checkNil bool, canChange bool, d *Decoder) (_ []int, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []int{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]int, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]int, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = int(dd.DecodeInt(intBitsize))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = int(dd.DecodeInt(intBitsize))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []int{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]int, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = int(dd.DecodeInt(intBitsize))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceInt8R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]int8)\n\t\tv, changed := fastpathTV.DecSliceInt8V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]int8)\n\t\tfastpathTV.DecSliceInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceInt8X(vp *[]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceInt8V(v []int8, checkNil bool, canChange bool, d *Decoder) (_ []int8, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []int8{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]int8, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]int8, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = int8(dd.DecodeInt(8))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = int8(dd.DecodeInt(8))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []int8{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]int8, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = int8(dd.DecodeInt(8))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceInt16R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]int16)\n\t\tv, changed := fastpathTV.DecSliceInt16V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]int16)\n\t\tfastpathTV.DecSliceInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceInt16X(vp *[]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceInt16V(v []int16, checkNil bool, canChange bool, d *Decoder) (_ []int16, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []int16{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 2)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]int16, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]int16, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = int16(dd.DecodeInt(16))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = int16(dd.DecodeInt(16))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []int16{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]int16, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = int16(dd.DecodeInt(16))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceInt32R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]int32)\n\t\tv, changed := fastpathTV.DecSliceInt32V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]int32)\n\t\tfastpathTV.DecSliceInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceInt32X(vp *[]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceInt32V(v []int32, checkNil bool, canChange bool, d *Decoder) (_ []int32, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []int32{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 4)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]int32, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]int32, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = int32(dd.DecodeInt(32))\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = int32(dd.DecodeInt(32))\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []int32{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]int32, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = int32(dd.DecodeInt(32))\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceInt64R(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]int64)\n\t\tv, changed := fastpathTV.DecSliceInt64V(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]int64)\n\t\tfastpathTV.DecSliceInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceInt64X(vp *[]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceInt64V(v []int64, checkNil bool, canChange bool, d *Decoder) (_ []int64, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []int64{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 8)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]int64, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]int64, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = dd.DecodeInt(64)\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, 0)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = dd.DecodeInt(64)\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []int64{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]int64, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, 0)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = dd.DecodeInt(64)\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecSliceBoolR(rv reflect.Value) {\n\tarray := f.seq == seqTypeArray\n\tif !array && rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*[]bool)\n\t\tv, changed := fastpathTV.DecSliceBoolV(*vp, fastpathCheckNilFalse, !array, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().([]bool)\n\t\tfastpathTV.DecSliceBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\n\nfunc (f fastpathT) DecSliceBoolX(vp *[]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecSliceBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecSliceBoolV(v []bool, checkNil bool, canChange bool, d *Decoder) (_ []bool, changed bool) {\n\tdd := d.d\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tslh, containerLenS := d.decSliceHelperStart()\n\tif containerLenS == 0 {\n\t\tif canChange {\n\t\t\tif v == nil {\n\t\t\t\tv = []bool{}\n\t\t\t} else if len(v) != 0 {\n\t\t\t\tv = v[:0]\n\t\t\t}\n\t\t\tchanged = true\n\t\t}\n\t\tslh.End()\n\t\treturn v, changed\n\t}\n\n\tif containerLenS > 0 {\n\t\tx2read := containerLenS\n\t\tvar xtrunc bool\n\t\tif containerLenS > cap(v) {\n\t\t\tif canChange {\n\t\t\t\tvar xlen int\n\t\t\t\txlen, xtrunc = decInferLen(containerLenS, d.h.MaxInitLen, 1)\n\t\t\t\tif xtrunc {\n\t\t\t\t\tif xlen <= cap(v) {\n\t\t\t\t\t\tv = v[:xlen]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = make([]bool, xlen)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tv = make([]bool, xlen)\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t} else {\n\t\t\t\td.arrayCannotExpand(len(v), containerLenS)\n\t\t\t}\n\t\t\tx2read = len(v)\n\t\t} else if containerLenS != len(v) {\n\t\t\tif canChange {\n\t\t\t\tv = v[:containerLenS]\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tj := 0\n\t\tfor ; j < x2read; j++ {\n\t\t\tslh.ElemContainerState(j)\n\t\t\tv[j] = dd.DecodeBool()\n\t\t}\n\t\tif xtrunc {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tv = append(v, false)\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\tv[j] = dd.DecodeBool()\n\t\t\t}\n\t\t} else if !canChange {\n\t\t\tfor ; j < containerLenS; j++ {\n\t\t\t\tslh.ElemContainerState(j)\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t}\n\t} else {\n\t\tbreakFound := dd.CheckBreak()\n\t\tif breakFound {\n\t\t\tif canChange {\n\t\t\t\tif v == nil {\n\t\t\t\t\tv = []bool{}\n\t\t\t\t} else if len(v) != 0 {\n\t\t\t\t\tv = v[:0]\n\t\t\t\t}\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t\tslh.End()\n\t\t\treturn v, changed\n\t\t}\n\t\tif cap(v) == 0 {\n\t\t\tv = make([]bool, 1, 4)\n\t\t\tchanged = true\n\t\t}\n\t\tj := 0\n\t\tfor ; !breakFound; j++ {\n\t\t\tif j >= len(v) {\n\t\t\t\tif canChange {\n\t\t\t\t\tv = append(v, false)\n\t\t\t\t\tchanged = true\n\t\t\t\t} else {\n\t\t\t\t\td.arrayCannotExpand(len(v), j+1)\n\t\t\t\t}\n\t\t\t}\n\t\t\tslh.ElemContainerState(j)\n\t\t\tif j < len(v) {\n\t\t\t\tv[j] = dd.DecodeBool()\n\t\t\t} else {\n\t\t\t\td.swallow()\n\t\t\t}\n\t\t\tbreakFound = dd.CheckBreak()\n\t\t}\n\t\tif canChange && j < len(v) {\n\t\t\tv = v[:j]\n\t\t\tchanged = true\n\t\t}\n\t}\n\tslh.End()\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]interface{})\n\t\tv, changed := fastpathTV.DecMapIntfIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]interface{})\n\t\tfastpathTV.DecMapIntfIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfIntfX(vp *map[interface{}]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfIntfV(v map[interface{}]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)\n\t\tv = make(map[interface{}]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk interface{}\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]string)\n\t\tv, changed := fastpathTV.DecMapIntfStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]string)\n\t\tfastpathTV.DecMapIntfStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfStringX(vp *map[interface{}]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfStringV(v map[interface{}]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)\n\t\tv = make(map[interface{}]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uint)\n\t\tv, changed := fastpathTV.DecMapIntfUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uint)\n\t\tfastpathTV.DecMapIntfUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUintX(vp *map[interface{}]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUintV(v map[interface{}]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uint8)\n\t\tv, changed := fastpathTV.DecMapIntfUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uint8)\n\t\tfastpathTV.DecMapIntfUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUint8X(vp *map[interface{}]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUint8V(v map[interface{}]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[interface{}]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uint16)\n\t\tv, changed := fastpathTV.DecMapIntfUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uint16)\n\t\tfastpathTV.DecMapIntfUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUint16X(vp *map[interface{}]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUint16V(v map[interface{}]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[interface{}]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uint32)\n\t\tv, changed := fastpathTV.DecMapIntfUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uint32)\n\t\tfastpathTV.DecMapIntfUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUint32X(vp *map[interface{}]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUint32V(v map[interface{}]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[interface{}]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uint64)\n\t\tv, changed := fastpathTV.DecMapIntfUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uint64)\n\t\tfastpathTV.DecMapIntfUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUint64X(vp *map[interface{}]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUint64V(v map[interface{}]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]uintptr)\n\t\tv, changed := fastpathTV.DecMapIntfUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]uintptr)\n\t\tfastpathTV.DecMapIntfUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfUintptrX(vp *map[interface{}]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfUintptrV(v map[interface{}]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]int)\n\t\tv, changed := fastpathTV.DecMapIntfIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]int)\n\t\tfastpathTV.DecMapIntfIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfIntX(vp *map[interface{}]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfIntV(v map[interface{}]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]int8)\n\t\tv, changed := fastpathTV.DecMapIntfInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]int8)\n\t\tfastpathTV.DecMapIntfInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfInt8X(vp *map[interface{}]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfInt8V(v map[interface{}]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[interface{}]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]int16)\n\t\tv, changed := fastpathTV.DecMapIntfInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]int16)\n\t\tfastpathTV.DecMapIntfInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfInt16X(vp *map[interface{}]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfInt16V(v map[interface{}]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[interface{}]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]int32)\n\t\tv, changed := fastpathTV.DecMapIntfInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]int32)\n\t\tfastpathTV.DecMapIntfInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfInt32X(vp *map[interface{}]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfInt32V(v map[interface{}]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[interface{}]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]int64)\n\t\tv, changed := fastpathTV.DecMapIntfInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]int64)\n\t\tfastpathTV.DecMapIntfInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfInt64X(vp *map[interface{}]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfInt64V(v map[interface{}]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]float32)\n\t\tv, changed := fastpathTV.DecMapIntfFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]float32)\n\t\tfastpathTV.DecMapIntfFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfFloat32X(vp *map[interface{}]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfFloat32V(v map[interface{}]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[interface{}]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]float64)\n\t\tv, changed := fastpathTV.DecMapIntfFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]float64)\n\t\tfastpathTV.DecMapIntfFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfFloat64X(vp *map[interface{}]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfFloat64V(v map[interface{}]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[interface{}]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntfBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[interface{}]bool)\n\t\tv, changed := fastpathTV.DecMapIntfBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[interface{}]bool)\n\t\tfastpathTV.DecMapIntfBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntfBoolX(vp *map[interface{}]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntfBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntfBoolV(v map[interface{}]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[interface{}]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[interface{}]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk interface{}\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = nil\n\t\t\td.decode(&mk)\n\t\t\tif bv, bok := mk.([]byte); bok {\n\t\t\t\tmk = d.string(bv)\n\t\t\t}\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]interface{})\n\t\tv, changed := fastpathTV.DecMapStringIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]interface{})\n\t\tfastpathTV.DecMapStringIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringIntfX(vp *map[string]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringIntfV(v map[string]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)\n\t\tv = make(map[string]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk string\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]string)\n\t\tv, changed := fastpathTV.DecMapStringStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]string)\n\t\tfastpathTV.DecMapStringStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringStringX(vp *map[string]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringStringV(v map[string]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 32)\n\t\tv = make(map[string]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uint)\n\t\tv, changed := fastpathTV.DecMapStringUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uint)\n\t\tfastpathTV.DecMapStringUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUintX(vp *map[string]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUintV(v map[string]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uint8)\n\t\tv, changed := fastpathTV.DecMapStringUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uint8)\n\t\tfastpathTV.DecMapStringUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUint8X(vp *map[string]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUint8V(v map[string]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[string]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uint16)\n\t\tv, changed := fastpathTV.DecMapStringUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uint16)\n\t\tfastpathTV.DecMapStringUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUint16X(vp *map[string]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUint16V(v map[string]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[string]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uint32)\n\t\tv, changed := fastpathTV.DecMapStringUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uint32)\n\t\tfastpathTV.DecMapStringUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUint32X(vp *map[string]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUint32V(v map[string]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[string]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uint64)\n\t\tv, changed := fastpathTV.DecMapStringUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uint64)\n\t\tfastpathTV.DecMapStringUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUint64X(vp *map[string]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUint64V(v map[string]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]uintptr)\n\t\tv, changed := fastpathTV.DecMapStringUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]uintptr)\n\t\tfastpathTV.DecMapStringUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringUintptrX(vp *map[string]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringUintptrV(v map[string]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]int)\n\t\tv, changed := fastpathTV.DecMapStringIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]int)\n\t\tfastpathTV.DecMapStringIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringIntX(vp *map[string]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringIntV(v map[string]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]int8)\n\t\tv, changed := fastpathTV.DecMapStringInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]int8)\n\t\tfastpathTV.DecMapStringInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringInt8X(vp *map[string]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringInt8V(v map[string]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[string]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]int16)\n\t\tv, changed := fastpathTV.DecMapStringInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]int16)\n\t\tfastpathTV.DecMapStringInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringInt16X(vp *map[string]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringInt16V(v map[string]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[string]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]int32)\n\t\tv, changed := fastpathTV.DecMapStringInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]int32)\n\t\tfastpathTV.DecMapStringInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringInt32X(vp *map[string]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringInt32V(v map[string]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[string]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]int64)\n\t\tv, changed := fastpathTV.DecMapStringInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]int64)\n\t\tfastpathTV.DecMapStringInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringInt64X(vp *map[string]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringInt64V(v map[string]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]float32)\n\t\tv, changed := fastpathTV.DecMapStringFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]float32)\n\t\tfastpathTV.DecMapStringFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringFloat32X(vp *map[string]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringFloat32V(v map[string]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[string]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]float64)\n\t\tv, changed := fastpathTV.DecMapStringFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]float64)\n\t\tfastpathTV.DecMapStringFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringFloat64X(vp *map[string]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringFloat64V(v map[string]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[string]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapStringBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[string]bool)\n\t\tv, changed := fastpathTV.DecMapStringBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[string]bool)\n\t\tfastpathTV.DecMapStringBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapStringBoolX(vp *map[string]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapStringBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapStringBoolV(v map[string]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[string]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[string]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk string\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeString()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]interface{})\n\t\tv, changed := fastpathTV.DecMapFloat32IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]interface{})\n\t\tfastpathTV.DecMapFloat32IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32IntfX(vp *map[float32]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32IntfV(v map[float32]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[float32]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk float32\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]string)\n\t\tv, changed := fastpathTV.DecMapFloat32StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]string)\n\t\tfastpathTV.DecMapFloat32StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32StringX(vp *map[float32]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32StringV(v map[float32]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[float32]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uint)\n\t\tv, changed := fastpathTV.DecMapFloat32UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uint)\n\t\tfastpathTV.DecMapFloat32UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32UintX(vp *map[float32]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32UintV(v map[float32]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uint8)\n\t\tv, changed := fastpathTV.DecMapFloat32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uint8)\n\t\tfastpathTV.DecMapFloat32Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Uint8X(vp *map[float32]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Uint8V(v map[float32]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[float32]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uint16)\n\t\tv, changed := fastpathTV.DecMapFloat32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uint16)\n\t\tfastpathTV.DecMapFloat32Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Uint16X(vp *map[float32]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Uint16V(v map[float32]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[float32]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uint32)\n\t\tv, changed := fastpathTV.DecMapFloat32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uint32)\n\t\tfastpathTV.DecMapFloat32Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Uint32X(vp *map[float32]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Uint32V(v map[float32]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[float32]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uint64)\n\t\tv, changed := fastpathTV.DecMapFloat32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uint64)\n\t\tfastpathTV.DecMapFloat32Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Uint64X(vp *map[float32]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Uint64V(v map[float32]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]uintptr)\n\t\tv, changed := fastpathTV.DecMapFloat32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]uintptr)\n\t\tfastpathTV.DecMapFloat32UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32UintptrX(vp *map[float32]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32UintptrV(v map[float32]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]int)\n\t\tv, changed := fastpathTV.DecMapFloat32IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]int)\n\t\tfastpathTV.DecMapFloat32IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32IntX(vp *map[float32]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32IntV(v map[float32]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]int8)\n\t\tv, changed := fastpathTV.DecMapFloat32Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]int8)\n\t\tfastpathTV.DecMapFloat32Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Int8X(vp *map[float32]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Int8V(v map[float32]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[float32]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]int16)\n\t\tv, changed := fastpathTV.DecMapFloat32Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]int16)\n\t\tfastpathTV.DecMapFloat32Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Int16X(vp *map[float32]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Int16V(v map[float32]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[float32]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]int32)\n\t\tv, changed := fastpathTV.DecMapFloat32Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]int32)\n\t\tfastpathTV.DecMapFloat32Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Int32X(vp *map[float32]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Int32V(v map[float32]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[float32]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]int64)\n\t\tv, changed := fastpathTV.DecMapFloat32Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]int64)\n\t\tfastpathTV.DecMapFloat32Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Int64X(vp *map[float32]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Int64V(v map[float32]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]float32)\n\t\tv, changed := fastpathTV.DecMapFloat32Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]float32)\n\t\tfastpathTV.DecMapFloat32Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Float32X(vp *map[float32]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Float32V(v map[float32]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[float32]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]float64)\n\t\tv, changed := fastpathTV.DecMapFloat32Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]float64)\n\t\tfastpathTV.DecMapFloat32Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32Float64X(vp *map[float32]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32Float64V(v map[float32]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float32]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat32BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float32]bool)\n\t\tv, changed := fastpathTV.DecMapFloat32BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float32]bool)\n\t\tfastpathTV.DecMapFloat32BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat32BoolX(vp *map[float32]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat32BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat32BoolV(v map[float32]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float32]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[float32]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float32\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = float32(dd.DecodeFloat(true))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]interface{})\n\t\tv, changed := fastpathTV.DecMapFloat64IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]interface{})\n\t\tfastpathTV.DecMapFloat64IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64IntfX(vp *map[float64]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64IntfV(v map[float64]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[float64]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk float64\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]string)\n\t\tv, changed := fastpathTV.DecMapFloat64StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]string)\n\t\tfastpathTV.DecMapFloat64StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64StringX(vp *map[float64]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64StringV(v map[float64]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[float64]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uint)\n\t\tv, changed := fastpathTV.DecMapFloat64UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uint)\n\t\tfastpathTV.DecMapFloat64UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64UintX(vp *map[float64]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64UintV(v map[float64]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uint8)\n\t\tv, changed := fastpathTV.DecMapFloat64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uint8)\n\t\tfastpathTV.DecMapFloat64Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Uint8X(vp *map[float64]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Uint8V(v map[float64]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[float64]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uint16)\n\t\tv, changed := fastpathTV.DecMapFloat64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uint16)\n\t\tfastpathTV.DecMapFloat64Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Uint16X(vp *map[float64]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Uint16V(v map[float64]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[float64]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uint32)\n\t\tv, changed := fastpathTV.DecMapFloat64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uint32)\n\t\tfastpathTV.DecMapFloat64Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Uint32X(vp *map[float64]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Uint32V(v map[float64]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float64]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uint64)\n\t\tv, changed := fastpathTV.DecMapFloat64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uint64)\n\t\tfastpathTV.DecMapFloat64Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Uint64X(vp *map[float64]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Uint64V(v map[float64]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]uintptr)\n\t\tv, changed := fastpathTV.DecMapFloat64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]uintptr)\n\t\tfastpathTV.DecMapFloat64UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64UintptrX(vp *map[float64]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64UintptrV(v map[float64]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]int)\n\t\tv, changed := fastpathTV.DecMapFloat64IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]int)\n\t\tfastpathTV.DecMapFloat64IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64IntX(vp *map[float64]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64IntV(v map[float64]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]int8)\n\t\tv, changed := fastpathTV.DecMapFloat64Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]int8)\n\t\tfastpathTV.DecMapFloat64Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Int8X(vp *map[float64]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Int8V(v map[float64]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[float64]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]int16)\n\t\tv, changed := fastpathTV.DecMapFloat64Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]int16)\n\t\tfastpathTV.DecMapFloat64Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Int16X(vp *map[float64]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Int16V(v map[float64]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[float64]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]int32)\n\t\tv, changed := fastpathTV.DecMapFloat64Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]int32)\n\t\tfastpathTV.DecMapFloat64Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Int32X(vp *map[float64]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Int32V(v map[float64]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float64]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]int64)\n\t\tv, changed := fastpathTV.DecMapFloat64Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]int64)\n\t\tfastpathTV.DecMapFloat64Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Int64X(vp *map[float64]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Int64V(v map[float64]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]float32)\n\t\tv, changed := fastpathTV.DecMapFloat64Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]float32)\n\t\tfastpathTV.DecMapFloat64Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Float32X(vp *map[float64]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Float32V(v map[float64]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[float64]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]float64)\n\t\tv, changed := fastpathTV.DecMapFloat64Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]float64)\n\t\tfastpathTV.DecMapFloat64Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64Float64X(vp *map[float64]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64Float64V(v map[float64]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[float64]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapFloat64BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[float64]bool)\n\t\tv, changed := fastpathTV.DecMapFloat64BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[float64]bool)\n\t\tfastpathTV.DecMapFloat64BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapFloat64BoolX(vp *map[float64]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapFloat64BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapFloat64BoolV(v map[float64]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[float64]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[float64]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk float64\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeFloat(false)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]interface{})\n\t\tv, changed := fastpathTV.DecMapUintIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]interface{})\n\t\tfastpathTV.DecMapUintIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintIntfX(vp *map[uint]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintIntfV(v map[uint]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uint]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uint\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]string)\n\t\tv, changed := fastpathTV.DecMapUintStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]string)\n\t\tfastpathTV.DecMapUintStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintStringX(vp *map[uint]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintStringV(v map[uint]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uint]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uint)\n\t\tv, changed := fastpathTV.DecMapUintUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uint)\n\t\tfastpathTV.DecMapUintUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUintX(vp *map[uint]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUintV(v map[uint]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uint8)\n\t\tv, changed := fastpathTV.DecMapUintUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uint8)\n\t\tfastpathTV.DecMapUintUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUint8X(vp *map[uint]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUint8V(v map[uint]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uint16)\n\t\tv, changed := fastpathTV.DecMapUintUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uint16)\n\t\tfastpathTV.DecMapUintUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUint16X(vp *map[uint]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUint16V(v map[uint]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uint32)\n\t\tv, changed := fastpathTV.DecMapUintUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uint32)\n\t\tfastpathTV.DecMapUintUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUint32X(vp *map[uint]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUint32V(v map[uint]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uint64)\n\t\tv, changed := fastpathTV.DecMapUintUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uint64)\n\t\tfastpathTV.DecMapUintUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUint64X(vp *map[uint]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUint64V(v map[uint]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]uintptr)\n\t\tv, changed := fastpathTV.DecMapUintUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]uintptr)\n\t\tfastpathTV.DecMapUintUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintUintptrX(vp *map[uint]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintUintptrV(v map[uint]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]int)\n\t\tv, changed := fastpathTV.DecMapUintIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]int)\n\t\tfastpathTV.DecMapUintIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintIntX(vp *map[uint]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintIntV(v map[uint]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]int8)\n\t\tv, changed := fastpathTV.DecMapUintInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]int8)\n\t\tfastpathTV.DecMapUintInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintInt8X(vp *map[uint]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintInt8V(v map[uint]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]int16)\n\t\tv, changed := fastpathTV.DecMapUintInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]int16)\n\t\tfastpathTV.DecMapUintInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintInt16X(vp *map[uint]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintInt16V(v map[uint]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]int32)\n\t\tv, changed := fastpathTV.DecMapUintInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]int32)\n\t\tfastpathTV.DecMapUintInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintInt32X(vp *map[uint]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintInt32V(v map[uint]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]int64)\n\t\tv, changed := fastpathTV.DecMapUintInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]int64)\n\t\tfastpathTV.DecMapUintInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintInt64X(vp *map[uint]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintInt64V(v map[uint]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]float32)\n\t\tv, changed := fastpathTV.DecMapUintFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]float32)\n\t\tfastpathTV.DecMapUintFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintFloat32X(vp *map[uint]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintFloat32V(v map[uint]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]float64)\n\t\tv, changed := fastpathTV.DecMapUintFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]float64)\n\t\tfastpathTV.DecMapUintFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintFloat64X(vp *map[uint]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintFloat64V(v map[uint]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint]bool)\n\t\tv, changed := fastpathTV.DecMapUintBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint]bool)\n\t\tfastpathTV.DecMapUintBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintBoolX(vp *map[uint]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintBoolV(v map[uint]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]interface{})\n\t\tv, changed := fastpathTV.DecMapUint8IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]interface{})\n\t\tfastpathTV.DecMapUint8IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8IntfX(vp *map[uint8]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8IntfV(v map[uint8]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[uint8]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uint8\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]string)\n\t\tv, changed := fastpathTV.DecMapUint8StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]string)\n\t\tfastpathTV.DecMapUint8StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8StringX(vp *map[uint8]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8StringV(v map[uint8]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[uint8]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uint)\n\t\tv, changed := fastpathTV.DecMapUint8UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uint)\n\t\tfastpathTV.DecMapUint8UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8UintX(vp *map[uint8]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8UintV(v map[uint8]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uint8)\n\t\tv, changed := fastpathTV.DecMapUint8Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uint8)\n\t\tfastpathTV.DecMapUint8Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Uint8X(vp *map[uint8]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Uint8V(v map[uint8]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[uint8]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uint16)\n\t\tv, changed := fastpathTV.DecMapUint8Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uint16)\n\t\tfastpathTV.DecMapUint8Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Uint16X(vp *map[uint8]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Uint16V(v map[uint8]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[uint8]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uint32)\n\t\tv, changed := fastpathTV.DecMapUint8Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uint32)\n\t\tfastpathTV.DecMapUint8Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Uint32X(vp *map[uint8]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Uint32V(v map[uint8]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint8]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uint64)\n\t\tv, changed := fastpathTV.DecMapUint8Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uint64)\n\t\tfastpathTV.DecMapUint8Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Uint64X(vp *map[uint8]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Uint64V(v map[uint8]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]uintptr)\n\t\tv, changed := fastpathTV.DecMapUint8UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]uintptr)\n\t\tfastpathTV.DecMapUint8UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8UintptrX(vp *map[uint8]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8UintptrV(v map[uint8]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]int)\n\t\tv, changed := fastpathTV.DecMapUint8IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]int)\n\t\tfastpathTV.DecMapUint8IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8IntX(vp *map[uint8]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8IntV(v map[uint8]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]int8)\n\t\tv, changed := fastpathTV.DecMapUint8Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]int8)\n\t\tfastpathTV.DecMapUint8Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Int8X(vp *map[uint8]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Int8V(v map[uint8]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[uint8]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]int16)\n\t\tv, changed := fastpathTV.DecMapUint8Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]int16)\n\t\tfastpathTV.DecMapUint8Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Int16X(vp *map[uint8]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Int16V(v map[uint8]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[uint8]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]int32)\n\t\tv, changed := fastpathTV.DecMapUint8Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]int32)\n\t\tfastpathTV.DecMapUint8Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Int32X(vp *map[uint8]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Int32V(v map[uint8]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint8]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]int64)\n\t\tv, changed := fastpathTV.DecMapUint8Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]int64)\n\t\tfastpathTV.DecMapUint8Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Int64X(vp *map[uint8]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Int64V(v map[uint8]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]float32)\n\t\tv, changed := fastpathTV.DecMapUint8Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]float32)\n\t\tfastpathTV.DecMapUint8Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Float32X(vp *map[uint8]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Float32V(v map[uint8]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint8]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]float64)\n\t\tv, changed := fastpathTV.DecMapUint8Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]float64)\n\t\tfastpathTV.DecMapUint8Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8Float64X(vp *map[uint8]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8Float64V(v map[uint8]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint8]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint8BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint8]bool)\n\t\tv, changed := fastpathTV.DecMapUint8BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint8]bool)\n\t\tfastpathTV.DecMapUint8BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint8BoolX(vp *map[uint8]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint8BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint8BoolV(v map[uint8]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint8]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[uint8]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint8\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint8(dd.DecodeUint(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]interface{})\n\t\tv, changed := fastpathTV.DecMapUint16IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]interface{})\n\t\tfastpathTV.DecMapUint16IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16IntfX(vp *map[uint16]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16IntfV(v map[uint16]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[uint16]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uint16\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]string)\n\t\tv, changed := fastpathTV.DecMapUint16StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]string)\n\t\tfastpathTV.DecMapUint16StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16StringX(vp *map[uint16]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16StringV(v map[uint16]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[uint16]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uint)\n\t\tv, changed := fastpathTV.DecMapUint16UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uint)\n\t\tfastpathTV.DecMapUint16UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16UintX(vp *map[uint16]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16UintV(v map[uint16]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uint8)\n\t\tv, changed := fastpathTV.DecMapUint16Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uint8)\n\t\tfastpathTV.DecMapUint16Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Uint8X(vp *map[uint16]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Uint8V(v map[uint16]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[uint16]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uint16)\n\t\tv, changed := fastpathTV.DecMapUint16Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uint16)\n\t\tfastpathTV.DecMapUint16Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Uint16X(vp *map[uint16]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Uint16V(v map[uint16]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)\n\t\tv = make(map[uint16]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uint32)\n\t\tv, changed := fastpathTV.DecMapUint16Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uint32)\n\t\tfastpathTV.DecMapUint16Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Uint32X(vp *map[uint16]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Uint32V(v map[uint16]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[uint16]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uint64)\n\t\tv, changed := fastpathTV.DecMapUint16Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uint64)\n\t\tfastpathTV.DecMapUint16Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Uint64X(vp *map[uint16]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Uint64V(v map[uint16]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]uintptr)\n\t\tv, changed := fastpathTV.DecMapUint16UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]uintptr)\n\t\tfastpathTV.DecMapUint16UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16UintptrX(vp *map[uint16]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16UintptrV(v map[uint16]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]int)\n\t\tv, changed := fastpathTV.DecMapUint16IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]int)\n\t\tfastpathTV.DecMapUint16IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16IntX(vp *map[uint16]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16IntV(v map[uint16]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]int8)\n\t\tv, changed := fastpathTV.DecMapUint16Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]int8)\n\t\tfastpathTV.DecMapUint16Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Int8X(vp *map[uint16]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Int8V(v map[uint16]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[uint16]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]int16)\n\t\tv, changed := fastpathTV.DecMapUint16Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]int16)\n\t\tfastpathTV.DecMapUint16Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Int16X(vp *map[uint16]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Int16V(v map[uint16]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)\n\t\tv = make(map[uint16]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]int32)\n\t\tv, changed := fastpathTV.DecMapUint16Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]int32)\n\t\tfastpathTV.DecMapUint16Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Int32X(vp *map[uint16]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Int32V(v map[uint16]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[uint16]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]int64)\n\t\tv, changed := fastpathTV.DecMapUint16Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]int64)\n\t\tfastpathTV.DecMapUint16Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Int64X(vp *map[uint16]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Int64V(v map[uint16]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]float32)\n\t\tv, changed := fastpathTV.DecMapUint16Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]float32)\n\t\tfastpathTV.DecMapUint16Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Float32X(vp *map[uint16]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Float32V(v map[uint16]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[uint16]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]float64)\n\t\tv, changed := fastpathTV.DecMapUint16Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]float64)\n\t\tfastpathTV.DecMapUint16Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16Float64X(vp *map[uint16]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16Float64V(v map[uint16]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint16]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint16BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint16]bool)\n\t\tv, changed := fastpathTV.DecMapUint16BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint16]bool)\n\t\tfastpathTV.DecMapUint16BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint16BoolX(vp *map[uint16]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint16BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint16BoolV(v map[uint16]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint16]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[uint16]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint16\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint16(dd.DecodeUint(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]interface{})\n\t\tv, changed := fastpathTV.DecMapUint32IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]interface{})\n\t\tfastpathTV.DecMapUint32IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32IntfX(vp *map[uint32]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32IntfV(v map[uint32]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[uint32]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uint32\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]string)\n\t\tv, changed := fastpathTV.DecMapUint32StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]string)\n\t\tfastpathTV.DecMapUint32StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32StringX(vp *map[uint32]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32StringV(v map[uint32]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[uint32]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uint)\n\t\tv, changed := fastpathTV.DecMapUint32UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uint)\n\t\tfastpathTV.DecMapUint32UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32UintX(vp *map[uint32]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32UintV(v map[uint32]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uint8)\n\t\tv, changed := fastpathTV.DecMapUint32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uint8)\n\t\tfastpathTV.DecMapUint32Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Uint8X(vp *map[uint32]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Uint8V(v map[uint32]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint32]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uint16)\n\t\tv, changed := fastpathTV.DecMapUint32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uint16)\n\t\tfastpathTV.DecMapUint32Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Uint16X(vp *map[uint32]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Uint16V(v map[uint32]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[uint32]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uint32)\n\t\tv, changed := fastpathTV.DecMapUint32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uint32)\n\t\tfastpathTV.DecMapUint32Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Uint32X(vp *map[uint32]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Uint32V(v map[uint32]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[uint32]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uint64)\n\t\tv, changed := fastpathTV.DecMapUint32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uint64)\n\t\tfastpathTV.DecMapUint32Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Uint64X(vp *map[uint32]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Uint64V(v map[uint32]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]uintptr)\n\t\tv, changed := fastpathTV.DecMapUint32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]uintptr)\n\t\tfastpathTV.DecMapUint32UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32UintptrX(vp *map[uint32]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32UintptrV(v map[uint32]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]int)\n\t\tv, changed := fastpathTV.DecMapUint32IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]int)\n\t\tfastpathTV.DecMapUint32IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32IntX(vp *map[uint32]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32IntV(v map[uint32]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]int8)\n\t\tv, changed := fastpathTV.DecMapUint32Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]int8)\n\t\tfastpathTV.DecMapUint32Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Int8X(vp *map[uint32]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Int8V(v map[uint32]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint32]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]int16)\n\t\tv, changed := fastpathTV.DecMapUint32Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]int16)\n\t\tfastpathTV.DecMapUint32Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Int16X(vp *map[uint32]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Int16V(v map[uint32]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[uint32]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]int32)\n\t\tv, changed := fastpathTV.DecMapUint32Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]int32)\n\t\tfastpathTV.DecMapUint32Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Int32X(vp *map[uint32]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Int32V(v map[uint32]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[uint32]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]int64)\n\t\tv, changed := fastpathTV.DecMapUint32Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]int64)\n\t\tfastpathTV.DecMapUint32Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Int64X(vp *map[uint32]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Int64V(v map[uint32]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]float32)\n\t\tv, changed := fastpathTV.DecMapUint32Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]float32)\n\t\tfastpathTV.DecMapUint32Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Float32X(vp *map[uint32]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Float32V(v map[uint32]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[uint32]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]float64)\n\t\tv, changed := fastpathTV.DecMapUint32Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]float64)\n\t\tfastpathTV.DecMapUint32Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32Float64X(vp *map[uint32]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32Float64V(v map[uint32]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint32]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint32BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint32]bool)\n\t\tv, changed := fastpathTV.DecMapUint32BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint32]bool)\n\t\tfastpathTV.DecMapUint32BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint32BoolX(vp *map[uint32]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint32BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint32BoolV(v map[uint32]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint32]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[uint32]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint32\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uint32(dd.DecodeUint(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]interface{})\n\t\tv, changed := fastpathTV.DecMapUint64IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]interface{})\n\t\tfastpathTV.DecMapUint64IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64IntfX(vp *map[uint64]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64IntfV(v map[uint64]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uint64]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uint64\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]string)\n\t\tv, changed := fastpathTV.DecMapUint64StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]string)\n\t\tfastpathTV.DecMapUint64StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64StringX(vp *map[uint64]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64StringV(v map[uint64]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uint64]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uint)\n\t\tv, changed := fastpathTV.DecMapUint64UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uint)\n\t\tfastpathTV.DecMapUint64UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64UintX(vp *map[uint64]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64UintV(v map[uint64]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uint8)\n\t\tv, changed := fastpathTV.DecMapUint64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uint8)\n\t\tfastpathTV.DecMapUint64Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Uint8X(vp *map[uint64]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Uint8V(v map[uint64]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint64]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uint16)\n\t\tv, changed := fastpathTV.DecMapUint64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uint16)\n\t\tfastpathTV.DecMapUint64Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Uint16X(vp *map[uint64]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Uint16V(v map[uint64]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint64]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uint32)\n\t\tv, changed := fastpathTV.DecMapUint64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uint32)\n\t\tfastpathTV.DecMapUint64Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Uint32X(vp *map[uint64]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Uint32V(v map[uint64]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint64]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uint64)\n\t\tv, changed := fastpathTV.DecMapUint64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uint64)\n\t\tfastpathTV.DecMapUint64Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Uint64X(vp *map[uint64]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Uint64V(v map[uint64]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]uintptr)\n\t\tv, changed := fastpathTV.DecMapUint64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]uintptr)\n\t\tfastpathTV.DecMapUint64UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64UintptrX(vp *map[uint64]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64UintptrV(v map[uint64]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]int)\n\t\tv, changed := fastpathTV.DecMapUint64IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]int)\n\t\tfastpathTV.DecMapUint64IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64IntX(vp *map[uint64]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64IntV(v map[uint64]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]int8)\n\t\tv, changed := fastpathTV.DecMapUint64Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]int8)\n\t\tfastpathTV.DecMapUint64Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Int8X(vp *map[uint64]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Int8V(v map[uint64]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint64]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]int16)\n\t\tv, changed := fastpathTV.DecMapUint64Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]int16)\n\t\tfastpathTV.DecMapUint64Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Int16X(vp *map[uint64]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Int16V(v map[uint64]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uint64]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]int32)\n\t\tv, changed := fastpathTV.DecMapUint64Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]int32)\n\t\tfastpathTV.DecMapUint64Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Int32X(vp *map[uint64]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Int32V(v map[uint64]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint64]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]int64)\n\t\tv, changed := fastpathTV.DecMapUint64Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]int64)\n\t\tfastpathTV.DecMapUint64Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Int64X(vp *map[uint64]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Int64V(v map[uint64]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]float32)\n\t\tv, changed := fastpathTV.DecMapUint64Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]float32)\n\t\tfastpathTV.DecMapUint64Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Float32X(vp *map[uint64]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Float32V(v map[uint64]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uint64]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]float64)\n\t\tv, changed := fastpathTV.DecMapUint64Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]float64)\n\t\tfastpathTV.DecMapUint64Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64Float64X(vp *map[uint64]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64Float64V(v map[uint64]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uint64]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUint64BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uint64]bool)\n\t\tv, changed := fastpathTV.DecMapUint64BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uint64]bool)\n\t\tfastpathTV.DecMapUint64BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUint64BoolX(vp *map[uint64]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUint64BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUint64BoolV(v map[uint64]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uint64]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uint64]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uint64\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeUint(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]interface{})\n\t\tv, changed := fastpathTV.DecMapUintptrIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]interface{})\n\t\tfastpathTV.DecMapUintptrIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrIntfX(vp *map[uintptr]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrIntfV(v map[uintptr]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uintptr]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk uintptr\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]string)\n\t\tv, changed := fastpathTV.DecMapUintptrStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]string)\n\t\tfastpathTV.DecMapUintptrStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrStringX(vp *map[uintptr]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrStringV(v map[uintptr]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[uintptr]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uint)\n\t\tv, changed := fastpathTV.DecMapUintptrUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uint)\n\t\tfastpathTV.DecMapUintptrUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUintX(vp *map[uintptr]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUintV(v map[uintptr]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uint8)\n\t\tv, changed := fastpathTV.DecMapUintptrUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uint8)\n\t\tfastpathTV.DecMapUintptrUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUint8X(vp *map[uintptr]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUint8V(v map[uintptr]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uintptr]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uint16)\n\t\tv, changed := fastpathTV.DecMapUintptrUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uint16)\n\t\tfastpathTV.DecMapUintptrUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUint16X(vp *map[uintptr]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUint16V(v map[uintptr]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uintptr]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uint32)\n\t\tv, changed := fastpathTV.DecMapUintptrUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uint32)\n\t\tfastpathTV.DecMapUintptrUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUint32X(vp *map[uintptr]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUint32V(v map[uintptr]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uintptr]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uint64)\n\t\tv, changed := fastpathTV.DecMapUintptrUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uint64)\n\t\tfastpathTV.DecMapUintptrUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUint64X(vp *map[uintptr]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUint64V(v map[uintptr]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]uintptr)\n\t\tv, changed := fastpathTV.DecMapUintptrUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]uintptr)\n\t\tfastpathTV.DecMapUintptrUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrUintptrX(vp *map[uintptr]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrUintptrV(v map[uintptr]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]int)\n\t\tv, changed := fastpathTV.DecMapUintptrIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]int)\n\t\tfastpathTV.DecMapUintptrIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrIntX(vp *map[uintptr]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrIntV(v map[uintptr]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]int8)\n\t\tv, changed := fastpathTV.DecMapUintptrInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]int8)\n\t\tfastpathTV.DecMapUintptrInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrInt8X(vp *map[uintptr]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrInt8V(v map[uintptr]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uintptr]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]int16)\n\t\tv, changed := fastpathTV.DecMapUintptrInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]int16)\n\t\tfastpathTV.DecMapUintptrInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrInt16X(vp *map[uintptr]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrInt16V(v map[uintptr]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[uintptr]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]int32)\n\t\tv, changed := fastpathTV.DecMapUintptrInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]int32)\n\t\tfastpathTV.DecMapUintptrInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrInt32X(vp *map[uintptr]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrInt32V(v map[uintptr]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uintptr]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]int64)\n\t\tv, changed := fastpathTV.DecMapUintptrInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]int64)\n\t\tfastpathTV.DecMapUintptrInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrInt64X(vp *map[uintptr]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrInt64V(v map[uintptr]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]float32)\n\t\tv, changed := fastpathTV.DecMapUintptrFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]float32)\n\t\tfastpathTV.DecMapUintptrFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrFloat32X(vp *map[uintptr]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrFloat32V(v map[uintptr]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[uintptr]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]float64)\n\t\tv, changed := fastpathTV.DecMapUintptrFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]float64)\n\t\tfastpathTV.DecMapUintptrFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrFloat64X(vp *map[uintptr]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrFloat64V(v map[uintptr]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[uintptr]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapUintptrBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[uintptr]bool)\n\t\tv, changed := fastpathTV.DecMapUintptrBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[uintptr]bool)\n\t\tfastpathTV.DecMapUintptrBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapUintptrBoolX(vp *map[uintptr]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapUintptrBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapUintptrBoolV(v map[uintptr]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[uintptr]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[uintptr]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk uintptr\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]interface{})\n\t\tv, changed := fastpathTV.DecMapIntIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]interface{})\n\t\tfastpathTV.DecMapIntIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntIntfX(vp *map[int]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntIntfV(v map[int]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[int]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk int\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]string)\n\t\tv, changed := fastpathTV.DecMapIntStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]string)\n\t\tfastpathTV.DecMapIntStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntStringX(vp *map[int]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntStringV(v map[int]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[int]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uint)\n\t\tv, changed := fastpathTV.DecMapIntUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uint)\n\t\tfastpathTV.DecMapIntUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUintX(vp *map[int]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUintV(v map[int]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uint8)\n\t\tv, changed := fastpathTV.DecMapIntUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uint8)\n\t\tfastpathTV.DecMapIntUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUint8X(vp *map[int]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUint8V(v map[int]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uint16)\n\t\tv, changed := fastpathTV.DecMapIntUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uint16)\n\t\tfastpathTV.DecMapIntUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUint16X(vp *map[int]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUint16V(v map[int]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uint32)\n\t\tv, changed := fastpathTV.DecMapIntUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uint32)\n\t\tfastpathTV.DecMapIntUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUint32X(vp *map[int]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUint32V(v map[int]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uint64)\n\t\tv, changed := fastpathTV.DecMapIntUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uint64)\n\t\tfastpathTV.DecMapIntUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUint64X(vp *map[int]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUint64V(v map[int]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]uintptr)\n\t\tv, changed := fastpathTV.DecMapIntUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]uintptr)\n\t\tfastpathTV.DecMapIntUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntUintptrX(vp *map[int]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntUintptrV(v map[int]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]int)\n\t\tv, changed := fastpathTV.DecMapIntIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]int)\n\t\tfastpathTV.DecMapIntIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntIntX(vp *map[int]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntIntV(v map[int]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]int8)\n\t\tv, changed := fastpathTV.DecMapIntInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]int8)\n\t\tfastpathTV.DecMapIntInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntInt8X(vp *map[int]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntInt8V(v map[int]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]int16)\n\t\tv, changed := fastpathTV.DecMapIntInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]int16)\n\t\tfastpathTV.DecMapIntInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntInt16X(vp *map[int]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntInt16V(v map[int]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]int32)\n\t\tv, changed := fastpathTV.DecMapIntInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]int32)\n\t\tfastpathTV.DecMapIntInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntInt32X(vp *map[int]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntInt32V(v map[int]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]int64)\n\t\tv, changed := fastpathTV.DecMapIntInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]int64)\n\t\tfastpathTV.DecMapIntInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntInt64X(vp *map[int]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntInt64V(v map[int]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]float32)\n\t\tv, changed := fastpathTV.DecMapIntFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]float32)\n\t\tfastpathTV.DecMapIntFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntFloat32X(vp *map[int]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntFloat32V(v map[int]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]float64)\n\t\tv, changed := fastpathTV.DecMapIntFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]float64)\n\t\tfastpathTV.DecMapIntFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntFloat64X(vp *map[int]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntFloat64V(v map[int]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapIntBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int]bool)\n\t\tv, changed := fastpathTV.DecMapIntBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int]bool)\n\t\tfastpathTV.DecMapIntBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapIntBoolX(vp *map[int]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapIntBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapIntBoolV(v map[int]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int(dd.DecodeInt(intBitsize))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]interface{})\n\t\tv, changed := fastpathTV.DecMapInt8IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]interface{})\n\t\tfastpathTV.DecMapInt8IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8IntfX(vp *map[int8]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8IntfV(v map[int8]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[int8]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk int8\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]string)\n\t\tv, changed := fastpathTV.DecMapInt8StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]string)\n\t\tfastpathTV.DecMapInt8StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8StringX(vp *map[int8]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8StringV(v map[int8]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[int8]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uint)\n\t\tv, changed := fastpathTV.DecMapInt8UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uint)\n\t\tfastpathTV.DecMapInt8UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8UintX(vp *map[int8]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8UintV(v map[int8]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uint8)\n\t\tv, changed := fastpathTV.DecMapInt8Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uint8)\n\t\tfastpathTV.DecMapInt8Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Uint8X(vp *map[int8]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Uint8V(v map[int8]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[int8]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uint16)\n\t\tv, changed := fastpathTV.DecMapInt8Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uint16)\n\t\tfastpathTV.DecMapInt8Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Uint16X(vp *map[int8]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Uint16V(v map[int8]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[int8]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uint32)\n\t\tv, changed := fastpathTV.DecMapInt8Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uint32)\n\t\tfastpathTV.DecMapInt8Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Uint32X(vp *map[int8]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Uint32V(v map[int8]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int8]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uint64)\n\t\tv, changed := fastpathTV.DecMapInt8Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uint64)\n\t\tfastpathTV.DecMapInt8Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Uint64X(vp *map[int8]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Uint64V(v map[int8]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]uintptr)\n\t\tv, changed := fastpathTV.DecMapInt8UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]uintptr)\n\t\tfastpathTV.DecMapInt8UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8UintptrX(vp *map[int8]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8UintptrV(v map[int8]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]int)\n\t\tv, changed := fastpathTV.DecMapInt8IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]int)\n\t\tfastpathTV.DecMapInt8IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8IntX(vp *map[int8]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8IntV(v map[int8]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]int8)\n\t\tv, changed := fastpathTV.DecMapInt8Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]int8)\n\t\tfastpathTV.DecMapInt8Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Int8X(vp *map[int8]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Int8V(v map[int8]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[int8]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]int16)\n\t\tv, changed := fastpathTV.DecMapInt8Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]int16)\n\t\tfastpathTV.DecMapInt8Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Int16X(vp *map[int8]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Int16V(v map[int8]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[int8]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]int32)\n\t\tv, changed := fastpathTV.DecMapInt8Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]int32)\n\t\tfastpathTV.DecMapInt8Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Int32X(vp *map[int8]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Int32V(v map[int8]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int8]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]int64)\n\t\tv, changed := fastpathTV.DecMapInt8Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]int64)\n\t\tfastpathTV.DecMapInt8Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Int64X(vp *map[int8]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Int64V(v map[int8]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]float32)\n\t\tv, changed := fastpathTV.DecMapInt8Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]float32)\n\t\tfastpathTV.DecMapInt8Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Float32X(vp *map[int8]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Float32V(v map[int8]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int8]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]float64)\n\t\tv, changed := fastpathTV.DecMapInt8Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]float64)\n\t\tfastpathTV.DecMapInt8Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8Float64X(vp *map[int8]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8Float64V(v map[int8]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int8]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt8BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int8]bool)\n\t\tv, changed := fastpathTV.DecMapInt8BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int8]bool)\n\t\tfastpathTV.DecMapInt8BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt8BoolX(vp *map[int8]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt8BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt8BoolV(v map[int8]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int8]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[int8]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int8\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int8(dd.DecodeInt(8))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]interface{})\n\t\tv, changed := fastpathTV.DecMapInt16IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]interface{})\n\t\tfastpathTV.DecMapInt16IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16IntfX(vp *map[int16]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16IntfV(v map[int16]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[int16]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk int16\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]string)\n\t\tv, changed := fastpathTV.DecMapInt16StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]string)\n\t\tfastpathTV.DecMapInt16StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16StringX(vp *map[int16]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16StringV(v map[int16]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 18)\n\t\tv = make(map[int16]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uint)\n\t\tv, changed := fastpathTV.DecMapInt16UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uint)\n\t\tfastpathTV.DecMapInt16UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16UintX(vp *map[int16]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16UintV(v map[int16]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uint8)\n\t\tv, changed := fastpathTV.DecMapInt16Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uint8)\n\t\tfastpathTV.DecMapInt16Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Uint8X(vp *map[int16]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Uint8V(v map[int16]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[int16]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uint16)\n\t\tv, changed := fastpathTV.DecMapInt16Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uint16)\n\t\tfastpathTV.DecMapInt16Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Uint16X(vp *map[int16]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Uint16V(v map[int16]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)\n\t\tv = make(map[int16]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uint32)\n\t\tv, changed := fastpathTV.DecMapInt16Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uint32)\n\t\tfastpathTV.DecMapInt16Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Uint32X(vp *map[int16]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Uint32V(v map[int16]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[int16]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uint64)\n\t\tv, changed := fastpathTV.DecMapInt16Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uint64)\n\t\tfastpathTV.DecMapInt16Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Uint64X(vp *map[int16]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Uint64V(v map[int16]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]uintptr)\n\t\tv, changed := fastpathTV.DecMapInt16UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]uintptr)\n\t\tfastpathTV.DecMapInt16UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16UintptrX(vp *map[int16]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16UintptrV(v map[int16]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]int)\n\t\tv, changed := fastpathTV.DecMapInt16IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]int)\n\t\tfastpathTV.DecMapInt16IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16IntX(vp *map[int16]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16IntV(v map[int16]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]int8)\n\t\tv, changed := fastpathTV.DecMapInt16Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]int8)\n\t\tfastpathTV.DecMapInt16Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Int8X(vp *map[int16]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Int8V(v map[int16]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[int16]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]int16)\n\t\tv, changed := fastpathTV.DecMapInt16Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]int16)\n\t\tfastpathTV.DecMapInt16Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Int16X(vp *map[int16]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Int16V(v map[int16]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 4)\n\t\tv = make(map[int16]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]int32)\n\t\tv, changed := fastpathTV.DecMapInt16Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]int32)\n\t\tfastpathTV.DecMapInt16Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Int32X(vp *map[int16]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Int32V(v map[int16]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[int16]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]int64)\n\t\tv, changed := fastpathTV.DecMapInt16Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]int64)\n\t\tfastpathTV.DecMapInt16Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Int64X(vp *map[int16]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Int64V(v map[int16]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]float32)\n\t\tv, changed := fastpathTV.DecMapInt16Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]float32)\n\t\tfastpathTV.DecMapInt16Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Float32X(vp *map[int16]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Float32V(v map[int16]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[int16]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]float64)\n\t\tv, changed := fastpathTV.DecMapInt16Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]float64)\n\t\tfastpathTV.DecMapInt16Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16Float64X(vp *map[int16]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16Float64V(v map[int16]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int16]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt16BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int16]bool)\n\t\tv, changed := fastpathTV.DecMapInt16BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int16]bool)\n\t\tfastpathTV.DecMapInt16BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt16BoolX(vp *map[int16]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt16BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt16BoolV(v map[int16]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int16]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[int16]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int16\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int16(dd.DecodeInt(16))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]interface{})\n\t\tv, changed := fastpathTV.DecMapInt32IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]interface{})\n\t\tfastpathTV.DecMapInt32IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32IntfX(vp *map[int32]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32IntfV(v map[int32]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[int32]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk int32\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]string)\n\t\tv, changed := fastpathTV.DecMapInt32StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]string)\n\t\tfastpathTV.DecMapInt32StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32StringX(vp *map[int32]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32StringV(v map[int32]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 20)\n\t\tv = make(map[int32]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uint)\n\t\tv, changed := fastpathTV.DecMapInt32UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uint)\n\t\tfastpathTV.DecMapInt32UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32UintX(vp *map[int32]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32UintV(v map[int32]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uint8)\n\t\tv, changed := fastpathTV.DecMapInt32Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uint8)\n\t\tfastpathTV.DecMapInt32Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Uint8X(vp *map[int32]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Uint8V(v map[int32]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int32]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uint16)\n\t\tv, changed := fastpathTV.DecMapInt32Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uint16)\n\t\tfastpathTV.DecMapInt32Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Uint16X(vp *map[int32]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Uint16V(v map[int32]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[int32]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uint32)\n\t\tv, changed := fastpathTV.DecMapInt32Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uint32)\n\t\tfastpathTV.DecMapInt32Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Uint32X(vp *map[int32]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Uint32V(v map[int32]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[int32]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uint64)\n\t\tv, changed := fastpathTV.DecMapInt32Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uint64)\n\t\tfastpathTV.DecMapInt32Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Uint64X(vp *map[int32]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Uint64V(v map[int32]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]uintptr)\n\t\tv, changed := fastpathTV.DecMapInt32UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]uintptr)\n\t\tfastpathTV.DecMapInt32UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32UintptrX(vp *map[int32]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32UintptrV(v map[int32]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]int)\n\t\tv, changed := fastpathTV.DecMapInt32IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]int)\n\t\tfastpathTV.DecMapInt32IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32IntX(vp *map[int32]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32IntV(v map[int32]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]int8)\n\t\tv, changed := fastpathTV.DecMapInt32Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]int8)\n\t\tfastpathTV.DecMapInt32Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Int8X(vp *map[int32]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Int8V(v map[int32]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int32]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]int16)\n\t\tv, changed := fastpathTV.DecMapInt32Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]int16)\n\t\tfastpathTV.DecMapInt32Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Int16X(vp *map[int32]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Int16V(v map[int32]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 6)\n\t\tv = make(map[int32]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]int32)\n\t\tv, changed := fastpathTV.DecMapInt32Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]int32)\n\t\tfastpathTV.DecMapInt32Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Int32X(vp *map[int32]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Int32V(v map[int32]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[int32]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]int64)\n\t\tv, changed := fastpathTV.DecMapInt32Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]int64)\n\t\tfastpathTV.DecMapInt32Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Int64X(vp *map[int32]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Int64V(v map[int32]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]float32)\n\t\tv, changed := fastpathTV.DecMapInt32Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]float32)\n\t\tfastpathTV.DecMapInt32Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Float32X(vp *map[int32]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Float32V(v map[int32]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 8)\n\t\tv = make(map[int32]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]float64)\n\t\tv, changed := fastpathTV.DecMapInt32Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]float64)\n\t\tfastpathTV.DecMapInt32Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32Float64X(vp *map[int32]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32Float64V(v map[int32]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int32]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt32BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int32]bool)\n\t\tv, changed := fastpathTV.DecMapInt32BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int32]bool)\n\t\tfastpathTV.DecMapInt32BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt32BoolX(vp *map[int32]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt32BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt32BoolV(v map[int32]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int32]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[int32]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int32\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = int32(dd.DecodeInt(32))\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64IntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]interface{})\n\t\tv, changed := fastpathTV.DecMapInt64IntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]interface{})\n\t\tfastpathTV.DecMapInt64IntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64IntfX(vp *map[int64]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64IntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64IntfV(v map[int64]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[int64]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk int64\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64StringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]string)\n\t\tv, changed := fastpathTV.DecMapInt64StringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]string)\n\t\tfastpathTV.DecMapInt64StringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64StringX(vp *map[int64]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64StringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64StringV(v map[int64]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 24)\n\t\tv = make(map[int64]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64UintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uint)\n\t\tv, changed := fastpathTV.DecMapInt64UintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uint)\n\t\tfastpathTV.DecMapInt64UintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64UintX(vp *map[int64]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64UintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64UintV(v map[int64]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Uint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uint8)\n\t\tv, changed := fastpathTV.DecMapInt64Uint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uint8)\n\t\tfastpathTV.DecMapInt64Uint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Uint8X(vp *map[int64]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Uint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Uint8V(v map[int64]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int64]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Uint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uint16)\n\t\tv, changed := fastpathTV.DecMapInt64Uint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uint16)\n\t\tfastpathTV.DecMapInt64Uint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Uint16X(vp *map[int64]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Uint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Uint16V(v map[int64]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int64]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Uint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uint32)\n\t\tv, changed := fastpathTV.DecMapInt64Uint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uint32)\n\t\tfastpathTV.DecMapInt64Uint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Uint32X(vp *map[int64]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Uint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Uint32V(v map[int64]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int64]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Uint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uint64)\n\t\tv, changed := fastpathTV.DecMapInt64Uint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uint64)\n\t\tfastpathTV.DecMapInt64Uint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Uint64X(vp *map[int64]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Uint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Uint64V(v map[int64]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64UintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]uintptr)\n\t\tv, changed := fastpathTV.DecMapInt64UintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]uintptr)\n\t\tfastpathTV.DecMapInt64UintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64UintptrX(vp *map[int64]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64UintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64UintptrV(v map[int64]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64IntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]int)\n\t\tv, changed := fastpathTV.DecMapInt64IntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]int)\n\t\tfastpathTV.DecMapInt64IntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64IntX(vp *map[int64]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64IntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64IntV(v map[int64]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Int8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]int8)\n\t\tv, changed := fastpathTV.DecMapInt64Int8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]int8)\n\t\tfastpathTV.DecMapInt64Int8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Int8X(vp *map[int64]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Int8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Int8V(v map[int64]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int64]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Int16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]int16)\n\t\tv, changed := fastpathTV.DecMapInt64Int16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]int16)\n\t\tfastpathTV.DecMapInt64Int16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Int16X(vp *map[int64]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Int16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Int16V(v map[int64]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 10)\n\t\tv = make(map[int64]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Int32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]int32)\n\t\tv, changed := fastpathTV.DecMapInt64Int32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]int32)\n\t\tfastpathTV.DecMapInt64Int32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Int32X(vp *map[int64]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Int32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Int32V(v map[int64]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int64]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Int64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]int64)\n\t\tv, changed := fastpathTV.DecMapInt64Int64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]int64)\n\t\tfastpathTV.DecMapInt64Int64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Int64X(vp *map[int64]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Int64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Int64V(v map[int64]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Float32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]float32)\n\t\tv, changed := fastpathTV.DecMapInt64Float32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]float32)\n\t\tfastpathTV.DecMapInt64Float32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Float32X(vp *map[int64]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Float32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Float32V(v map[int64]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 12)\n\t\tv = make(map[int64]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64Float64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]float64)\n\t\tv, changed := fastpathTV.DecMapInt64Float64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]float64)\n\t\tfastpathTV.DecMapInt64Float64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64Float64X(vp *map[int64]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64Float64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64Float64V(v map[int64]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 16)\n\t\tv = make(map[int64]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapInt64BoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[int64]bool)\n\t\tv, changed := fastpathTV.DecMapInt64BoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[int64]bool)\n\t\tfastpathTV.DecMapInt64BoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapInt64BoolX(vp *map[int64]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapInt64BoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapInt64BoolV(v map[int64]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[int64]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[int64]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk int64\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeInt(64)\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolIntfR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]interface{})\n\t\tv, changed := fastpathTV.DecMapBoolIntfV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]interface{})\n\t\tfastpathTV.DecMapBoolIntfV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolIntfX(vp *map[bool]interface{}, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolIntfV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolIntfV(v map[bool]interface{}, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]interface{}, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[bool]interface{}, xlen)\n\t\tchanged = true\n\t}\n\tmapGet := !d.h.MapValueReset && !d.h.InterfaceReset\n\tvar mk bool\n\tvar mv interface{}\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tif mapGet {\n\t\t\t\tmv = v[mk]\n\t\t\t} else {\n\t\t\t\tmv = nil\n\t\t\t}\n\t\t\td.decode(&mv)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolStringR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]string)\n\t\tv, changed := fastpathTV.DecMapBoolStringV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]string)\n\t\tfastpathTV.DecMapBoolStringV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolStringX(vp *map[bool]string, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolStringV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolStringV(v map[bool]string, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]string, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 17)\n\t\tv = make(map[bool]string, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv string\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeString()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUintR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uint)\n\t\tv, changed := fastpathTV.DecMapBoolUintV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uint)\n\t\tfastpathTV.DecMapBoolUintV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUintX(vp *map[bool]uint, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUintV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUintV(v map[bool]uint, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uint, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]uint, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uint\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUint8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uint8)\n\t\tv, changed := fastpathTV.DecMapBoolUint8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uint8)\n\t\tfastpathTV.DecMapBoolUint8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUint8X(vp *map[bool]uint8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUint8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUint8V(v map[bool]uint8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uint8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[bool]uint8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uint8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint8(dd.DecodeUint(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUint16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uint16)\n\t\tv, changed := fastpathTV.DecMapBoolUint16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uint16)\n\t\tfastpathTV.DecMapBoolUint16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUint16X(vp *map[bool]uint16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUint16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUint16V(v map[bool]uint16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uint16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[bool]uint16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uint16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint16(dd.DecodeUint(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUint32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uint32)\n\t\tv, changed := fastpathTV.DecMapBoolUint32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uint32)\n\t\tfastpathTV.DecMapBoolUint32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUint32X(vp *map[bool]uint32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUint32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUint32V(v map[bool]uint32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uint32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[bool]uint32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uint32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uint32(dd.DecodeUint(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUint64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uint64)\n\t\tv, changed := fastpathTV.DecMapBoolUint64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uint64)\n\t\tfastpathTV.DecMapBoolUint64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUint64X(vp *map[bool]uint64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUint64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUint64V(v map[bool]uint64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uint64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]uint64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uint64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeUint(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolUintptrR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]uintptr)\n\t\tv, changed := fastpathTV.DecMapBoolUintptrV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]uintptr)\n\t\tfastpathTV.DecMapBoolUintptrV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolUintptrX(vp *map[bool]uintptr, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolUintptrV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolUintptrV(v map[bool]uintptr, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]uintptr, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]uintptr, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv uintptr\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = uintptr(dd.DecodeUint(uintBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolIntR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]int)\n\t\tv, changed := fastpathTV.DecMapBoolIntV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]int)\n\t\tfastpathTV.DecMapBoolIntV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolIntX(vp *map[bool]int, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolIntV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolIntV(v map[bool]int, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]int, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]int, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv int\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int(dd.DecodeInt(intBitsize))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolInt8R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]int8)\n\t\tv, changed := fastpathTV.DecMapBoolInt8V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]int8)\n\t\tfastpathTV.DecMapBoolInt8V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolInt8X(vp *map[bool]int8, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolInt8V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolInt8V(v map[bool]int8, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]int8, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[bool]int8, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv int8\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int8(dd.DecodeInt(8))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolInt16R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]int16)\n\t\tv, changed := fastpathTV.DecMapBoolInt16V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]int16)\n\t\tfastpathTV.DecMapBoolInt16V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolInt16X(vp *map[bool]int16, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolInt16V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolInt16V(v map[bool]int16, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]int16, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 3)\n\t\tv = make(map[bool]int16, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv int16\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int16(dd.DecodeInt(16))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolInt32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]int32)\n\t\tv, changed := fastpathTV.DecMapBoolInt32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]int32)\n\t\tfastpathTV.DecMapBoolInt32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolInt32X(vp *map[bool]int32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolInt32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolInt32V(v map[bool]int32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]int32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[bool]int32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv int32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = int32(dd.DecodeInt(32))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolInt64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]int64)\n\t\tv, changed := fastpathTV.DecMapBoolInt64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]int64)\n\t\tfastpathTV.DecMapBoolInt64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolInt64X(vp *map[bool]int64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolInt64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolInt64V(v map[bool]int64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]int64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]int64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv int64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeInt(64)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolFloat32R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]float32)\n\t\tv, changed := fastpathTV.DecMapBoolFloat32V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]float32)\n\t\tfastpathTV.DecMapBoolFloat32V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolFloat32X(vp *map[bool]float32, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolFloat32V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolFloat32V(v map[bool]float32, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]float32, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 5)\n\t\tv = make(map[bool]float32, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv float32\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = float32(dd.DecodeFloat(true))\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolFloat64R(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]float64)\n\t\tv, changed := fastpathTV.DecMapBoolFloat64V(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]float64)\n\t\tfastpathTV.DecMapBoolFloat64V(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolFloat64X(vp *map[bool]float64, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolFloat64V(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolFloat64V(v map[bool]float64, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]float64, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 9)\n\t\tv = make(map[bool]float64, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv float64\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeFloat(false)\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n\nfunc (f *decFnInfo) fastpathDecMapBoolBoolR(rv reflect.Value) {\n\tif rv.CanAddr() {\n\t\tvp := rv.Addr().Interface().(*map[bool]bool)\n\t\tv, changed := fastpathTV.DecMapBoolBoolV(*vp, fastpathCheckNilFalse, true, f.d)\n\t\tif changed {\n\t\t\t*vp = v\n\t\t}\n\t} else {\n\t\tv := rv.Interface().(map[bool]bool)\n\t\tfastpathTV.DecMapBoolBoolV(v, fastpathCheckNilFalse, false, f.d)\n\t}\n}\nfunc (f fastpathT) DecMapBoolBoolX(vp *map[bool]bool, checkNil bool, d *Decoder) {\n\tv, changed := f.DecMapBoolBoolV(*vp, checkNil, true, d)\n\tif changed {\n\t\t*vp = v\n\t}\n}\nfunc (_ fastpathT) DecMapBoolBoolV(v map[bool]bool, checkNil bool, canChange bool,\n\td *Decoder) (_ map[bool]bool, changed bool) {\n\tdd := d.d\n\tcr := d.cr\n\n\tif checkNil && dd.TryDecodeAsNil() {\n\t\tif v != nil {\n\t\t\tchanged = true\n\t\t}\n\t\treturn nil, changed\n\t}\n\n\tcontainerLen := dd.ReadMapStart()\n\tif canChange && v == nil {\n\t\txlen, _ := decInferLen(containerLen, d.h.MaxInitLen, 2)\n\t\tv = make(map[bool]bool, xlen)\n\t\tchanged = true\n\t}\n\n\tvar mk bool\n\tvar mv bool\n\tif containerLen > 0 {\n\t\tfor j := 0; j < containerLen; j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t} else if containerLen < 0 {\n\t\tfor j := 0; !dd.CheckBreak(); j++ {\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapKey)\n\t\t\t}\n\t\t\tmk = dd.DecodeBool()\n\t\t\tif cr != nil {\n\t\t\t\tcr.sendContainerState(containerMapValue)\n\t\t\t}\n\t\t\tmv = dd.DecodeBool()\n\t\t\tif v != nil {\n\t\t\t\tv[mk] = mv\n\t\t\t}\n\t\t}\n\t}\n\tif cr != nil {\n\t\tcr.sendContainerState(containerMapEnd)\n\t}\n\treturn v, changed\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/fast-path.not.go",
    "content": "// +build notfastpath\n\npackage codec\n\nimport \"reflect\"\n\nconst fastpathEnabled = false\n\n// The generated fast-path code is very large, and adds a few seconds to the build time.\n// This causes test execution, execution of small tools which use codec, etc\n// to take a long time.\n//\n// To mitigate, we now support the notfastpath tag.\n// This tag disables fastpath during build, allowing for faster build, test execution,\n// short-program runs, etc.\n\nfunc fastpathDecodeTypeSwitch(iv interface{}, d *Decoder) bool      { return false }\nfunc fastpathEncodeTypeSwitch(iv interface{}, e *Encoder) bool      { return false }\nfunc fastpathEncodeTypeSwitchSlice(iv interface{}, e *Encoder) bool { return false }\nfunc fastpathEncodeTypeSwitchMap(iv interface{}, e *Encoder) bool   { return false }\n\ntype fastpathT struct{}\ntype fastpathE struct {\n\trtid  uintptr\n\trt    reflect.Type\n\tencfn func(*encFnInfo, reflect.Value)\n\tdecfn func(*decFnInfo, reflect.Value)\n}\ntype fastpathA [0]fastpathE\n\nfunc (x fastpathA) index(rtid uintptr) int { return -1 }\n\nvar fastpathAV fastpathA\nvar fastpathTV fastpathT\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen-helper.generated.go",
    "content": "/* // +build ignore */\n\n// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// ************************************************************\n// DO NOT EDIT.\n// THIS FILE IS AUTO-GENERATED from gen-helper.go.tmpl\n// ************************************************************\n\npackage codec\n\nimport (\n\t\"encoding\"\n\t\"reflect\"\n)\n\n// This file is used to generate helper code for codecgen.\n// The values here i.e. genHelper(En|De)coder are not to be used directly by\n// library users. They WILL change continuously and without notice.\n//\n// To help enforce this, we create an unexported type with exported members.\n// The only way to get the type is via the one exported type that we control (somewhat).\n//\n// When static codecs are created for types, they will use this value\n// to perform encoding or decoding of primitives or known slice or map types.\n\n// GenHelperEncoder is exported so that it can be used externally by codecgen.\n// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.\nfunc GenHelperEncoder(e *Encoder) (genHelperEncoder, encDriver) {\n\treturn genHelperEncoder{e: e}, e.e\n}\n\n// GenHelperDecoder is exported so that it can be used externally by codecgen.\n// Library users: DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.\nfunc GenHelperDecoder(d *Decoder) (genHelperDecoder, decDriver) {\n\treturn genHelperDecoder{d: d}, d.d\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\ntype genHelperEncoder struct {\n\te *Encoder\n\tF fastpathT\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\ntype genHelperDecoder struct {\n\td *Decoder\n\tF fastpathT\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncBasicHandle() *BasicHandle {\n\treturn f.e.h\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncBinary() bool {\n\treturn f.e.be // f.e.hh.isBinaryEncoding()\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncFallback(iv interface{}) {\n\t// println(\">>>>>>>>> EncFallback\")\n\tf.e.encodeI(iv, false, false)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncTextMarshal(iv encoding.TextMarshaler) {\n\tbs, fnerr := iv.MarshalText()\n\tf.e.marshal(bs, fnerr, false, c_UTF8)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncJSONMarshal(iv jsonMarshaler) {\n\tbs, fnerr := iv.MarshalJSON()\n\tf.e.marshal(bs, fnerr, true, c_UTF8)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncBinaryMarshal(iv encoding.BinaryMarshaler) {\n\tbs, fnerr := iv.MarshalBinary()\n\tf.e.marshal(bs, fnerr, false, c_RAW)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncRaw(iv Raw) {\n\tf.e.raw(iv)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) TimeRtidIfBinc() uintptr {\n\tif _, ok := f.e.hh.(*BincHandle); ok {\n\t\treturn timeTypId\n\t}\n\treturn 0\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) IsJSONHandle() bool {\n\treturn f.e.js\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) HasExtensions() bool {\n\treturn len(f.e.h.extHandle) != 0\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncExt(v interface{}) (r bool) {\n\trt := reflect.TypeOf(v)\n\tif rt.Kind() == reflect.Ptr {\n\t\trt = rt.Elem()\n\t}\n\trtid := reflect.ValueOf(rt).Pointer()\n\tif xfFn := f.e.h.getExt(rtid); xfFn != nil {\n\t\tf.e.e.EncodeExt(v, xfFn.tag, xfFn.ext, f.e)\n\t\treturn true\n\t}\n\treturn false\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperEncoder) EncSendContainerState(c containerState) {\n\tif f.e.cr != nil {\n\t\tf.e.cr.sendContainerState(c)\n\t}\n}\n\n// ---------------- DECODER FOLLOWS -----------------\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecBasicHandle() *BasicHandle {\n\treturn f.d.h\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecBinary() bool {\n\treturn f.d.be // f.d.hh.isBinaryEncoding()\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecSwallow() {\n\tf.d.swallow()\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecScratchBuffer() []byte {\n\treturn f.d.b[:]\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecFallback(iv interface{}, chkPtr bool) {\n\t// println(\">>>>>>>>> DecFallback\")\n\tf.d.decodeI(iv, chkPtr, false, false, false)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecSliceHelperStart() (decSliceHelper, int) {\n\treturn f.d.decSliceHelperStart()\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecStructFieldNotFound(index int, name string) {\n\tf.d.structFieldNotFound(index, name)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecArrayCannotExpand(sliceLen, streamLen int) {\n\tf.d.arrayCannotExpand(sliceLen, streamLen)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecTextUnmarshal(tm encoding.TextUnmarshaler) {\n\tfnerr := tm.UnmarshalText(f.d.d.DecodeBytes(f.d.b[:], true, true))\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecJSONUnmarshal(tm jsonUnmarshaler) {\n\t// bs := f.dd.DecodeBytes(f.d.b[:], true, true)\n\t// grab the bytes to be read, as UnmarshalJSON needs the full JSON so as to unmarshal it itself.\n\tfnerr := tm.UnmarshalJSON(f.d.nextValueBytes())\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecBinaryUnmarshal(bm encoding.BinaryUnmarshaler) {\n\tfnerr := bm.UnmarshalBinary(f.d.d.DecodeBytes(nil, false, true))\n\tif fnerr != nil {\n\t\tpanic(fnerr)\n\t}\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecRaw() []byte {\n\treturn f.d.raw()\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) TimeRtidIfBinc() uintptr {\n\tif _, ok := f.d.hh.(*BincHandle); ok {\n\t\treturn timeTypId\n\t}\n\treturn 0\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) IsJSONHandle() bool {\n\treturn f.d.js\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) HasExtensions() bool {\n\treturn len(f.d.h.extHandle) != 0\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecExt(v interface{}) (r bool) {\n\trt := reflect.TypeOf(v).Elem()\n\trtid := reflect.ValueOf(rt).Pointer()\n\tif xfFn := f.d.h.getExt(rtid); xfFn != nil {\n\t\tf.d.d.DecodeExt(v, xfFn.tag, xfFn.ext)\n\t\treturn true\n\t}\n\treturn false\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecInferLen(clen, maxlen, unit int) (rvlen int, truncated bool) {\n\treturn decInferLen(clen, maxlen, unit)\n}\n\n// FOR USE BY CODECGEN ONLY. IT *WILL* CHANGE WITHOUT NOTICE. *DO NOT USE*\nfunc (f genHelperDecoder) DecSendContainerState(c containerState) {\n\tif f.d.cr != nil {\n\t\tf.d.cr.sendContainerState(c)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen.generated.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\n// DO NOT EDIT. THIS FILE IS AUTO-GENERATED FROM gen-dec-(map|array).go.tmpl\n\nconst genDecMapTmpl = `\n{{var \"v\"}} := *{{ .Varname }}\n{{var \"l\"}} := r.ReadMapStart()\n{{var \"bh\"}} := z.DecBasicHandle()\nif {{var \"v\"}} == nil {\n\t{{var \"rl\"}}, _ := z.DecInferLen({{var \"l\"}}, {{var \"bh\"}}.MaxInitLen, {{ .Size }})\n\t{{var \"v\"}} = make(map[{{ .KTyp }}]{{ .Typ }}, {{var \"rl\"}})\n\t*{{ .Varname }} = {{var \"v\"}}\n}\nvar {{var \"mk\"}} {{ .KTyp }}\nvar {{var \"mv\"}} {{ .Typ }}\nvar {{var \"mg\"}} {{if decElemKindPtr}}, {{var \"ms\"}}, {{var \"mok\"}}{{end}} bool\nif {{var \"bh\"}}.MapValueReset {\n\t{{if decElemKindPtr}}{{var \"mg\"}} = true\n\t{{else if decElemKindIntf}}if !{{var \"bh\"}}.InterfaceReset { {{var \"mg\"}} = true }\n\t{{else if not decElemKindImmutable}}{{var \"mg\"}} = true\n\t{{end}} }\nif {{var \"l\"}} > 0  {\nfor {{var \"j\"}} := 0; {{var \"j\"}} < {{var \"l\"}}; {{var \"j\"}}++ {\n\tz.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})\n\t{{ $x := printf \"%vmk%v\" .TempVar .Rand }}{{ decLineVarK $x }}\n{{ if eq .KTyp \"interface{}\" }}{{/* // special case if a byte array. */}}if {{var \"bv\"}}, {{var \"bok\"}} := {{var \"mk\"}}.([]byte); {{var \"bok\"}} {\n\t\t{{var \"mk\"}} = string({{var \"bv\"}})\n\t}{{ end }}{{if decElemKindPtr}}\n\t{{var \"ms\"}} = true{{end}}\n\tif {{var \"mg\"}} {\n\t\t{{if decElemKindPtr}}{{var \"mv\"}}, {{var \"mok\"}} = {{var \"v\"}}[{{var \"mk\"}}] \n\t\tif {{var \"mok\"}} {\n\t\t\t{{var \"ms\"}} = false\n\t\t} {{else}}{{var \"mv\"}} = {{var \"v\"}}[{{var \"mk\"}}] {{end}}\n\t} {{if not decElemKindImmutable}}else { {{var \"mv\"}} = {{decElemZero}} }{{end}}\n\tz.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})\n\t{{ $x := printf \"%vmv%v\" .TempVar .Rand }}{{ decLineVar $x }}\n\tif {{if decElemKindPtr}} {{var \"ms\"}} && {{end}} {{var \"v\"}} != nil {\n\t\t{{var \"v\"}}[{{var \"mk\"}}] = {{var \"mv\"}}\n\t}\n}\n} else if {{var \"l\"}} < 0  {\nfor {{var \"j\"}} := 0; !r.CheckBreak(); {{var \"j\"}}++ {\n\tz.DecSendContainerState(codecSelfer_containerMapKey{{ .Sfx }})\n\t{{ $x := printf \"%vmk%v\" .TempVar .Rand }}{{ decLineVarK $x }}\n{{ if eq .KTyp \"interface{}\" }}{{/* // special case if a byte array. */}}if {{var \"bv\"}}, {{var \"bok\"}} := {{var \"mk\"}}.([]byte); {{var \"bok\"}} {\n\t\t{{var \"mk\"}} = string({{var \"bv\"}})\n\t}{{ end }}{{if decElemKindPtr}}\n\t{{var \"ms\"}} = true {{ end }}\n\tif {{var \"mg\"}} {\n\t\t{{if decElemKindPtr}}{{var \"mv\"}}, {{var \"mok\"}} = {{var \"v\"}}[{{var \"mk\"}}] \n\t\tif {{var \"mok\"}} {\n\t\t\t{{var \"ms\"}} = false\n\t\t} {{else}}{{var \"mv\"}} = {{var \"v\"}}[{{var \"mk\"}}] {{end}}\n\t} {{if not decElemKindImmutable}}else { {{var \"mv\"}} = {{decElemZero}} }{{end}}\n\tz.DecSendContainerState(codecSelfer_containerMapValue{{ .Sfx }})\n\t{{ $x := printf \"%vmv%v\" .TempVar .Rand }}{{ decLineVar $x }}\n\tif {{if decElemKindPtr}} {{var \"ms\"}} && {{end}} {{var \"v\"}} != nil {\n\t\t{{var \"v\"}}[{{var \"mk\"}}] = {{var \"mv\"}}\n\t}\n}\n} // else len==0: TODO: Should we clear map entries?\nz.DecSendContainerState(codecSelfer_containerMapEnd{{ .Sfx }})\n`\n\nconst genDecListTmpl = `\n{{var \"v\"}} := {{if not isArray}}*{{end}}{{ .Varname }}\n{{var \"h\"}}, {{var \"l\"}} := z.DecSliceHelperStart() {{/* // helper, containerLenS */}}{{if not isArray}}\nvar {{var \"c\"}} bool {{/* // changed */}}\n_ = {{var \"c\"}}{{end}}\nif {{var \"l\"}} == 0 {\n\t{{if isSlice }}if {{var \"v\"}} == nil {\n\t\t{{var \"v\"}} = []{{ .Typ }}{}\n\t\t{{var \"c\"}} = true\n\t} else if len({{var \"v\"}}) != 0 {\n\t\t{{var \"v\"}} = {{var \"v\"}}[:0]\n\t\t{{var \"c\"}} = true\n\t} {{end}} {{if isChan }}if {{var \"v\"}} == nil {\n\t\t{{var \"v\"}} = make({{ .CTyp }}, 0)\n\t\t{{var \"c\"}} = true\n\t} {{end}}\n} else if {{var \"l\"}} > 0 {\n\t{{if isChan }}if {{var \"v\"}} == nil {\n\t\t{{var \"rl\"}}, _ = z.DecInferLen({{var \"l\"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})\n\t\t{{var \"v\"}} = make({{ .CTyp }}, {{var \"rl\"}})\n\t\t{{var \"c\"}} = true\n\t}\n\tfor {{var \"r\"}} := 0; {{var \"r\"}} < {{var \"l\"}}; {{var \"r\"}}++ {\n\t\t{{var \"h\"}}.ElemContainerState({{var \"r\"}})\n\t\tvar {{var \"t\"}} {{ .Typ }}\n\t\t{{ $x := printf \"%st%s\" .TempVar .Rand }}{{ decLineVar $x }}\n\t\t{{var \"v\"}} <- {{var \"t\"}}\n\t}\n\t{{ else }}\tvar {{var \"rr\"}}, {{var \"rl\"}} int {{/* // num2read, length of slice/array/chan */}}\n\tvar {{var \"rt\"}} bool {{/* truncated */}}\n\t_, _ = {{var \"rl\"}}, {{var \"rt\"}}\n\t{{var \"rr\"}} = {{var \"l\"}} // len({{var \"v\"}})\n\tif {{var \"l\"}} > cap({{var \"v\"}}) {\n\t\t{{if isArray }}z.DecArrayCannotExpand(len({{var \"v\"}}), {{var \"l\"}})\n\t\t{{ else }}{{if not .Immutable }}\n\t\t{{var \"rg\"}} := len({{var \"v\"}}) > 0\n\t\t{{var \"v2\"}} := {{var \"v\"}} {{end}}\n\t\t{{var \"rl\"}}, {{var \"rt\"}} = z.DecInferLen({{var \"l\"}}, z.DecBasicHandle().MaxInitLen, {{ .Size }})\n\t\tif {{var \"rt\"}} {\n\t\t\tif {{var \"rl\"}} <= cap({{var \"v\"}}) {\n\t\t\t\t{{var \"v\"}} = {{var \"v\"}}[:{{var \"rl\"}}]\n\t\t\t} else {\n\t\t\t\t{{var \"v\"}} = make([]{{ .Typ }}, {{var \"rl\"}})\n\t\t\t}\n\t\t} else {\n\t\t\t{{var \"v\"}} = make([]{{ .Typ }}, {{var \"rl\"}})\n\t\t}\n\t\t{{var \"c\"}} = true\n\t\t{{var \"rr\"}} = len({{var \"v\"}}) {{if not .Immutable }}\n\t\t\tif {{var \"rg\"}} { copy({{var \"v\"}}, {{var \"v2\"}}) } {{end}} {{end}}{{/* end not Immutable, isArray */}}\n\t} {{if isSlice }} else if {{var \"l\"}} != len({{var \"v\"}}) {\n\t\t{{var \"v\"}} = {{var \"v\"}}[:{{var \"l\"}}]\n\t\t{{var \"c\"}} = true\n\t} {{end}}\t{{/* end isSlice:47 */}} \n\t{{var \"j\"}} := 0\n\tfor ; {{var \"j\"}} < {{var \"rr\"}} ; {{var \"j\"}}++ {\n\t\t{{var \"h\"}}.ElemContainerState({{var \"j\"}})\n\t\t{{ $x := printf \"%[1]vv%[2]v[%[1]vj%[2]v]\" .TempVar .Rand }}{{ decLineVar $x }}\n\t}\n\t{{if isArray }}for ; {{var \"j\"}} < {{var \"l\"}} ; {{var \"j\"}}++ {\n\t\t{{var \"h\"}}.ElemContainerState({{var \"j\"}})\n\t\tz.DecSwallow()\n\t}\n\t{{ else }}if {{var \"rt\"}} {\n\t\tfor ; {{var \"j\"}} < {{var \"l\"}} ; {{var \"j\"}}++ {\n\t\t\t{{var \"v\"}} = append({{var \"v\"}}, {{ zero}})\n\t\t\t{{var \"h\"}}.ElemContainerState({{var \"j\"}})\n\t\t\t{{ $x := printf \"%[1]vv%[2]v[%[1]vj%[2]v]\" .TempVar .Rand }}{{ decLineVar $x }}\n\t\t}\n\t} {{end}} {{/* end isArray:56 */}}\n\t{{end}} {{/* end isChan:16 */}}\n} else { {{/* len < 0 */}}\n\t{{var \"j\"}} := 0\n\tfor ; !r.CheckBreak(); {{var \"j\"}}++ {\n\t\t{{if isChan }}\n\t\t{{var \"h\"}}.ElemContainerState({{var \"j\"}})\n\t\tvar {{var \"t\"}} {{ .Typ }}\n\t\t{{ $x := printf \"%st%s\" .TempVar .Rand }}{{ decLineVar $x }}\n\t\t{{var \"v\"}} <- {{var \"t\"}} \n\t\t{{ else }}\n\t\tif {{var \"j\"}} >= len({{var \"v\"}}) {\n\t\t\t{{if isArray }}z.DecArrayCannotExpand(len({{var \"v\"}}), {{var \"j\"}}+1)\n\t\t\t{{ else }}{{var \"v\"}} = append({{var \"v\"}}, {{zero}})// var {{var \"z\"}} {{ .Typ }}\n\t\t\t{{var \"c\"}} = true {{end}}\n\t\t}\n\t\t{{var \"h\"}}.ElemContainerState({{var \"j\"}})\n\t\tif {{var \"j\"}} < len({{var \"v\"}}) {\n\t\t\t{{ $x := printf \"%[1]vv%[2]v[%[1]vj%[2]v]\" .TempVar .Rand }}{{ decLineVar $x }}\n\t\t} else {\n\t\t\tz.DecSwallow()\n\t\t}\n\t\t{{end}}\n\t}\n\t{{if isSlice }}if {{var \"j\"}} < len({{var \"v\"}}) {\n\t\t{{var \"v\"}} = {{var \"v\"}}[:{{var \"j\"}}]\n\t\t{{var \"c\"}} = true\n\t} else if {{var \"j\"}} == 0 && {{var \"v\"}} == nil {\n\t\t{{var \"v\"}} = []{{ .Typ }}{}\n\t\t{{var \"c\"}} = true\n\t}{{end}}\n}\n{{var \"h\"}}.End()\n{{if not isArray }}if {{var \"c\"}} { \n\t*{{ .Varname }} = {{var \"v\"}}\n}{{end}}\n`\n\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math/rand\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"text/template\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// ---------------------------------------------------\n// codecgen supports the full cycle of reflection-based codec:\n//    - RawExt\n//    - Raw\n//    - Builtins\n//    - Extensions\n//    - (Binary|Text|JSON)(Unm|M)arshal\n//    - generic by-kind\n//\n// This means that, for dynamic things, we MUST use reflection to at least get the reflect.Type.\n// In those areas, we try to only do reflection or interface-conversion when NECESSARY:\n//    - Extensions, only if Extensions are configured.\n//\n// However, codecgen doesn't support the following:\n//   - Canonical option. (codecgen IGNORES it currently)\n//     This is just because it has not been implemented.\n//\n// During encode/decode, Selfer takes precedence.\n// A type implementing Selfer will know how to encode/decode itself statically.\n//\n// The following field types are supported:\n//     array: [n]T\n//     slice: []T\n//     map: map[K]V\n//     primitive: [u]int[n], float(32|64), bool, string\n//     struct\n//\n// ---------------------------------------------------\n// Note that a Selfer cannot call (e|d).(En|De)code on itself,\n// as this will cause a circular reference, as (En|De)code will call Selfer methods.\n// Any type that implements Selfer must implement completely and not fallback to (En|De)code.\n//\n// In addition, code in this file manages the generation of fast-path implementations of\n// encode/decode of slices/maps of primitive keys/values.\n//\n// Users MUST re-generate their implementations whenever the code shape changes.\n// The generated code will panic if it was generated with a version older than the supporting library.\n// ---------------------------------------------------\n//\n// codec framework is very feature rich.\n// When encoding or decoding into an interface, it depends on the runtime type of the interface.\n// The type of the interface may be a named type, an extension, etc.\n// Consequently, we fallback to runtime codec for encoding/decoding interfaces.\n// In addition, we fallback for any value which cannot be guaranteed at runtime.\n// This allows us support ANY value, including any named types, specifically those which\n// do not implement our interfaces (e.g. Selfer).\n//\n// This explains some slowness compared to other code generation codecs (e.g. msgp).\n// This reduction in speed is only seen when your refers to interfaces,\n// e.g. type T struct { A interface{}; B []interface{}; C map[string]interface{} }\n//\n// codecgen will panic if the file was generated with an old version of the library in use.\n//\n// Note:\n//   It was a conscious decision to have gen.go always explicitly call EncodeNil or TryDecodeAsNil.\n//   This way, there isn't a function call overhead just to see that we should not enter a block of code.\n\n// GenVersion is the current version of codecgen.\n//\n// NOTE: Increment this value each time codecgen changes fundamentally.\n// Fundamental changes are:\n//   - helper methods change (signature change, new ones added, some removed, etc)\n//   - codecgen command line changes\n//\n// v1: Initial Version\n// v2:\n// v3: Changes for Kubernetes:\n//     changes in signature of some unpublished helper methods and codecgen cmdline arguments.\n// v4: Removed separator support from (en|de)cDriver, and refactored codec(gen)\n// v5: changes to support faster json decoding. Let encoder/decoder maintain state of collections.\nconst GenVersion = 5\n\nconst (\n\tgenCodecPkg        = \"codec1978\"\n\tgenTempVarPfx      = \"yy\"\n\tgenTopLevelVarName = \"x\"\n\n\t// ignore canBeNil parameter, and always set to true.\n\t// This is because nil can appear anywhere, so we should always check.\n\tgenAnythingCanBeNil = true\n\n\t// if genUseOneFunctionForDecStructMap, make a single codecDecodeSelferFromMap function;\n\t// else make codecDecodeSelferFromMap{LenPrefix,CheckBreak} so that conditionals\n\t// are not executed a lot.\n\t//\n\t// From testing, it didn't make much difference in runtime, so keep as true (one function only)\n\tgenUseOneFunctionForDecStructMap = true\n)\n\ntype genStructMapStyle uint8\n\nconst (\n\tgenStructMapStyleConsolidated genStructMapStyle = iota\n\tgenStructMapStyleLenPrefix\n\tgenStructMapStyleCheckBreak\n)\n\nvar (\n\tgenAllTypesSamePkgErr  = errors.New(\"All types must be in the same package\")\n\tgenExpectArrayOrMapErr = errors.New(\"unexpected type. Expecting array/map/slice\")\n\tgenBase64enc           = base64.NewEncoding(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789__\")\n\tgenQNameRegex          = regexp.MustCompile(`[A-Za-z_.]+`)\n\tgenCheckVendor         bool\n)\n\n// genRunner holds some state used during a Gen run.\ntype genRunner struct {\n\tw io.Writer      // output\n\tc uint64         // counter used for generating varsfx\n\tt []reflect.Type // list of types to run selfer on\n\n\ttc reflect.Type     // currently running selfer on this type\n\tte map[uintptr]bool // types for which the encoder has been created\n\ttd map[uintptr]bool // types for which the decoder has been created\n\tcp string           // codec import path\n\n\tim  map[string]reflect.Type // imports to add\n\timn map[string]string       // package names of imports to add\n\timc uint64                  // counter for import numbers\n\n\tis map[reflect.Type]struct{} // types seen during import search\n\tbp string                    // base PkgPath, for which we are generating for\n\n\tcpfx   string // codec package prefix\n\tunsafe bool   // is unsafe to be used in generated code?\n\n\ttm map[reflect.Type]struct{} // types for which enc/dec must be generated\n\tts []reflect.Type            // types for which enc/dec must be generated\n\n\txs string // top level variable/constant suffix\n\thn string // fn helper type name\n\n\tti *TypeInfos\n\t// rr *rand.Rand // random generator for file-specific types\n}\n\n// Gen will write a complete go file containing Selfer implementations for each\n// type passed. All the types must be in the same package.\n//\n// Library users: *DO NOT USE IT DIRECTLY. IT WILL CHANGE CONTINOUSLY WITHOUT NOTICE.*\nfunc Gen(w io.Writer, buildTags, pkgName, uid string, useUnsafe bool, ti *TypeInfos, typ ...reflect.Type) {\n\t// All types passed to this method do not have a codec.Selfer method implemented directly.\n\t// codecgen already checks the AST and skips any types that define the codec.Selfer methods.\n\t// Consequently, there's no need to check and trim them if they implement codec.Selfer\n\n\tif len(typ) == 0 {\n\t\treturn\n\t}\n\tx := genRunner{\n\t\tunsafe: useUnsafe,\n\t\tw:      w,\n\t\tt:      typ,\n\t\tte:     make(map[uintptr]bool),\n\t\ttd:     make(map[uintptr]bool),\n\t\tim:     make(map[string]reflect.Type),\n\t\timn:    make(map[string]string),\n\t\tis:     make(map[reflect.Type]struct{}),\n\t\ttm:     make(map[reflect.Type]struct{}),\n\t\tts:     []reflect.Type{},\n\t\tbp:     genImportPath(typ[0]),\n\t\txs:     uid,\n\t\tti:     ti,\n\t}\n\tif x.ti == nil {\n\t\tx.ti = defTypeInfos\n\t}\n\tif x.xs == \"\" {\n\t\trr := rand.New(rand.NewSource(time.Now().UnixNano()))\n\t\tx.xs = strconv.FormatInt(rr.Int63n(9999), 10)\n\t}\n\n\t// gather imports first:\n\tx.cp = genImportPath(reflect.TypeOf(x))\n\tx.imn[x.cp] = genCodecPkg\n\tfor _, t := range typ {\n\t\t// fmt.Printf(\"###########: PkgPath: '%v', Name: '%s'\\n\", genImportPath(t), t.Name())\n\t\tif genImportPath(t) != x.bp {\n\t\t\tpanic(genAllTypesSamePkgErr)\n\t\t}\n\t\tx.genRefPkgs(t)\n\t}\n\tif buildTags != \"\" {\n\t\tx.line(\"// +build \" + buildTags)\n\t\tx.line(\"\")\n\t}\n\tx.line(`\n\n// ************************************************************\n// DO NOT EDIT.\n// THIS FILE IS AUTO-GENERATED BY codecgen.\n// ************************************************************\n\n`)\n\tx.line(\"package \" + pkgName)\n\tx.line(\"\")\n\tx.line(\"import (\")\n\tif x.cp != x.bp {\n\t\tx.cpfx = genCodecPkg + \".\"\n\t\tx.linef(\"%s \\\"%s\\\"\", genCodecPkg, x.cp)\n\t}\n\t// use a sorted set of im keys, so that we can get consistent output\n\timKeys := make([]string, 0, len(x.im))\n\tfor k, _ := range x.im {\n\t\timKeys = append(imKeys, k)\n\t}\n\tsort.Strings(imKeys)\n\tfor _, k := range imKeys { // for k, _ := range x.im {\n\t\tx.linef(\"%s \\\"%s\\\"\", x.imn[k], k)\n\t}\n\t// add required packages\n\tfor _, k := range [...]string{\"reflect\", \"unsafe\", \"runtime\", \"fmt\", \"errors\"} {\n\t\tif _, ok := x.im[k]; !ok {\n\t\t\tif k == \"unsafe\" && !x.unsafe {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tx.line(\"\\\"\" + k + \"\\\"\")\n\t\t}\n\t}\n\tx.line(\")\")\n\tx.line(\"\")\n\n\tx.line(\"const (\")\n\tx.linef(\"// ----- content types ----\")\n\tx.linef(\"codecSelferC_UTF8%s = %v\", x.xs, int64(c_UTF8))\n\tx.linef(\"codecSelferC_RAW%s = %v\", x.xs, int64(c_RAW))\n\tx.linef(\"// ----- value types used ----\")\n\tx.linef(\"codecSelferValueTypeArray%s = %v\", x.xs, int64(valueTypeArray))\n\tx.linef(\"codecSelferValueTypeMap%s = %v\", x.xs, int64(valueTypeMap))\n\tx.linef(\"// ----- containerStateValues ----\")\n\tx.linef(\"codecSelfer_containerMapKey%s = %v\", x.xs, int64(containerMapKey))\n\tx.linef(\"codecSelfer_containerMapValue%s = %v\", x.xs, int64(containerMapValue))\n\tx.linef(\"codecSelfer_containerMapEnd%s = %v\", x.xs, int64(containerMapEnd))\n\tx.linef(\"codecSelfer_containerArrayElem%s = %v\", x.xs, int64(containerArrayElem))\n\tx.linef(\"codecSelfer_containerArrayEnd%s = %v\", x.xs, int64(containerArrayEnd))\n\tx.line(\")\")\n\tx.line(\"var (\")\n\tx.line(\"codecSelferBitsize\" + x.xs + \" = uint8(reflect.TypeOf(uint(0)).Bits())\")\n\tx.line(\"codecSelferOnlyMapOrArrayEncodeToStructErr\" + x.xs + \" = errors.New(`only encoded map or array can be decoded into a struct`)\")\n\tx.line(\")\")\n\tx.line(\"\")\n\n\tif x.unsafe {\n\t\tx.line(\"type codecSelferUnsafeString\" + x.xs + \" struct { Data uintptr; Len int}\")\n\t\tx.line(\"\")\n\t}\n\tx.hn = \"codecSelfer\" + x.xs\n\tx.line(\"type \" + x.hn + \" struct{}\")\n\tx.line(\"\")\n\n\tx.varsfxreset()\n\tx.line(\"func init() {\")\n\tx.linef(\"if %sGenVersion != %v {\", x.cpfx, GenVersion)\n\tx.line(\"_, file, _, _ := runtime.Caller(0)\")\n\tx.line(`err := fmt.Errorf(\"codecgen version mismatch: current: %v, need %v. Re-generate file: %v\", `)\n\tx.linef(`%v, %sGenVersion, file)`, GenVersion, x.cpfx)\n\tx.line(\"panic(err)\")\n\tx.linef(\"}\")\n\tx.line(\"if false { // reference the types, but skip this branch at build/run time\")\n\tvar n int\n\t// for k, t := range x.im {\n\tfor _, k := range imKeys {\n\t\tt := x.im[k]\n\t\tx.linef(\"var v%v %s.%s\", n, x.imn[k], t.Name())\n\t\tn++\n\t}\n\tif x.unsafe {\n\t\tx.linef(\"var v%v unsafe.Pointer\", n)\n\t\tn++\n\t}\n\tif n > 0 {\n\t\tx.out(\"_\")\n\t\tfor i := 1; i < n; i++ {\n\t\t\tx.out(\", _\")\n\t\t}\n\t\tx.out(\" = v0\")\n\t\tfor i := 1; i < n; i++ {\n\t\t\tx.outf(\", v%v\", i)\n\t\t}\n\t}\n\tx.line(\"} \") // close if false\n\tx.line(\"}\")  // close init\n\tx.line(\"\")\n\n\t// generate rest of type info\n\tfor _, t := range typ {\n\t\tx.tc = t\n\t\tx.selfer(true)\n\t\tx.selfer(false)\n\t}\n\n\tfor _, t := range x.ts {\n\t\trtid := reflect.ValueOf(t).Pointer()\n\t\t// generate enc functions for all these slice/map types.\n\t\tx.varsfxreset()\n\t\tx.linef(\"func (x %s) enc%s(v %s%s, e *%sEncoder) {\", x.hn, x.genMethodNameT(t), x.arr2str(t, \"*\"), x.genTypeName(t), x.cpfx)\n\t\tx.genRequiredMethodVars(true)\n\t\tswitch t.Kind() {\n\t\tcase reflect.Array, reflect.Slice, reflect.Chan:\n\t\t\tx.encListFallback(\"v\", t)\n\t\tcase reflect.Map:\n\t\t\tx.encMapFallback(\"v\", t)\n\t\tdefault:\n\t\t\tpanic(genExpectArrayOrMapErr)\n\t\t}\n\t\tx.line(\"}\")\n\t\tx.line(\"\")\n\n\t\t// generate dec functions for all these slice/map types.\n\t\tx.varsfxreset()\n\t\tx.linef(\"func (x %s) dec%s(v *%s, d *%sDecoder) {\", x.hn, x.genMethodNameT(t), x.genTypeName(t), x.cpfx)\n\t\tx.genRequiredMethodVars(false)\n\t\tswitch t.Kind() {\n\t\tcase reflect.Array, reflect.Slice, reflect.Chan:\n\t\t\tx.decListFallback(\"v\", rtid, t)\n\t\tcase reflect.Map:\n\t\t\tx.decMapFallback(\"v\", rtid, t)\n\t\tdefault:\n\t\t\tpanic(genExpectArrayOrMapErr)\n\t\t}\n\t\tx.line(\"}\")\n\t\tx.line(\"\")\n\t}\n\n\tx.line(\"\")\n}\n\nfunc (x *genRunner) checkForSelfer(t reflect.Type, varname string) bool {\n\t// return varname != genTopLevelVarName && t != x.tc\n\t// the only time we checkForSelfer is if we are not at the TOP of the generated code.\n\treturn varname != genTopLevelVarName\n}\n\nfunc (x *genRunner) arr2str(t reflect.Type, s string) string {\n\tif t.Kind() == reflect.Array {\n\t\treturn s\n\t}\n\treturn \"\"\n}\n\nfunc (x *genRunner) genRequiredMethodVars(encode bool) {\n\tx.line(\"var h \" + x.hn)\n\tif encode {\n\t\tx.line(\"z, r := \" + x.cpfx + \"GenHelperEncoder(e)\")\n\t} else {\n\t\tx.line(\"z, r := \" + x.cpfx + \"GenHelperDecoder(d)\")\n\t}\n\tx.line(\"_, _, _ = h, z, r\")\n}\n\nfunc (x *genRunner) genRefPkgs(t reflect.Type) {\n\tif _, ok := x.is[t]; ok {\n\t\treturn\n\t}\n\t// fmt.Printf(\">>>>>>: PkgPath: '%v', Name: '%s'\\n\", genImportPath(t), t.Name())\n\tx.is[t] = struct{}{}\n\ttpkg, tname := genImportPath(t), t.Name()\n\tif tpkg != \"\" && tpkg != x.bp && tpkg != x.cp && tname != \"\" && tname[0] >= 'A' && tname[0] <= 'Z' {\n\t\tif _, ok := x.im[tpkg]; !ok {\n\t\t\tx.im[tpkg] = t\n\t\t\tif idx := strings.LastIndex(tpkg, \"/\"); idx < 0 {\n\t\t\t\tx.imn[tpkg] = tpkg\n\t\t\t} else {\n\t\t\t\tx.imc++\n\t\t\t\tx.imn[tpkg] = \"pkg\" + strconv.FormatUint(x.imc, 10) + \"_\" + genGoIdentifier(tpkg[idx+1:], false)\n\t\t\t}\n\t\t}\n\t}\n\tswitch t.Kind() {\n\tcase reflect.Array, reflect.Slice, reflect.Ptr, reflect.Chan:\n\t\tx.genRefPkgs(t.Elem())\n\tcase reflect.Map:\n\t\tx.genRefPkgs(t.Elem())\n\t\tx.genRefPkgs(t.Key())\n\tcase reflect.Struct:\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tif fname := t.Field(i).Name; fname != \"\" && fname[0] >= 'A' && fname[0] <= 'Z' {\n\t\t\t\tx.genRefPkgs(t.Field(i).Type)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (x *genRunner) line(s string) {\n\tx.out(s)\n\tif len(s) == 0 || s[len(s)-1] != '\\n' {\n\t\tx.out(\"\\n\")\n\t}\n}\n\nfunc (x *genRunner) varsfx() string {\n\tx.c++\n\treturn strconv.FormatUint(x.c, 10)\n}\n\nfunc (x *genRunner) varsfxreset() {\n\tx.c = 0\n}\n\nfunc (x *genRunner) out(s string) {\n\tif _, err := io.WriteString(x.w, s); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (x *genRunner) linef(s string, params ...interface{}) {\n\tx.line(fmt.Sprintf(s, params...))\n}\n\nfunc (x *genRunner) outf(s string, params ...interface{}) {\n\tx.out(fmt.Sprintf(s, params...))\n}\n\nfunc (x *genRunner) genTypeName(t reflect.Type) (n string) {\n\t// defer func() { fmt.Printf(\">>>> ####: genTypeName: t: %v, name: '%s'\\n\", t, n) }()\n\n\t// if the type has a PkgPath, which doesn't match the current package,\n\t// then include it.\n\t// We cannot depend on t.String() because it includes current package,\n\t// or t.PkgPath because it includes full import path,\n\t//\n\tvar ptrPfx string\n\tfor t.Kind() == reflect.Ptr {\n\t\tptrPfx += \"*\"\n\t\tt = t.Elem()\n\t}\n\tif tn := t.Name(); tn != \"\" {\n\t\treturn ptrPfx + x.genTypeNamePrim(t)\n\t}\n\tswitch t.Kind() {\n\tcase reflect.Map:\n\t\treturn ptrPfx + \"map[\" + x.genTypeName(t.Key()) + \"]\" + x.genTypeName(t.Elem())\n\tcase reflect.Slice:\n\t\treturn ptrPfx + \"[]\" + x.genTypeName(t.Elem())\n\tcase reflect.Array:\n\t\treturn ptrPfx + \"[\" + strconv.FormatInt(int64(t.Len()), 10) + \"]\" + x.genTypeName(t.Elem())\n\tcase reflect.Chan:\n\t\treturn ptrPfx + t.ChanDir().String() + \" \" + x.genTypeName(t.Elem())\n\tdefault:\n\t\tif t == intfTyp {\n\t\t\treturn ptrPfx + \"interface{}\"\n\t\t} else {\n\t\t\treturn ptrPfx + x.genTypeNamePrim(t)\n\t\t}\n\t}\n}\n\nfunc (x *genRunner) genTypeNamePrim(t reflect.Type) (n string) {\n\tif t.Name() == \"\" {\n\t\treturn t.String()\n\t} else if genImportPath(t) == \"\" || genImportPath(t) == genImportPath(x.tc) {\n\t\treturn t.Name()\n\t} else {\n\t\treturn x.imn[genImportPath(t)] + \".\" + t.Name()\n\t\t// return t.String() // best way to get the package name inclusive\n\t}\n}\n\nfunc (x *genRunner) genZeroValueR(t reflect.Type) string {\n\t// if t is a named type, w\n\tswitch t.Kind() {\n\tcase reflect.Ptr, reflect.Interface, reflect.Chan, reflect.Func,\n\t\treflect.Slice, reflect.Map, reflect.Invalid:\n\t\treturn \"nil\"\n\tcase reflect.Bool:\n\t\treturn \"false\"\n\tcase reflect.String:\n\t\treturn `\"\"`\n\tcase reflect.Struct, reflect.Array:\n\t\treturn x.genTypeName(t) + \"{}\"\n\tdefault: // all numbers\n\t\treturn \"0\"\n\t}\n}\n\nfunc (x *genRunner) genMethodNameT(t reflect.Type) (s string) {\n\treturn genMethodNameT(t, x.tc)\n}\n\nfunc (x *genRunner) selfer(encode bool) {\n\tt := x.tc\n\tt0 := t\n\t// always make decode use a pointer receiver,\n\t// and structs always use a ptr receiver (encode|decode)\n\tisptr := !encode || t.Kind() == reflect.Struct\n\tx.varsfxreset()\n\tfnSigPfx := \"func (x \"\n\tif isptr {\n\t\tfnSigPfx += \"*\"\n\t}\n\tfnSigPfx += x.genTypeName(t)\n\n\tx.out(fnSigPfx)\n\tif isptr {\n\t\tt = reflect.PtrTo(t)\n\t}\n\tif encode {\n\t\tx.line(\") CodecEncodeSelf(e *\" + x.cpfx + \"Encoder) {\")\n\t\tx.genRequiredMethodVars(true)\n\t\t// x.enc(genTopLevelVarName, t)\n\t\tx.encVar(genTopLevelVarName, t)\n\t} else {\n\t\tx.line(\") CodecDecodeSelf(d *\" + x.cpfx + \"Decoder) {\")\n\t\tx.genRequiredMethodVars(false)\n\t\t// do not use decVar, as there is no need to check TryDecodeAsNil\n\t\t// or way to elegantly handle that, and also setting it to a\n\t\t// non-nil value doesn't affect the pointer passed.\n\t\t// x.decVar(genTopLevelVarName, t, false)\n\t\tx.dec(genTopLevelVarName, t0)\n\t}\n\tx.line(\"}\")\n\tx.line(\"\")\n\n\tif encode || t0.Kind() != reflect.Struct {\n\t\treturn\n\t}\n\n\t// write is containerMap\n\tif genUseOneFunctionForDecStructMap {\n\t\tx.out(fnSigPfx)\n\t\tx.line(\") codecDecodeSelfFromMap(l int, d *\" + x.cpfx + \"Decoder) {\")\n\t\tx.genRequiredMethodVars(false)\n\t\tx.decStructMap(genTopLevelVarName, \"l\", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleConsolidated)\n\t\tx.line(\"}\")\n\t\tx.line(\"\")\n\t} else {\n\t\tx.out(fnSigPfx)\n\t\tx.line(\") codecDecodeSelfFromMapLenPrefix(l int, d *\" + x.cpfx + \"Decoder) {\")\n\t\tx.genRequiredMethodVars(false)\n\t\tx.decStructMap(genTopLevelVarName, \"l\", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleLenPrefix)\n\t\tx.line(\"}\")\n\t\tx.line(\"\")\n\n\t\tx.out(fnSigPfx)\n\t\tx.line(\") codecDecodeSelfFromMapCheckBreak(l int, d *\" + x.cpfx + \"Decoder) {\")\n\t\tx.genRequiredMethodVars(false)\n\t\tx.decStructMap(genTopLevelVarName, \"l\", reflect.ValueOf(t0).Pointer(), t0, genStructMapStyleCheckBreak)\n\t\tx.line(\"}\")\n\t\tx.line(\"\")\n\t}\n\n\t// write containerArray\n\tx.out(fnSigPfx)\n\tx.line(\") codecDecodeSelfFromArray(l int, d *\" + x.cpfx + \"Decoder) {\")\n\tx.genRequiredMethodVars(false)\n\tx.decStructArray(genTopLevelVarName, \"l\", \"return\", reflect.ValueOf(t0).Pointer(), t0)\n\tx.line(\"}\")\n\tx.line(\"\")\n\n}\n\n// used for chan, array, slice, map\nfunc (x *genRunner) xtraSM(varname string, encode bool, t reflect.Type) {\n\tif encode {\n\t\tx.linef(\"h.enc%s((%s%s)(%s), e)\", x.genMethodNameT(t), x.arr2str(t, \"*\"), x.genTypeName(t), varname)\n\t} else {\n\t\tx.linef(\"h.dec%s((*%s)(%s), d)\", x.genMethodNameT(t), x.genTypeName(t), varname)\n\t}\n\tx.registerXtraT(t)\n}\n\nfunc (x *genRunner) registerXtraT(t reflect.Type) {\n\t// recursively register the types\n\tif _, ok := x.tm[t]; ok {\n\t\treturn\n\t}\n\tvar tkey reflect.Type\n\tswitch t.Kind() {\n\tcase reflect.Chan, reflect.Slice, reflect.Array:\n\tcase reflect.Map:\n\t\ttkey = t.Key()\n\tdefault:\n\t\treturn\n\t}\n\tx.tm[t] = struct{}{}\n\tx.ts = append(x.ts, t)\n\t// check if this refers to any xtra types eg. a slice of array: add the array\n\tx.registerXtraT(t.Elem())\n\tif tkey != nil {\n\t\tx.registerXtraT(tkey)\n\t}\n}\n\n// encVar will encode a variable.\n// The parameter, t, is the reflect.Type of the variable itself\nfunc (x *genRunner) encVar(varname string, t reflect.Type) {\n\t// fmt.Printf(\">>>>>> varname: %s, t: %v\\n\", varname, t)\n\tvar checkNil bool\n\tswitch t.Kind() {\n\tcase reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Chan:\n\t\tcheckNil = true\n\t}\n\tif checkNil {\n\t\tx.linef(\"if %s == nil { r.EncodeNil() } else { \", varname)\n\t}\n\tswitch t.Kind() {\n\tcase reflect.Ptr:\n\t\tswitch t.Elem().Kind() {\n\t\tcase reflect.Struct, reflect.Array:\n\t\t\tx.enc(varname, genNonPtr(t))\n\t\tdefault:\n\t\t\ti := x.varsfx()\n\t\t\tx.line(genTempVarPfx + i + \" := *\" + varname)\n\t\t\tx.enc(genTempVarPfx+i, genNonPtr(t))\n\t\t}\n\tcase reflect.Struct, reflect.Array:\n\t\ti := x.varsfx()\n\t\tx.line(genTempVarPfx + i + \" := &\" + varname)\n\t\tx.enc(genTempVarPfx+i, t)\n\tdefault:\n\t\tx.enc(varname, t)\n\t}\n\n\tif checkNil {\n\t\tx.line(\"}\")\n\t}\n\n}\n\n// enc will encode a variable (varname) of type t,\n// except t is of kind reflect.Struct or reflect.Array, wherein varname is of type ptrTo(T) (to prevent copying)\nfunc (x *genRunner) enc(varname string, t reflect.Type) {\n\trtid := reflect.ValueOf(t).Pointer()\n\t// We call CodecEncodeSelf if one of the following are honored:\n\t//   - the type already implements Selfer, call that\n\t//   - the type has a Selfer implementation just created, use that\n\t//   - the type is in the list of the ones we will generate for, but it is not currently being generated\n\n\tmi := x.varsfx()\n\ttptr := reflect.PtrTo(t)\n\ttk := t.Kind()\n\tif x.checkForSelfer(t, varname) {\n\t\tif tk == reflect.Array || tk == reflect.Struct { // varname is of type *T\n\t\t\tif tptr.Implements(selferTyp) || t.Implements(selferTyp) {\n\t\t\t\tx.line(varname + \".CodecEncodeSelf(e)\")\n\t\t\t\treturn\n\t\t\t}\n\t\t} else { // varname is of type T\n\t\t\tif t.Implements(selferTyp) {\n\t\t\t\tx.line(varname + \".CodecEncodeSelf(e)\")\n\t\t\t\treturn\n\t\t\t} else if tptr.Implements(selferTyp) {\n\t\t\t\tx.linef(\"%ssf%s := &%s\", genTempVarPfx, mi, varname)\n\t\t\t\tx.linef(\"%ssf%s.CodecEncodeSelf(e)\", genTempVarPfx, mi)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif _, ok := x.te[rtid]; ok {\n\t\t\tx.line(varname + \".CodecEncodeSelf(e)\")\n\t\t\treturn\n\t\t}\n\t}\n\n\tinlist := false\n\tfor _, t0 := range x.t {\n\t\tif t == t0 {\n\t\t\tinlist = true\n\t\t\tif x.checkForSelfer(t, varname) {\n\t\t\t\tx.line(varname + \".CodecEncodeSelf(e)\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tvar rtidAdded bool\n\tif t == x.tc {\n\t\tx.te[rtid] = true\n\t\trtidAdded = true\n\t}\n\n\t// check if\n\t//   - type is RawExt, Raw\n\t//   - the type implements (Text|JSON|Binary)(Unm|M)arshal\n\tx.linef(\"%sm%s := z.EncBinary()\", genTempVarPfx, mi)\n\tx.linef(\"_ = %sm%s\", genTempVarPfx, mi)\n\tx.line(\"if false {\")           //start if block\n\tdefer func() { x.line(\"}\") }() //end if block\n\n\tif t == rawTyp {\n\t\tx.linef(\"} else { z.EncRaw(%v)\", varname)\n\t\treturn\n\t}\n\tif t == rawExtTyp {\n\t\tx.linef(\"} else { r.EncodeRawExt(%v, e)\", varname)\n\t\treturn\n\t}\n\t// HACK: Support for Builtins.\n\t//       Currently, only Binc supports builtins, and the only builtin type is time.Time.\n\t//       Have a method that returns the rtid for time.Time if Handle is Binc.\n\tif t == timeTyp {\n\t\tvrtid := genTempVarPfx + \"m\" + x.varsfx()\n\t\tx.linef(\"} else if %s := z.TimeRtidIfBinc(); %s != 0 { \", vrtid, vrtid)\n\t\tx.linef(\"r.EncodeBuiltin(%s, %s)\", vrtid, varname)\n\t}\n\t// only check for extensions if the type is named, and has a packagePath.\n\tif genImportPath(t) != \"\" && t.Name() != \"\" {\n\t\t// first check if extensions are configued, before doing the interface conversion\n\t\tx.linef(\"} else if z.HasExtensions() && z.EncExt(%s) {\", varname)\n\t}\n\tif tk == reflect.Array || tk == reflect.Struct { // varname is of type *T\n\t\tif t.Implements(binaryMarshalerTyp) || tptr.Implements(binaryMarshalerTyp) {\n\t\t\tx.linef(\"} else if %sm%s { z.EncBinaryMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t}\n\t\tif t.Implements(jsonMarshalerTyp) || tptr.Implements(jsonMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t} else if t.Implements(textMarshalerTyp) || tptr.Implements(textMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s { z.EncTextMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t}\n\t} else { // varname is of type T\n\t\tif t.Implements(binaryMarshalerTyp) {\n\t\t\tx.linef(\"} else if %sm%s { z.EncBinaryMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t} else if tptr.Implements(binaryMarshalerTyp) {\n\t\t\tx.linef(\"} else if %sm%s { z.EncBinaryMarshal(&%v) \", genTempVarPfx, mi, varname)\n\t\t}\n\t\tif t.Implements(jsonMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t} else if tptr.Implements(jsonMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s && z.IsJSONHandle() { z.EncJSONMarshal(&%v) \", genTempVarPfx, mi, varname)\n\t\t} else if t.Implements(textMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s { z.EncTextMarshal(%v) \", genTempVarPfx, mi, varname)\n\t\t} else if tptr.Implements(textMarshalerTyp) {\n\t\t\tx.linef(\"} else if !%sm%s { z.EncTextMarshal(&%v) \", genTempVarPfx, mi, varname)\n\t\t}\n\t}\n\tx.line(\"} else {\")\n\n\tswitch t.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tx.line(\"r.EncodeInt(int64(\" + varname + \"))\")\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tx.line(\"r.EncodeUint(uint64(\" + varname + \"))\")\n\tcase reflect.Float32:\n\t\tx.line(\"r.EncodeFloat32(float32(\" + varname + \"))\")\n\tcase reflect.Float64:\n\t\tx.line(\"r.EncodeFloat64(float64(\" + varname + \"))\")\n\tcase reflect.Bool:\n\t\tx.line(\"r.EncodeBool(bool(\" + varname + \"))\")\n\tcase reflect.String:\n\t\tx.line(\"r.EncodeString(codecSelferC_UTF8\" + x.xs + \", string(\" + varname + \"))\")\n\tcase reflect.Chan:\n\t\tx.xtraSM(varname, true, t)\n\t\t// x.encListFallback(varname, rtid, t)\n\tcase reflect.Array:\n\t\tx.xtraSM(varname, true, t)\n\tcase reflect.Slice:\n\t\t// if nil, call dedicated function\n\t\t// if a []uint8, call dedicated function\n\t\t// if a known fastpath slice, call dedicated function\n\t\t// else write encode function in-line.\n\t\t// - if elements are primitives or Selfers, call dedicated function on each member.\n\t\t// - else call Encoder.encode(XXX) on it.\n\t\tif rtid == uint8SliceTypId {\n\t\t\tx.line(\"r.EncodeStringBytes(codecSelferC_RAW\" + x.xs + \", []byte(\" + varname + \"))\")\n\t\t} else if fastpathAV.index(rtid) != -1 {\n\t\t\tg := x.newGenV(t)\n\t\t\tx.line(\"z.F.\" + g.MethodNamePfx(\"Enc\", false) + \"V(\" + varname + \", false, e)\")\n\t\t} else {\n\t\t\tx.xtraSM(varname, true, t)\n\t\t\t// x.encListFallback(varname, rtid, t)\n\t\t}\n\tcase reflect.Map:\n\t\t// if nil, call dedicated function\n\t\t// if a known fastpath map, call dedicated function\n\t\t// else write encode function in-line.\n\t\t// - if elements are primitives or Selfers, call dedicated function on each member.\n\t\t// - else call Encoder.encode(XXX) on it.\n\t\t// x.line(\"if \" + varname + \" == nil { \\nr.EncodeNil()\\n } else { \")\n\t\tif fastpathAV.index(rtid) != -1 {\n\t\t\tg := x.newGenV(t)\n\t\t\tx.line(\"z.F.\" + g.MethodNamePfx(\"Enc\", false) + \"V(\" + varname + \", false, e)\")\n\t\t} else {\n\t\t\tx.xtraSM(varname, true, t)\n\t\t\t// x.encMapFallback(varname, rtid, t)\n\t\t}\n\tcase reflect.Struct:\n\t\tif !inlist {\n\t\t\tdelete(x.te, rtid)\n\t\t\tx.line(\"z.EncFallback(\" + varname + \")\")\n\t\t\tbreak\n\t\t}\n\t\tx.encStruct(varname, rtid, t)\n\tdefault:\n\t\tif rtidAdded {\n\t\t\tdelete(x.te, rtid)\n\t\t}\n\t\tx.line(\"z.EncFallback(\" + varname + \")\")\n\t}\n}\n\nfunc (x *genRunner) encZero(t reflect.Type) {\n\tswitch t.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tx.line(\"r.EncodeInt(0)\")\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tx.line(\"r.EncodeUint(0)\")\n\tcase reflect.Float32:\n\t\tx.line(\"r.EncodeFloat32(0)\")\n\tcase reflect.Float64:\n\t\tx.line(\"r.EncodeFloat64(0)\")\n\tcase reflect.Bool:\n\t\tx.line(\"r.EncodeBool(false)\")\n\tcase reflect.String:\n\t\tx.line(\"r.EncodeString(codecSelferC_UTF8\" + x.xs + `, \"\")`)\n\tdefault:\n\t\tx.line(\"r.EncodeNil()\")\n\t}\n}\n\nfunc (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {\n\t// Use knowledge from structfieldinfo (mbs, encodable fields. Ignore omitempty. )\n\t// replicate code in kStruct i.e. for each field, deref type to non-pointer, and call x.enc on it\n\n\t// if t === type currently running selfer on, do for all\n\tti := x.ti.get(rtid, t)\n\ti := x.varsfx()\n\tsepVarname := genTempVarPfx + \"sep\" + i\n\tnumfieldsvar := genTempVarPfx + \"q\" + i\n\tti2arrayvar := genTempVarPfx + \"r\" + i\n\tstruct2arrvar := genTempVarPfx + \"2arr\" + i\n\n\tx.line(sepVarname + \" := !z.EncBinary()\")\n\tx.linef(\"%s := z.EncBasicHandle().StructToArray\", struct2arrvar)\n\ttisfi := ti.sfip // always use sequence from file. decStruct expects same thing.\n\t// due to omitEmpty, we need to calculate the\n\t// number of non-empty things we write out first.\n\t// This is required as we need to pre-determine the size of the container,\n\t// to support length-prefixing.\n\tx.linef(\"var %s [%v]bool\", numfieldsvar, len(tisfi))\n\tx.linef(\"_, _, _ = %s, %s, %s\", sepVarname, numfieldsvar, struct2arrvar)\n\tx.linef(\"const %s bool = %v\", ti2arrayvar, ti.toArray)\n\tnn := 0\n\tfor j, si := range tisfi {\n\t\tif !si.omitEmpty {\n\t\t\tnn++\n\t\t\tcontinue\n\t\t}\n\t\tvar t2 reflect.StructField\n\t\tvar omitline string\n\t\tif si.i != -1 {\n\t\t\tt2 = t.Field(int(si.i))\n\t\t} else {\n\t\t\tt2typ := t\n\t\t\tvarname3 := varname\n\t\t\tfor _, ix := range si.is {\n\t\t\t\tfor t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tt2typ = t2typ.Elem()\n\t\t\t\t}\n\t\t\t\tt2 = t2typ.Field(ix)\n\t\t\t\tt2typ = t2.Type\n\t\t\t\tvarname3 = varname3 + \".\" + t2.Name\n\t\t\t\tif t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tomitline += varname3 + \" != nil && \"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// never check omitEmpty on a struct type, as it may contain uncomparable map/slice/etc.\n\t\t// also, for maps/slices/arrays, check if len ! 0 (not if == zero value)\n\t\tswitch t2.Type.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tomitline += \" true\"\n\t\tcase reflect.Map, reflect.Slice, reflect.Array, reflect.Chan:\n\t\t\tomitline += \"len(\" + varname + \".\" + t2.Name + \") != 0\"\n\t\tdefault:\n\t\t\tomitline += varname + \".\" + t2.Name + \" != \" + x.genZeroValueR(t2.Type)\n\t\t}\n\t\tx.linef(\"%s[%v] = %s\", numfieldsvar, j, omitline)\n\t}\n\tx.linef(\"var %snn%s int\", genTempVarPfx, i)\n\tx.linef(\"if %s || %s {\", ti2arrayvar, struct2arrvar) // if ti.toArray {\n\tx.line(\"r.EncodeArrayStart(\" + strconv.FormatInt(int64(len(tisfi)), 10) + \")\")\n\tx.linef(\"} else {\") // if not ti.toArray\n\tx.linef(\"%snn%s = %v\", genTempVarPfx, i, nn)\n\tx.linef(\"for _, b := range %s { if b { %snn%s++ } }\", numfieldsvar, genTempVarPfx, i)\n\tx.linef(\"r.EncodeMapStart(%snn%s)\", genTempVarPfx, i)\n\tx.linef(\"%snn%s = %v\", genTempVarPfx, i, 0)\n\t// x.line(\"r.EncodeMapStart(\" + strconv.FormatInt(int64(len(tisfi)), 10) + \")\")\n\tx.line(\"}\") // close if not StructToArray\n\n\tfor j, si := range tisfi {\n\t\ti := x.varsfx()\n\t\tisNilVarName := genTempVarPfx + \"n\" + i\n\t\tvar labelUsed bool\n\t\tvar t2 reflect.StructField\n\t\tif si.i != -1 {\n\t\t\tt2 = t.Field(int(si.i))\n\t\t} else {\n\t\t\tt2typ := t\n\t\t\tvarname3 := varname\n\t\t\tfor _, ix := range si.is {\n\t\t\t\t// fmt.Printf(\"%%%% %v, ix: %v\\n\", t2typ, ix)\n\t\t\t\tfor t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tt2typ = t2typ.Elem()\n\t\t\t\t}\n\t\t\t\tt2 = t2typ.Field(ix)\n\t\t\t\tt2typ = t2.Type\n\t\t\t\tvarname3 = varname3 + \".\" + t2.Name\n\t\t\t\tif t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tif !labelUsed {\n\t\t\t\t\t\tx.line(\"var \" + isNilVarName + \" bool\")\n\t\t\t\t\t}\n\t\t\t\t\tx.line(\"if \" + varname3 + \" == nil { \" + isNilVarName + \" = true \")\n\t\t\t\t\tx.line(\"goto LABEL\" + i)\n\t\t\t\t\tx.line(\"}\")\n\t\t\t\t\tlabelUsed = true\n\t\t\t\t\t// \"varname3 = new(\" + x.genTypeName(t3.Elem()) + \") }\")\n\t\t\t\t}\n\t\t\t}\n\t\t\t// t2 = t.FieldByIndex(si.is)\n\t\t}\n\t\tif labelUsed {\n\t\t\tx.line(\"LABEL\" + i + \":\")\n\t\t}\n\t\t// if the type of the field is a Selfer, or one of the ones\n\n\t\tx.linef(\"if %s || %s {\", ti2arrayvar, struct2arrvar) // if ti.toArray\n\t\tif labelUsed {\n\t\t\tx.line(\"if \" + isNilVarName + \" { r.EncodeNil() } else { \")\n\t\t}\n\t\tx.linef(\"z.EncSendContainerState(codecSelfer_containerArrayElem%s)\", x.xs)\n\t\tif si.omitEmpty {\n\t\t\tx.linef(\"if %s[%v] {\", numfieldsvar, j)\n\t\t}\n\t\tx.encVar(varname+\".\"+t2.Name, t2.Type)\n\t\tif si.omitEmpty {\n\t\t\tx.linef(\"} else {\")\n\t\t\tx.encZero(t2.Type)\n\t\t\tx.linef(\"}\")\n\t\t}\n\t\tif labelUsed {\n\t\t\tx.line(\"}\")\n\t\t}\n\n\t\tx.linef(\"} else {\") // if not ti.toArray\n\n\t\tif si.omitEmpty {\n\t\t\tx.linef(\"if %s[%v] {\", numfieldsvar, j)\n\t\t}\n\t\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapKey%s)\", x.xs)\n\t\tx.line(\"r.EncodeString(codecSelferC_UTF8\" + x.xs + \", string(\\\"\" + si.encName + \"\\\"))\")\n\t\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapValue%s)\", x.xs)\n\t\tif labelUsed {\n\t\t\tx.line(\"if \" + isNilVarName + \" { r.EncodeNil() } else { \")\n\t\t\tx.encVar(varname+\".\"+t2.Name, t2.Type)\n\t\t\tx.line(\"}\")\n\t\t} else {\n\t\t\tx.encVar(varname+\".\"+t2.Name, t2.Type)\n\t\t}\n\t\tif si.omitEmpty {\n\t\t\tx.line(\"}\")\n\t\t}\n\t\tx.linef(\"} \") // end if/else ti.toArray\n\t}\n\tx.linef(\"if %s || %s {\", ti2arrayvar, struct2arrvar) // if ti.toArray {\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerArrayEnd%s)\", x.xs)\n\tx.line(\"} else {\")\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapEnd%s)\", x.xs)\n\tx.line(\"}\")\n\n}\n\nfunc (x *genRunner) encListFallback(varname string, t reflect.Type) {\n\tif t.AssignableTo(uint8SliceTyp) {\n\t\tx.linef(\"r.EncodeStringBytes(codecSelferC_RAW%s, []byte(%s))\", x.xs, varname)\n\t\treturn\n\t}\n\tif t.Kind() == reflect.Array && t.Elem().Kind() == reflect.Uint8 {\n\t\tx.linef(\"r.EncodeStringBytes(codecSelferC_RAW%s, ([%v]byte(%s))[:])\", x.xs, t.Len(), varname)\n\t\treturn\n\t}\n\ti := x.varsfx()\n\tg := genTempVarPfx\n\tx.line(\"r.EncodeArrayStart(len(\" + varname + \"))\")\n\tif t.Kind() == reflect.Chan {\n\t\tx.linef(\"for %si%s, %si2%s := 0, len(%s); %si%s < %si2%s; %si%s++ {\", g, i, g, i, varname, g, i, g, i, g, i)\n\t\tx.linef(\"z.EncSendContainerState(codecSelfer_containerArrayElem%s)\", x.xs)\n\t\tx.linef(\"%sv%s := <-%s\", g, i, varname)\n\t} else {\n\t\t// x.linef(\"for %si%s, %sv%s := range %s {\", genTempVarPfx, i, genTempVarPfx, i, varname)\n\t\tx.linef(\"for _, %sv%s := range %s {\", genTempVarPfx, i, varname)\n\t\tx.linef(\"z.EncSendContainerState(codecSelfer_containerArrayElem%s)\", x.xs)\n\t}\n\tx.encVar(genTempVarPfx+\"v\"+i, t.Elem())\n\tx.line(\"}\")\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerArrayEnd%s)\", x.xs)\n}\n\nfunc (x *genRunner) encMapFallback(varname string, t reflect.Type) {\n\t// TODO: expand this to handle canonical.\n\ti := x.varsfx()\n\tx.line(\"r.EncodeMapStart(len(\" + varname + \"))\")\n\tx.linef(\"for %sk%s, %sv%s := range %s {\", genTempVarPfx, i, genTempVarPfx, i, varname)\n\t// x.line(\"for \" + genTempVarPfx + \"k\" + i + \", \" + genTempVarPfx + \"v\" + i + \" := range \" + varname + \" {\")\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapKey%s)\", x.xs)\n\tx.encVar(genTempVarPfx+\"k\"+i, t.Key())\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapValue%s)\", x.xs)\n\tx.encVar(genTempVarPfx+\"v\"+i, t.Elem())\n\tx.line(\"}\")\n\tx.linef(\"z.EncSendContainerState(codecSelfer_containerMapEnd%s)\", x.xs)\n}\n\nfunc (x *genRunner) decVar(varname string, t reflect.Type, canBeNil bool) {\n\t// We only encode as nil if a nillable value.\n\t// This removes some of the wasted checks for TryDecodeAsNil.\n\t// We need to think about this more, to see what happens if omitempty, etc\n\t// cause a nil value to be stored when something is expected.\n\t// This could happen when decoding from a struct encoded as an array.\n\t// For that, decVar should be called with canNil=true, to force true as its value.\n\ti := x.varsfx()\n\tif !canBeNil {\n\t\tcanBeNil = genAnythingCanBeNil || !genIsImmutable(t)\n\t}\n\tif canBeNil {\n\t\tx.line(\"if r.TryDecodeAsNil() {\")\n\t\tif t.Kind() == reflect.Ptr {\n\t\t\tx.line(\"if \" + varname + \" != nil { \")\n\n\t\t\t// if varname is a field of a struct (has a dot in it),\n\t\t\t// then just set it to nil\n\t\t\tif strings.IndexByte(varname, '.') != -1 {\n\t\t\t\tx.line(varname + \" = nil\")\n\t\t\t} else {\n\t\t\t\tx.line(\"*\" + varname + \" = \" + x.genZeroValueR(t.Elem()))\n\t\t\t}\n\t\t\tx.line(\"}\")\n\t\t} else {\n\t\t\tx.line(varname + \" = \" + x.genZeroValueR(t))\n\t\t}\n\t\tx.line(\"} else {\")\n\t} else {\n\t\tx.line(\"// cannot be nil\")\n\t}\n\tif t.Kind() != reflect.Ptr {\n\t\tif x.decTryAssignPrimitive(varname, t) {\n\t\t\tx.line(genTempVarPfx + \"v\" + i + \" := &\" + varname)\n\t\t\tx.dec(genTempVarPfx+\"v\"+i, t)\n\t\t}\n\t} else {\n\t\tx.linef(\"if %s == nil { %s = new(%s) }\", varname, varname, x.genTypeName(t.Elem()))\n\t\t// Ensure we set underlying ptr to a non-nil value (so we can deref to it later).\n\t\t// There's a chance of a **T in here which is nil.\n\t\tvar ptrPfx string\n\t\tfor t = t.Elem(); t.Kind() == reflect.Ptr; t = t.Elem() {\n\t\t\tptrPfx += \"*\"\n\t\t\tx.linef(\"if %s%s == nil { %s%s = new(%s)}\",\n\t\t\t\tptrPfx, varname, ptrPfx, varname, x.genTypeName(t))\n\t\t}\n\t\t// if varname has [ in it, then create temp variable for this ptr thingie\n\t\tif strings.Index(varname, \"[\") >= 0 {\n\t\t\tvarname2 := genTempVarPfx + \"w\" + i\n\t\t\tx.line(varname2 + \" := \" + varname)\n\t\t\tvarname = varname2\n\t\t}\n\n\t\tif ptrPfx == \"\" {\n\t\t\tx.dec(varname, t)\n\t\t} else {\n\t\t\tx.line(genTempVarPfx + \"z\" + i + \" := \" + ptrPfx + varname)\n\t\t\tx.dec(genTempVarPfx+\"z\"+i, t)\n\t\t}\n\n\t}\n\n\tif canBeNil {\n\t\tx.line(\"} \")\n\t}\n}\n\n// dec will decode a variable (varname) of type ptrTo(t).\n// t is always a basetype (i.e. not of kind reflect.Ptr).\nfunc (x *genRunner) dec(varname string, t reflect.Type) {\n\t// assumptions:\n\t//   - the varname is to a pointer already. No need to take address of it\n\t//   - t is always a baseType T (not a *T, etc).\n\trtid := reflect.ValueOf(t).Pointer()\n\ttptr := reflect.PtrTo(t)\n\tif x.checkForSelfer(t, varname) {\n\t\tif t.Implements(selferTyp) || tptr.Implements(selferTyp) {\n\t\t\tx.line(varname + \".CodecDecodeSelf(d)\")\n\t\t\treturn\n\t\t}\n\t\tif _, ok := x.td[rtid]; ok {\n\t\t\tx.line(varname + \".CodecDecodeSelf(d)\")\n\t\t\treturn\n\t\t}\n\t}\n\n\tinlist := false\n\tfor _, t0 := range x.t {\n\t\tif t == t0 {\n\t\t\tinlist = true\n\t\t\tif x.checkForSelfer(t, varname) {\n\t\t\t\tx.line(varname + \".CodecDecodeSelf(d)\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tvar rtidAdded bool\n\tif t == x.tc {\n\t\tx.td[rtid] = true\n\t\trtidAdded = true\n\t}\n\n\t// check if\n\t//   - type is Raw, RawExt\n\t//   - the type implements (Text|JSON|Binary)(Unm|M)arshal\n\tmi := x.varsfx()\n\tx.linef(\"%sm%s := z.DecBinary()\", genTempVarPfx, mi)\n\tx.linef(\"_ = %sm%s\", genTempVarPfx, mi)\n\tx.line(\"if false {\")           //start if block\n\tdefer func() { x.line(\"}\") }() //end if block\n\n\tif t == rawTyp {\n\t\tx.linef(\"} else { *%v = z.DecRaw()\", varname)\n\t\treturn\n\t}\n\tif t == rawExtTyp {\n\t\tx.linef(\"} else { r.DecodeExt(%v, 0, nil)\", varname)\n\t\treturn\n\t}\n\n\t// HACK: Support for Builtins.\n\t//       Currently, only Binc supports builtins, and the only builtin type is time.Time.\n\t//       Have a method that returns the rtid for time.Time if Handle is Binc.\n\tif t == timeTyp {\n\t\tvrtid := genTempVarPfx + \"m\" + x.varsfx()\n\t\tx.linef(\"} else if %s := z.TimeRtidIfBinc(); %s != 0 { \", vrtid, vrtid)\n\t\tx.linef(\"r.DecodeBuiltin(%s, %s)\", vrtid, varname)\n\t}\n\t// only check for extensions if the type is named, and has a packagePath.\n\tif genImportPath(t) != \"\" && t.Name() != \"\" {\n\t\t// first check if extensions are configued, before doing the interface conversion\n\t\tx.linef(\"} else if z.HasExtensions() && z.DecExt(%s) {\", varname)\n\t}\n\n\tif t.Implements(binaryUnmarshalerTyp) || tptr.Implements(binaryUnmarshalerTyp) {\n\t\tx.linef(\"} else if %sm%s { z.DecBinaryUnmarshal(%v) \", genTempVarPfx, mi, varname)\n\t}\n\tif t.Implements(jsonUnmarshalerTyp) || tptr.Implements(jsonUnmarshalerTyp) {\n\t\tx.linef(\"} else if !%sm%s && z.IsJSONHandle() { z.DecJSONUnmarshal(%v)\", genTempVarPfx, mi, varname)\n\t} else if t.Implements(textUnmarshalerTyp) || tptr.Implements(textUnmarshalerTyp) {\n\t\tx.linef(\"} else if !%sm%s { z.DecTextUnmarshal(%v)\", genTempVarPfx, mi, varname)\n\t}\n\n\tx.line(\"} else {\")\n\n\t// Since these are pointers, we cannot share, and have to use them one by one\n\tswitch t.Kind() {\n\tcase reflect.Int:\n\t\tx.line(\"*((*int)(\" + varname + \")) = int(r.DecodeInt(codecSelferBitsize\" + x.xs + \"))\")\n\t\t// x.line(\"z.DecInt((*int)(\" + varname + \"))\")\n\tcase reflect.Int8:\n\t\tx.line(\"*((*int8)(\" + varname + \")) = int8(r.DecodeInt(8))\")\n\t\t// x.line(\"z.DecInt8((*int8)(\" + varname + \"))\")\n\tcase reflect.Int16:\n\t\tx.line(\"*((*int16)(\" + varname + \")) = int16(r.DecodeInt(16))\")\n\t\t// x.line(\"z.DecInt16((*int16)(\" + varname + \"))\")\n\tcase reflect.Int32:\n\t\tx.line(\"*((*int32)(\" + varname + \")) = int32(r.DecodeInt(32))\")\n\t\t// x.line(\"z.DecInt32((*int32)(\" + varname + \"))\")\n\tcase reflect.Int64:\n\t\tx.line(\"*((*int64)(\" + varname + \")) = int64(r.DecodeInt(64))\")\n\t\t// x.line(\"z.DecInt64((*int64)(\" + varname + \"))\")\n\n\tcase reflect.Uint:\n\t\tx.line(\"*((*uint)(\" + varname + \")) = uint(r.DecodeUint(codecSelferBitsize\" + x.xs + \"))\")\n\t\t// x.line(\"z.DecUint((*uint)(\" + varname + \"))\")\n\tcase reflect.Uint8:\n\t\tx.line(\"*((*uint8)(\" + varname + \")) = uint8(r.DecodeUint(8))\")\n\t\t// x.line(\"z.DecUint8((*uint8)(\" + varname + \"))\")\n\tcase reflect.Uint16:\n\t\tx.line(\"*((*uint16)(\" + varname + \")) = uint16(r.DecodeUint(16))\")\n\t\t//x.line(\"z.DecUint16((*uint16)(\" + varname + \"))\")\n\tcase reflect.Uint32:\n\t\tx.line(\"*((*uint32)(\" + varname + \")) = uint32(r.DecodeUint(32))\")\n\t\t//x.line(\"z.DecUint32((*uint32)(\" + varname + \"))\")\n\tcase reflect.Uint64:\n\t\tx.line(\"*((*uint64)(\" + varname + \")) = uint64(r.DecodeUint(64))\")\n\t\t//x.line(\"z.DecUint64((*uint64)(\" + varname + \"))\")\n\tcase reflect.Uintptr:\n\t\tx.line(\"*((*uintptr)(\" + varname + \")) = uintptr(r.DecodeUint(codecSelferBitsize\" + x.xs + \"))\")\n\n\tcase reflect.Float32:\n\t\tx.line(\"*((*float32)(\" + varname + \")) = float32(r.DecodeFloat(true))\")\n\t\t//x.line(\"z.DecFloat32((*float32)(\" + varname + \"))\")\n\tcase reflect.Float64:\n\t\tx.line(\"*((*float64)(\" + varname + \")) = float64(r.DecodeFloat(false))\")\n\t\t// x.line(\"z.DecFloat64((*float64)(\" + varname + \"))\")\n\n\tcase reflect.Bool:\n\t\tx.line(\"*((*bool)(\" + varname + \")) = r.DecodeBool()\")\n\t\t// x.line(\"z.DecBool((*bool)(\" + varname + \"))\")\n\tcase reflect.String:\n\t\tx.line(\"*((*string)(\" + varname + \")) = r.DecodeString()\")\n\t\t// x.line(\"z.DecString((*string)(\" + varname + \"))\")\n\tcase reflect.Array, reflect.Chan:\n\t\tx.xtraSM(varname, false, t)\n\t\t// x.decListFallback(varname, rtid, true, t)\n\tcase reflect.Slice:\n\t\t// if a []uint8, call dedicated function\n\t\t// if a known fastpath slice, call dedicated function\n\t\t// else write encode function in-line.\n\t\t// - if elements are primitives or Selfers, call dedicated function on each member.\n\t\t// - else call Encoder.encode(XXX) on it.\n\t\tif rtid == uint8SliceTypId {\n\t\t\tx.line(\"*\" + varname + \" = r.DecodeBytes(*(*[]byte)(\" + varname + \"), false, false)\")\n\t\t} else if fastpathAV.index(rtid) != -1 {\n\t\t\tg := x.newGenV(t)\n\t\t\tx.line(\"z.F.\" + g.MethodNamePfx(\"Dec\", false) + \"X(\" + varname + \", false, d)\")\n\t\t} else {\n\t\t\tx.xtraSM(varname, false, t)\n\t\t\t// x.decListFallback(varname, rtid, false, t)\n\t\t}\n\tcase reflect.Map:\n\t\t// if a known fastpath map, call dedicated function\n\t\t// else write encode function in-line.\n\t\t// - if elements are primitives or Selfers, call dedicated function on each member.\n\t\t// - else call Encoder.encode(XXX) on it.\n\t\tif fastpathAV.index(rtid) != -1 {\n\t\t\tg := x.newGenV(t)\n\t\t\tx.line(\"z.F.\" + g.MethodNamePfx(\"Dec\", false) + \"X(\" + varname + \", false, d)\")\n\t\t} else {\n\t\t\tx.xtraSM(varname, false, t)\n\t\t\t// x.decMapFallback(varname, rtid, t)\n\t\t}\n\tcase reflect.Struct:\n\t\tif inlist {\n\t\t\tx.decStruct(varname, rtid, t)\n\t\t} else {\n\t\t\t// delete(x.td, rtid)\n\t\t\tx.line(\"z.DecFallback(\" + varname + \", false)\")\n\t\t}\n\tdefault:\n\t\tif rtidAdded {\n\t\t\tdelete(x.te, rtid)\n\t\t}\n\t\tx.line(\"z.DecFallback(\" + varname + \", true)\")\n\t}\n}\n\nfunc (x *genRunner) decTryAssignPrimitive(varname string, t reflect.Type) (tryAsPtr bool) {\n\t// This should only be used for exact primitives (ie un-named types).\n\t// Named types may be implementations of Selfer, Unmarshaler, etc.\n\t// They should be handled by dec(...)\n\n\tif t.Name() != \"\" {\n\t\ttryAsPtr = true\n\t\treturn\n\t}\n\n\tswitch t.Kind() {\n\tcase reflect.Int:\n\t\tx.linef(\"%s = r.DecodeInt(codecSelferBitsize%s)\", varname, x.xs)\n\tcase reflect.Int8:\n\t\tx.linef(\"%s = r.DecodeInt(8)\", varname)\n\tcase reflect.Int16:\n\t\tx.linef(\"%s = r.DecodeInt(16)\", varname)\n\tcase reflect.Int32:\n\t\tx.linef(\"%s = r.DecodeInt(32)\", varname)\n\tcase reflect.Int64:\n\t\tx.linef(\"%s = r.DecodeInt(64)\", varname)\n\n\tcase reflect.Uint:\n\t\tx.linef(\"%s = r.DecodeUint(codecSelferBitsize%s)\", varname, x.xs)\n\tcase reflect.Uint8:\n\t\tx.linef(\"%s = r.DecodeUint(8)\", varname)\n\tcase reflect.Uint16:\n\t\tx.linef(\"%s = r.DecodeUint(16)\", varname)\n\tcase reflect.Uint32:\n\t\tx.linef(\"%s = r.DecodeUint(32)\", varname)\n\tcase reflect.Uint64:\n\t\tx.linef(\"%s = r.DecodeUint(64)\", varname)\n\tcase reflect.Uintptr:\n\t\tx.linef(\"%s = r.DecodeUint(codecSelferBitsize%s)\", varname, x.xs)\n\n\tcase reflect.Float32:\n\t\tx.linef(\"%s = r.DecodeFloat(true)\", varname)\n\tcase reflect.Float64:\n\t\tx.linef(\"%s = r.DecodeFloat(false)\", varname)\n\n\tcase reflect.Bool:\n\t\tx.linef(\"%s = r.DecodeBool()\", varname)\n\tcase reflect.String:\n\t\tx.linef(\"%s = r.DecodeString()\", varname)\n\tdefault:\n\t\ttryAsPtr = true\n\t}\n\treturn\n}\n\nfunc (x *genRunner) decListFallback(varname string, rtid uintptr, t reflect.Type) {\n\tif t.AssignableTo(uint8SliceTyp) {\n\t\tx.line(\"*\" + varname + \" = r.DecodeBytes(*((*[]byte)(\" + varname + \")), false, false)\")\n\t\treturn\n\t}\n\tif t.Kind() == reflect.Array && t.Elem().Kind() == reflect.Uint8 {\n\t\tx.linef(\"r.DecodeBytes( ((*[%s]byte)(%s))[:], false, true)\", t.Len(), varname)\n\t\treturn\n\t}\n\ttype tstruc struct {\n\t\tTempVar   string\n\t\tRand      string\n\t\tVarname   string\n\t\tCTyp      string\n\t\tTyp       string\n\t\tImmutable bool\n\t\tSize      int\n\t}\n\ttelem := t.Elem()\n\tts := tstruc{genTempVarPfx, x.varsfx(), varname, x.genTypeName(t), x.genTypeName(telem), genIsImmutable(telem), int(telem.Size())}\n\n\tfuncs := make(template.FuncMap)\n\n\tfuncs[\"decLineVar\"] = func(varname string) string {\n\t\tx.decVar(varname, telem, false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"decLine\"] = func(pfx string) string {\n\t\tx.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"var\"] = func(s string) string {\n\t\treturn ts.TempVar + s + ts.Rand\n\t}\n\tfuncs[\"zero\"] = func() string {\n\t\treturn x.genZeroValueR(telem)\n\t}\n\tfuncs[\"isArray\"] = func() bool {\n\t\treturn t.Kind() == reflect.Array\n\t}\n\tfuncs[\"isSlice\"] = func() bool {\n\t\treturn t.Kind() == reflect.Slice\n\t}\n\tfuncs[\"isChan\"] = func() bool {\n\t\treturn t.Kind() == reflect.Chan\n\t}\n\ttm, err := template.New(\"\").Funcs(funcs).Parse(genDecListTmpl)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif err = tm.Execute(x.w, &ts); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (x *genRunner) decMapFallback(varname string, rtid uintptr, t reflect.Type) {\n\ttype tstruc struct {\n\t\tTempVar string\n\t\tSfx     string\n\t\tRand    string\n\t\tVarname string\n\t\tKTyp    string\n\t\tTyp     string\n\t\tSize    int\n\t}\n\ttelem := t.Elem()\n\ttkey := t.Key()\n\tts := tstruc{\n\t\tgenTempVarPfx, x.xs, x.varsfx(), varname, x.genTypeName(tkey),\n\t\tx.genTypeName(telem), int(telem.Size() + tkey.Size()),\n\t}\n\n\tfuncs := make(template.FuncMap)\n\tfuncs[\"decElemZero\"] = func() string {\n\t\treturn x.genZeroValueR(telem)\n\t}\n\tfuncs[\"decElemKindImmutable\"] = func() bool {\n\t\treturn genIsImmutable(telem)\n\t}\n\tfuncs[\"decElemKindPtr\"] = func() bool {\n\t\treturn telem.Kind() == reflect.Ptr\n\t}\n\tfuncs[\"decElemKindIntf\"] = func() bool {\n\t\treturn telem.Kind() == reflect.Interface\n\t}\n\tfuncs[\"decLineVarK\"] = func(varname string) string {\n\t\tx.decVar(varname, tkey, false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"decLineVar\"] = func(varname string) string {\n\t\tx.decVar(varname, telem, false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"decLineK\"] = func(pfx string) string {\n\t\tx.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(tkey), false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"decLine\"] = func(pfx string) string {\n\t\tx.decVar(ts.TempVar+pfx+ts.Rand, reflect.PtrTo(telem), false)\n\t\treturn \"\"\n\t}\n\tfuncs[\"var\"] = func(s string) string {\n\t\treturn ts.TempVar + s + ts.Rand\n\t}\n\n\ttm, err := template.New(\"\").Funcs(funcs).Parse(genDecMapTmpl)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif err = tm.Execute(x.w, &ts); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (x *genRunner) decStructMapSwitch(kName string, varname string, rtid uintptr, t reflect.Type) {\n\tti := x.ti.get(rtid, t)\n\ttisfi := ti.sfip // always use sequence from file. decStruct expects same thing.\n\tx.line(\"switch (\" + kName + \") {\")\n\tfor _, si := range tisfi {\n\t\tx.line(\"case \\\"\" + si.encName + \"\\\":\")\n\t\tvar t2 reflect.StructField\n\t\tif si.i != -1 {\n\t\t\tt2 = t.Field(int(si.i))\n\t\t} else {\n\t\t\t//we must accommodate anonymous fields, where the embedded field is a nil pointer in the value.\n\t\t\t// t2 = t.FieldByIndex(si.is)\n\t\t\tt2typ := t\n\t\t\tvarname3 := varname\n\t\t\tfor _, ix := range si.is {\n\t\t\t\tfor t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tt2typ = t2typ.Elem()\n\t\t\t\t}\n\t\t\t\tt2 = t2typ.Field(ix)\n\t\t\t\tt2typ = t2.Type\n\t\t\t\tvarname3 = varname3 + \".\" + t2.Name\n\t\t\t\tif t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tx.linef(\"if %s == nil { %s = new(%s) }\", varname3, varname3, x.genTypeName(t2typ.Elem()))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tx.decVar(varname+\".\"+t2.Name, t2.Type, false)\n\t}\n\tx.line(\"default:\")\n\t// pass the slice here, so that the string will not escape, and maybe save allocation\n\tx.line(\"z.DecStructFieldNotFound(-1, \" + kName + \")\")\n\tx.line(\"} // end switch \" + kName)\n}\n\nfunc (x *genRunner) decStructMap(varname, lenvarname string, rtid uintptr, t reflect.Type, style genStructMapStyle) {\n\ttpfx := genTempVarPfx\n\ti := x.varsfx()\n\tkName := tpfx + \"s\" + i\n\n\t// We thought to use ReadStringAsBytes, as go compiler might optimize the copy out.\n\t// However, using that was more expensive, as it seems that the switch expression\n\t// is evaluated each time.\n\t//\n\t// We could depend on decodeString using a temporary/shared buffer internally.\n\t// However, this model of creating a byte array, and using explicitly is faster,\n\t// and allows optional use of unsafe []byte->string conversion without alloc.\n\n\t// Also, ensure that the slice array doesn't escape.\n\t// That will help escape analysis prevent allocation when it gets better.\n\n\t// x.line(\"var \" + kName + \"Arr = [32]byte{} // default string to decode into\")\n\t// x.line(\"var \" + kName + \"Slc = \" + kName + \"Arr[:] // default slice to decode into\")\n\t// use the scratch buffer to avoid allocation (most field names are < 32).\n\n\tx.line(\"var \" + kName + \"Slc = z.DecScratchBuffer() // default slice to decode into\")\n\n\tx.line(\"_ = \" + kName + \"Slc\")\n\tswitch style {\n\tcase genStructMapStyleLenPrefix:\n\t\tx.linef(\"for %sj%s := 0; %sj%s < %s; %sj%s++ {\", tpfx, i, tpfx, i, lenvarname, tpfx, i)\n\tcase genStructMapStyleCheckBreak:\n\t\tx.linef(\"for %sj%s := 0; !r.CheckBreak(); %sj%s++ {\", tpfx, i, tpfx, i)\n\tdefault: // 0, otherwise.\n\t\tx.linef(\"var %shl%s bool = %s >= 0\", tpfx, i, lenvarname) // has length\n\t\tx.linef(\"for %sj%s := 0; ; %sj%s++ {\", tpfx, i, tpfx, i)\n\t\tx.linef(\"if %shl%s { if %sj%s >= %s { break }\", tpfx, i, tpfx, i, lenvarname)\n\t\tx.line(\"} else { if r.CheckBreak() { break }; }\")\n\t}\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerMapKey%s)\", x.xs)\n\tx.line(kName + \"Slc = r.DecodeBytes(\" + kName + \"Slc, true, true)\")\n\t// let string be scoped to this loop alone, so it doesn't escape.\n\tif x.unsafe {\n\t\tx.line(kName + \"SlcHdr := codecSelferUnsafeString\" + x.xs + \"{uintptr(unsafe.Pointer(&\" +\n\t\t\tkName + \"Slc[0])), len(\" + kName + \"Slc)}\")\n\t\tx.line(kName + \" := *(*string)(unsafe.Pointer(&\" + kName + \"SlcHdr))\")\n\t} else {\n\t\tx.line(kName + \" := string(\" + kName + \"Slc)\")\n\t}\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerMapValue%s)\", x.xs)\n\tx.decStructMapSwitch(kName, varname, rtid, t)\n\n\tx.line(\"} // end for \" + tpfx + \"j\" + i)\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerMapEnd%s)\", x.xs)\n}\n\nfunc (x *genRunner) decStructArray(varname, lenvarname, breakString string, rtid uintptr, t reflect.Type) {\n\ttpfx := genTempVarPfx\n\ti := x.varsfx()\n\tti := x.ti.get(rtid, t)\n\ttisfi := ti.sfip // always use sequence from file. decStruct expects same thing.\n\tx.linef(\"var %sj%s int\", tpfx, i)\n\tx.linef(\"var %sb%s bool\", tpfx, i)                        // break\n\tx.linef(\"var %shl%s bool = %s >= 0\", tpfx, i, lenvarname) // has length\n\tfor _, si := range tisfi {\n\t\tvar t2 reflect.StructField\n\t\tif si.i != -1 {\n\t\t\tt2 = t.Field(int(si.i))\n\t\t} else {\n\t\t\t//we must accommodate anonymous fields, where the embedded field is a nil pointer in the value.\n\t\t\t// t2 = t.FieldByIndex(si.is)\n\t\t\tt2typ := t\n\t\t\tvarname3 := varname\n\t\t\tfor _, ix := range si.is {\n\t\t\t\tfor t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tt2typ = t2typ.Elem()\n\t\t\t\t}\n\t\t\t\tt2 = t2typ.Field(ix)\n\t\t\t\tt2typ = t2.Type\n\t\t\t\tvarname3 = varname3 + \".\" + t2.Name\n\t\t\t\tif t2typ.Kind() == reflect.Ptr {\n\t\t\t\t\tx.linef(\"if %s == nil { %s = new(%s) }\", varname3, varname3, x.genTypeName(t2typ.Elem()))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tx.linef(\"%sj%s++; if %shl%s { %sb%s = %sj%s > %s } else { %sb%s = r.CheckBreak() }\",\n\t\t\ttpfx, i, tpfx, i, tpfx, i,\n\t\t\ttpfx, i, lenvarname, tpfx, i)\n\t\tx.linef(\"if %sb%s { z.DecSendContainerState(codecSelfer_containerArrayEnd%s); %s }\",\n\t\t\ttpfx, i, x.xs, breakString)\n\t\tx.linef(\"z.DecSendContainerState(codecSelfer_containerArrayElem%s)\", x.xs)\n\t\tx.decVar(varname+\".\"+t2.Name, t2.Type, true)\n\t}\n\t// read remaining values and throw away.\n\tx.line(\"for {\")\n\tx.linef(\"%sj%s++; if %shl%s { %sb%s = %sj%s > %s } else { %sb%s = r.CheckBreak() }\",\n\t\ttpfx, i, tpfx, i, tpfx, i,\n\t\ttpfx, i, lenvarname, tpfx, i)\n\tx.linef(\"if %sb%s { break }\", tpfx, i)\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerArrayElem%s)\", x.xs)\n\tx.linef(`z.DecStructFieldNotFound(%sj%s - 1, \"\")`, tpfx, i)\n\tx.line(\"}\")\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerArrayEnd%s)\", x.xs)\n}\n\nfunc (x *genRunner) decStruct(varname string, rtid uintptr, t reflect.Type) {\n\t// if container is map\n\ti := x.varsfx()\n\tx.linef(\"%sct%s := r.ContainerType()\", genTempVarPfx, i)\n\tx.linef(\"if %sct%s == codecSelferValueTypeMap%s {\", genTempVarPfx, i, x.xs)\n\tx.line(genTempVarPfx + \"l\" + i + \" := r.ReadMapStart()\")\n\tx.linef(\"if %sl%s == 0 {\", genTempVarPfx, i)\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerMapEnd%s)\", x.xs)\n\tif genUseOneFunctionForDecStructMap {\n\t\tx.line(\"} else { \")\n\t\tx.linef(\"x.codecDecodeSelfFromMap(%sl%s, d)\", genTempVarPfx, i)\n\t} else {\n\t\tx.line(\"} else if \" + genTempVarPfx + \"l\" + i + \" > 0 { \")\n\t\tx.line(\"x.codecDecodeSelfFromMapLenPrefix(\" + genTempVarPfx + \"l\" + i + \", d)\")\n\t\tx.line(\"} else {\")\n\t\tx.line(\"x.codecDecodeSelfFromMapCheckBreak(\" + genTempVarPfx + \"l\" + i + \", d)\")\n\t}\n\tx.line(\"}\")\n\n\t// else if container is array\n\tx.linef(\"} else if %sct%s == codecSelferValueTypeArray%s {\", genTempVarPfx, i, x.xs)\n\tx.line(genTempVarPfx + \"l\" + i + \" := r.ReadArrayStart()\")\n\tx.linef(\"if %sl%s == 0 {\", genTempVarPfx, i)\n\tx.linef(\"z.DecSendContainerState(codecSelfer_containerArrayEnd%s)\", x.xs)\n\tx.line(\"} else { \")\n\tx.linef(\"x.codecDecodeSelfFromArray(%sl%s, d)\", genTempVarPfx, i)\n\tx.line(\"}\")\n\t// else panic\n\tx.line(\"} else { \")\n\tx.line(\"panic(codecSelferOnlyMapOrArrayEncodeToStructErr\" + x.xs + \")\")\n\tx.line(\"} \")\n}\n\n// --------\n\ntype genV struct {\n\t// genV is either a primitive (Primitive != \"\") or a map (MapKey != \"\") or a slice\n\tMapKey    string\n\tElem      string\n\tPrimitive string\n\tSize      int\n}\n\nfunc (x *genRunner) newGenV(t reflect.Type) (v genV) {\n\tswitch t.Kind() {\n\tcase reflect.Slice, reflect.Array:\n\t\tte := t.Elem()\n\t\tv.Elem = x.genTypeName(te)\n\t\tv.Size = int(te.Size())\n\tcase reflect.Map:\n\t\tte, tk := t.Elem(), t.Key()\n\t\tv.Elem = x.genTypeName(te)\n\t\tv.MapKey = x.genTypeName(tk)\n\t\tv.Size = int(te.Size() + tk.Size())\n\tdefault:\n\t\tpanic(\"unexpected type for newGenV. Requires map or slice type\")\n\t}\n\treturn\n}\n\nfunc (x *genV) MethodNamePfx(prefix string, prim bool) string {\n\tvar name []byte\n\tif prefix != \"\" {\n\t\tname = append(name, prefix...)\n\t}\n\tif prim {\n\t\tname = append(name, genTitleCaseName(x.Primitive)...)\n\t} else {\n\t\tif x.MapKey == \"\" {\n\t\t\tname = append(name, \"Slice\"...)\n\t\t} else {\n\t\t\tname = append(name, \"Map\"...)\n\t\t\tname = append(name, genTitleCaseName(x.MapKey)...)\n\t\t}\n\t\tname = append(name, genTitleCaseName(x.Elem)...)\n\t}\n\treturn string(name)\n\n}\n\n// genImportPath returns import path of a non-predeclared named typed, or an empty string otherwise.\n//\n// This handles the misbehaviour that occurs when 1.5-style vendoring is enabled,\n// where PkgPath returns the full path, including the vendoring pre-fix that should have been stripped.\n// We strip it here.\nfunc genImportPath(t reflect.Type) (s string) {\n\ts = t.PkgPath()\n\tif genCheckVendor {\n\t\t// HACK: Misbehaviour occurs in go 1.5. May have to re-visit this later.\n\t\t// if s contains /vendor/ OR startsWith vendor/, then return everything after it.\n\t\tconst vendorStart = \"vendor/\"\n\t\tconst vendorInline = \"/vendor/\"\n\t\tif i := strings.LastIndex(s, vendorInline); i >= 0 {\n\t\t\ts = s[i+len(vendorInline):]\n\t\t} else if strings.HasPrefix(s, vendorStart) {\n\t\t\ts = s[len(vendorStart):]\n\t\t}\n\t}\n\treturn\n}\n\n// A go identifier is (letter|_)[letter|number|_]*\nfunc genGoIdentifier(s string, checkFirstChar bool) string {\n\tb := make([]byte, 0, len(s))\n\tt := make([]byte, 4)\n\tvar n int\n\tfor i, r := range s {\n\t\tif checkFirstChar && i == 0 && !unicode.IsLetter(r) {\n\t\t\tb = append(b, '_')\n\t\t}\n\t\t// r must be unicode_letter, unicode_digit or _\n\t\tif unicode.IsLetter(r) || unicode.IsDigit(r) {\n\t\t\tn = utf8.EncodeRune(t, r)\n\t\t\tb = append(b, t[:n]...)\n\t\t} else {\n\t\t\tb = append(b, '_')\n\t\t}\n\t}\n\treturn string(b)\n}\n\nfunc genNonPtr(t reflect.Type) reflect.Type {\n\tfor t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\treturn t\n}\n\nfunc genTitleCaseName(s string) string {\n\tswitch s {\n\tcase \"interface{}\", \"interface {}\":\n\t\treturn \"Intf\"\n\tdefault:\n\t\treturn strings.ToUpper(s[0:1]) + s[1:]\n\t}\n}\n\nfunc genMethodNameT(t reflect.Type, tRef reflect.Type) (n string) {\n\tvar ptrPfx string\n\tfor t.Kind() == reflect.Ptr {\n\t\tptrPfx += \"Ptrto\"\n\t\tt = t.Elem()\n\t}\n\ttstr := t.String()\n\tif tn := t.Name(); tn != \"\" {\n\t\tif tRef != nil && genImportPath(t) == genImportPath(tRef) {\n\t\t\treturn ptrPfx + tn\n\t\t} else {\n\t\t\tif genQNameRegex.MatchString(tstr) {\n\t\t\t\treturn ptrPfx + strings.Replace(tstr, \".\", \"_\", 1000)\n\t\t\t} else {\n\t\t\t\treturn ptrPfx + genCustomTypeName(tstr)\n\t\t\t}\n\t\t}\n\t}\n\tswitch t.Kind() {\n\tcase reflect.Map:\n\t\treturn ptrPfx + \"Map\" + genMethodNameT(t.Key(), tRef) + genMethodNameT(t.Elem(), tRef)\n\tcase reflect.Slice:\n\t\treturn ptrPfx + \"Slice\" + genMethodNameT(t.Elem(), tRef)\n\tcase reflect.Array:\n\t\treturn ptrPfx + \"Array\" + strconv.FormatInt(int64(t.Len()), 10) + genMethodNameT(t.Elem(), tRef)\n\tcase reflect.Chan:\n\t\tvar cx string\n\t\tswitch t.ChanDir() {\n\t\tcase reflect.SendDir:\n\t\t\tcx = \"ChanSend\"\n\t\tcase reflect.RecvDir:\n\t\t\tcx = \"ChanRecv\"\n\t\tdefault:\n\t\t\tcx = \"Chan\"\n\t\t}\n\t\treturn ptrPfx + cx + genMethodNameT(t.Elem(), tRef)\n\tdefault:\n\t\tif t == intfTyp {\n\t\t\treturn ptrPfx + \"Interface\"\n\t\t} else {\n\t\t\tif tRef != nil && genImportPath(t) == genImportPath(tRef) {\n\t\t\t\tif t.Name() != \"\" {\n\t\t\t\t\treturn ptrPfx + t.Name()\n\t\t\t\t} else {\n\t\t\t\t\treturn ptrPfx + genCustomTypeName(tstr)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// best way to get the package name inclusive\n\t\t\t\t// return ptrPfx + strings.Replace(tstr, \".\", \"_\", 1000)\n\t\t\t\t// return ptrPfx + genBase64enc.EncodeToString([]byte(tstr))\n\t\t\t\tif t.Name() != \"\" && genQNameRegex.MatchString(tstr) {\n\t\t\t\t\treturn ptrPfx + strings.Replace(tstr, \".\", \"_\", 1000)\n\t\t\t\t} else {\n\t\t\t\t\treturn ptrPfx + genCustomTypeName(tstr)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// genCustomNameForType base64encodes the t.String() value in such a way\n// that it can be used within a function name.\nfunc genCustomTypeName(tstr string) string {\n\tlen2 := genBase64enc.EncodedLen(len(tstr))\n\tbufx := make([]byte, len2)\n\tgenBase64enc.Encode(bufx, []byte(tstr))\n\tfor i := len2 - 1; i >= 0; i-- {\n\t\tif bufx[i] == '=' {\n\t\t\tlen2--\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn string(bufx[:len2])\n}\n\nfunc genIsImmutable(t reflect.Type) (v bool) {\n\treturn isImmutableKind(t.Kind())\n}\n\ntype genInternal struct {\n\tValues []genV\n\tUnsafe bool\n}\n\nfunc (x genInternal) FastpathLen() (l int) {\n\tfor _, v := range x.Values {\n\t\tif v.Primitive == \"\" {\n\t\t\tl++\n\t\t}\n\t}\n\treturn\n}\n\nfunc genInternalZeroValue(s string) string {\n\tswitch s {\n\tcase \"interface{}\", \"interface {}\":\n\t\treturn \"nil\"\n\tcase \"bool\":\n\t\treturn \"false\"\n\tcase \"string\":\n\t\treturn `\"\"`\n\tdefault:\n\t\treturn \"0\"\n\t}\n}\n\nfunc genInternalEncCommandAsString(s string, vname string) string {\n\tswitch s {\n\tcase \"uint\", \"uint8\", \"uint16\", \"uint32\", \"uint64\":\n\t\treturn \"ee.EncodeUint(uint64(\" + vname + \"))\"\n\tcase \"int\", \"int8\", \"int16\", \"int32\", \"int64\":\n\t\treturn \"ee.EncodeInt(int64(\" + vname + \"))\"\n\tcase \"string\":\n\t\treturn \"ee.EncodeString(c_UTF8, \" + vname + \")\"\n\tcase \"float32\":\n\t\treturn \"ee.EncodeFloat32(\" + vname + \")\"\n\tcase \"float64\":\n\t\treturn \"ee.EncodeFloat64(\" + vname + \")\"\n\tcase \"bool\":\n\t\treturn \"ee.EncodeBool(\" + vname + \")\"\n\tcase \"symbol\":\n\t\treturn \"ee.EncodeSymbol(\" + vname + \")\"\n\tdefault:\n\t\treturn \"e.encode(\" + vname + \")\"\n\t}\n}\n\nfunc genInternalDecCommandAsString(s string) string {\n\tswitch s {\n\tcase \"uint\":\n\t\treturn \"uint(dd.DecodeUint(uintBitsize))\"\n\tcase \"uint8\":\n\t\treturn \"uint8(dd.DecodeUint(8))\"\n\tcase \"uint16\":\n\t\treturn \"uint16(dd.DecodeUint(16))\"\n\tcase \"uint32\":\n\t\treturn \"uint32(dd.DecodeUint(32))\"\n\tcase \"uint64\":\n\t\treturn \"dd.DecodeUint(64)\"\n\tcase \"uintptr\":\n\t\treturn \"uintptr(dd.DecodeUint(uintBitsize))\"\n\tcase \"int\":\n\t\treturn \"int(dd.DecodeInt(intBitsize))\"\n\tcase \"int8\":\n\t\treturn \"int8(dd.DecodeInt(8))\"\n\tcase \"int16\":\n\t\treturn \"int16(dd.DecodeInt(16))\"\n\tcase \"int32\":\n\t\treturn \"int32(dd.DecodeInt(32))\"\n\tcase \"int64\":\n\t\treturn \"dd.DecodeInt(64)\"\n\n\tcase \"string\":\n\t\treturn \"dd.DecodeString()\"\n\tcase \"float32\":\n\t\treturn \"float32(dd.DecodeFloat(true))\"\n\tcase \"float64\":\n\t\treturn \"dd.DecodeFloat(false)\"\n\tcase \"bool\":\n\t\treturn \"dd.DecodeBool()\"\n\tdefault:\n\t\tpanic(errors.New(\"gen internal: unknown type for decode: \" + s))\n\t}\n}\n\nfunc genInternalSortType(s string, elem bool) string {\n\tfor _, v := range [...]string{\"int\", \"uint\", \"float\", \"bool\", \"string\"} {\n\t\tif strings.HasPrefix(s, v) {\n\t\t\tif elem {\n\t\t\t\tif v == \"int\" || v == \"uint\" || v == \"float\" {\n\t\t\t\t\treturn v + \"64\"\n\t\t\t\t} else {\n\t\t\t\t\treturn v\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn v + \"Slice\"\n\t\t}\n\t}\n\tpanic(\"sorttype: unexpected type: \" + s)\n}\n\n// var genInternalMu sync.Mutex\nvar genInternalV genInternal\nvar genInternalTmplFuncs template.FuncMap\nvar genInternalOnce sync.Once\n\nfunc genInternalInit() {\n\ttypes := [...]string{\n\t\t\"interface{}\",\n\t\t\"string\",\n\t\t\"float32\",\n\t\t\"float64\",\n\t\t\"uint\",\n\t\t\"uint8\",\n\t\t\"uint16\",\n\t\t\"uint32\",\n\t\t\"uint64\",\n\t\t\"uintptr\",\n\t\t\"int\",\n\t\t\"int8\",\n\t\t\"int16\",\n\t\t\"int32\",\n\t\t\"int64\",\n\t\t\"bool\",\n\t}\n\t// keep as slice, so it is in specific iteration order.\n\t// Initial order was uint64, string, interface{}, int, int64\n\tmapvaltypes := [...]string{\n\t\t\"interface{}\",\n\t\t\"string\",\n\t\t\"uint\",\n\t\t\"uint8\",\n\t\t\"uint16\",\n\t\t\"uint32\",\n\t\t\"uint64\",\n\t\t\"uintptr\",\n\t\t\"int\",\n\t\t\"int8\",\n\t\t\"int16\",\n\t\t\"int32\",\n\t\t\"int64\",\n\t\t\"float32\",\n\t\t\"float64\",\n\t\t\"bool\",\n\t}\n\twordSizeBytes := int(intBitsize) / 8\n\n\tmapvaltypes2 := map[string]int{\n\t\t\"interface{}\": 2 * wordSizeBytes,\n\t\t\"string\":      2 * wordSizeBytes,\n\t\t\"uint\":        1 * wordSizeBytes,\n\t\t\"uint8\":       1,\n\t\t\"uint16\":      2,\n\t\t\"uint32\":      4,\n\t\t\"uint64\":      8,\n\t\t\"uintptr\":     1 * wordSizeBytes,\n\t\t\"int\":         1 * wordSizeBytes,\n\t\t\"int8\":        1,\n\t\t\"int16\":       2,\n\t\t\"int32\":       4,\n\t\t\"int64\":       8,\n\t\t\"float32\":     4,\n\t\t\"float64\":     8,\n\t\t\"bool\":        1,\n\t}\n\tvar gt genInternal\n\n\t// For each slice or map type, there must be a (symmetrical) Encode and Decode fast-path function\n\tfor _, s := range types {\n\t\tgt.Values = append(gt.Values, genV{Primitive: s, Size: mapvaltypes2[s]})\n\t\tif s != \"uint8\" { // do not generate fast path for slice of bytes. Treat specially already.\n\t\t\tgt.Values = append(gt.Values, genV{Elem: s, Size: mapvaltypes2[s]})\n\t\t}\n\t\tif _, ok := mapvaltypes2[s]; !ok {\n\t\t\tgt.Values = append(gt.Values, genV{MapKey: s, Elem: s, Size: 2 * mapvaltypes2[s]})\n\t\t}\n\t\tfor _, ms := range mapvaltypes {\n\t\t\tgt.Values = append(gt.Values, genV{MapKey: s, Elem: ms, Size: mapvaltypes2[s] + mapvaltypes2[ms]})\n\t\t}\n\t}\n\n\tfuncs := make(template.FuncMap)\n\t// funcs[\"haspfx\"] = strings.HasPrefix\n\tfuncs[\"encmd\"] = genInternalEncCommandAsString\n\tfuncs[\"decmd\"] = genInternalDecCommandAsString\n\tfuncs[\"zerocmd\"] = genInternalZeroValue\n\tfuncs[\"hasprefix\"] = strings.HasPrefix\n\tfuncs[\"sorttype\"] = genInternalSortType\n\n\tgenInternalV = gt\n\tgenInternalTmplFuncs = funcs\n}\n\n// genInternalGoFile is used to generate source files from templates.\n// It is run by the program author alone.\n// Unfortunately, it has to be exported so that it can be called from a command line tool.\n// *** DO NOT USE ***\nfunc genInternalGoFile(r io.Reader, w io.Writer, safe bool) (err error) {\n\tgenInternalOnce.Do(genInternalInit)\n\n\tgt := genInternalV\n\tgt.Unsafe = !safe\n\n\tt := template.New(\"\").Funcs(genInternalTmplFuncs)\n\n\ttmplstr, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif t, err = t.Parse(string(tmplstr)); err != nil {\n\t\treturn\n\t}\n\n\tvar out bytes.Buffer\n\terr = t.Execute(&out, gt)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tbout, err := format.Source(out.Bytes())\n\tif err != nil {\n\t\tw.Write(out.Bytes()) // write out if error, so we can still see.\n\t\t// w.Write(bout) // write out if error, as much as possible, so we can still see.\n\t\treturn\n\t}\n\tw.Write(bout)\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen_15.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// +build go1.5,!go1.6\n\npackage codec\n\nimport \"os\"\n\nfunc init() {\n\tgenCheckVendor = os.Getenv(\"GO15VENDOREXPERIMENT\") == \"1\"\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen_16.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// +build go1.6\n\npackage codec\n\nimport \"os\"\n\nfunc init() {\n\tgenCheckVendor = os.Getenv(\"GO15VENDOREXPERIMENT\") != \"0\"\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/gen_17.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n// +build go1.7\n\npackage codec\n\nfunc init() {\n\tgenCheckVendor = true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/helper.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\n// Contains code shared by both encode and decode.\n\n// Some shared ideas around encoding/decoding\n// ------------------------------------------\n//\n// If an interface{} is passed, we first do a type assertion to see if it is\n// a primitive type or a map/slice of primitive types, and use a fastpath to handle it.\n//\n// If we start with a reflect.Value, we are already in reflect.Value land and\n// will try to grab the function for the underlying Type and directly call that function.\n// This is more performant than calling reflect.Value.Interface().\n//\n// This still helps us bypass many layers of reflection, and give best performance.\n//\n// Containers\n// ------------\n// Containers in the stream are either associative arrays (key-value pairs) or\n// regular arrays (indexed by incrementing integers).\n//\n// Some streams support indefinite-length containers, and use a breaking\n// byte-sequence to denote that the container has come to an end.\n//\n// Some streams also are text-based, and use explicit separators to denote the\n// end/beginning of different values.\n//\n// During encode, we use a high-level condition to determine how to iterate through\n// the container. That decision is based on whether the container is text-based (with\n// separators) or binary (without separators). If binary, we do not even call the\n// encoding of separators.\n//\n// During decode, we use a different high-level condition to determine how to iterate\n// through the containers. That decision is based on whether the stream contained\n// a length prefix, or if it used explicit breaks. If length-prefixed, we assume that\n// it has to be binary, and we do not even try to read separators.\n//\n// Philosophy\n// ------------\n// On decode, this codec will update containers appropriately:\n//    - If struct, update fields from stream into fields of struct.\n//      If field in stream not found in struct, handle appropriately (based on option).\n//      If a struct field has no corresponding value in the stream, leave it AS IS.\n//      If nil in stream, set value to nil/zero value.\n//    - If map, update map from stream.\n//      If the stream value is NIL, set the map to nil.\n//    - if slice, try to update up to length of array in stream.\n//      if container len is less than stream array length,\n//      and container cannot be expanded, handled (based on option).\n//      This means you can decode 4-element stream array into 1-element array.\n//\n// ------------------------------------\n// On encode, user can specify omitEmpty. This means that the value will be omitted\n// if the zero value. The problem may occur during decode, where omitted values do not affect\n// the value being decoded into. This means that if decoding into a struct with an\n// int field with current value=5, and the field is omitted in the stream, then after\n// decoding, the value will still be 5 (not 0).\n// omitEmpty only works if you guarantee that you always decode into zero-values.\n//\n// ------------------------------------\n// We could have truncated a map to remove keys not available in the stream,\n// or set values in the struct which are not in the stream to their zero values.\n// We decided against it because there is no efficient way to do it.\n// We may introduce it as an option later.\n// However, that will require enabling it for both runtime and code generation modes.\n//\n// To support truncate, we need to do 2 passes over the container:\n//   map\n//   - first collect all keys (e.g. in k1)\n//   - for each key in stream, mark k1 that the key should not be removed\n//   - after updating map, do second pass and call delete for all keys in k1 which are not marked\n//   struct:\n//   - for each field, track the *typeInfo s1\n//   - iterate through all s1, and for each one not marked, set value to zero\n//   - this involves checking the possible anonymous fields which are nil ptrs.\n//     too much work.\n//\n// ------------------------------------------\n// Error Handling is done within the library using panic.\n//\n// This way, the code doesn't have to keep checking if an error has happened,\n// and we don't have to keep sending the error value along with each call\n// or storing it in the En|Decoder and checking it constantly along the way.\n//\n// The disadvantage is that small functions which use panics cannot be inlined.\n// The code accounts for that by only using panics behind an interface;\n// since interface calls cannot be inlined, this is irrelevant.\n//\n// We considered storing the error is En|Decoder.\n//   - once it has its err field set, it cannot be used again.\n//   - panicing will be optional, controlled by const flag.\n//   - code should always check error first and return early.\n// We eventually decided against it as it makes the code clumsier to always\n// check for these error conditions.\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\tscratchByteArrayLen = 32\n\tinitCollectionCap   = 32 // 32 is defensive. 16 is preferred.\n\n\t// Support encoding.(Binary|Text)(Unm|M)arshaler.\n\t// This constant flag will enable or disable it.\n\tsupportMarshalInterfaces = true\n\n\t// Each Encoder or Decoder uses a cache of functions based on conditionals,\n\t// so that the conditionals are not run every time.\n\t//\n\t// Either a map or a slice is used to keep track of the functions.\n\t// The map is more natural, but has a higher cost than a slice/array.\n\t// This flag (useMapForCodecCache) controls which is used.\n\t//\n\t// From benchmarks, slices with linear search perform better with < 32 entries.\n\t// We have typically seen a high threshold of about 24 entries.\n\tuseMapForCodecCache = false\n\n\t// for debugging, set this to false, to catch panic traces.\n\t// Note that this will always cause rpc tests to fail, since they need io.EOF sent via panic.\n\trecoverPanicToErr = true\n\n\t// if resetSliceElemToZeroValue, then on decoding a slice, reset the element to a zero value first.\n\t// Only concern is that, if the slice already contained some garbage, we will decode into that garbage.\n\t// The chances of this are slim, so leave this \"optimization\".\n\t// TODO: should this be true, to ensure that we always decode into a \"zero\" \"empty\" value?\n\tresetSliceElemToZeroValue bool = false\n)\n\nvar (\n\toneByteArr    = [1]byte{0}\n\tzeroByteSlice = oneByteArr[:0:0]\n)\n\ntype charEncoding uint8\n\nconst (\n\tc_RAW charEncoding = iota\n\tc_UTF8\n\tc_UTF16LE\n\tc_UTF16BE\n\tc_UTF32LE\n\tc_UTF32BE\n)\n\n// valueType is the stream type\ntype valueType uint8\n\nconst (\n\tvalueTypeUnset valueType = iota\n\tvalueTypeNil\n\tvalueTypeInt\n\tvalueTypeUint\n\tvalueTypeFloat\n\tvalueTypeBool\n\tvalueTypeString\n\tvalueTypeSymbol\n\tvalueTypeBytes\n\tvalueTypeMap\n\tvalueTypeArray\n\tvalueTypeTimestamp\n\tvalueTypeExt\n\n\t// valueTypeInvalid = 0xff\n)\n\ntype seqType uint8\n\nconst (\n\t_ seqType = iota\n\tseqTypeArray\n\tseqTypeSlice\n\tseqTypeChan\n)\n\n// note that containerMapStart and containerArraySend are not sent.\n// This is because the ReadXXXStart and EncodeXXXStart already does these.\ntype containerState uint8\n\nconst (\n\t_ containerState = iota\n\n\tcontainerMapStart // slot left open, since Driver method already covers it\n\tcontainerMapKey\n\tcontainerMapValue\n\tcontainerMapEnd\n\tcontainerArrayStart // slot left open, since Driver methods already cover it\n\tcontainerArrayElem\n\tcontainerArrayEnd\n)\n\n// sfiIdx used for tracking where a (field/enc)Name is seen in a []*structFieldInfo\ntype sfiIdx struct {\n\tname  string\n\tindex int\n}\n\n// do not recurse if a containing type refers to an embedded type\n// which refers back to its containing type (via a pointer).\n// The second time this back-reference happens, break out,\n// so as not to cause an infinite loop.\nconst rgetMaxRecursion = 2\n\n// Anecdotally, we believe most types have <= 12 fields.\n// Java's PMD rules set TooManyFields threshold to 15.\nconst rgetPoolTArrayLen = 12\n\ntype rgetT struct {\n\tfNames   []string\n\tencNames []string\n\tetypes   []uintptr\n\tsfis     []*structFieldInfo\n}\n\ntype rgetPoolT struct {\n\tfNames   [rgetPoolTArrayLen]string\n\tencNames [rgetPoolTArrayLen]string\n\tetypes   [rgetPoolTArrayLen]uintptr\n\tsfis     [rgetPoolTArrayLen]*structFieldInfo\n\tsfiidx   [rgetPoolTArrayLen]sfiIdx\n}\n\nvar rgetPool = sync.Pool{\n\tNew: func() interface{} { return new(rgetPoolT) },\n}\n\ntype containerStateRecv interface {\n\tsendContainerState(containerState)\n}\n\n// mirror json.Marshaler and json.Unmarshaler here,\n// so we don't import the encoding/json package\ntype jsonMarshaler interface {\n\tMarshalJSON() ([]byte, error)\n}\ntype jsonUnmarshaler interface {\n\tUnmarshalJSON([]byte) error\n}\n\nvar (\n\tbigen               = binary.BigEndian\n\tstructInfoFieldName = \"_struct\"\n\n\tmapStrIntfTyp  = reflect.TypeOf(map[string]interface{}(nil))\n\tmapIntfIntfTyp = reflect.TypeOf(map[interface{}]interface{}(nil))\n\tintfSliceTyp   = reflect.TypeOf([]interface{}(nil))\n\tintfTyp        = intfSliceTyp.Elem()\n\n\tstringTyp     = reflect.TypeOf(\"\")\n\ttimeTyp       = reflect.TypeOf(time.Time{})\n\trawExtTyp     = reflect.TypeOf(RawExt{})\n\trawTyp        = reflect.TypeOf(Raw{})\n\tuint8SliceTyp = reflect.TypeOf([]uint8(nil))\n\n\tmapBySliceTyp = reflect.TypeOf((*MapBySlice)(nil)).Elem()\n\n\tbinaryMarshalerTyp   = reflect.TypeOf((*encoding.BinaryMarshaler)(nil)).Elem()\n\tbinaryUnmarshalerTyp = reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem()\n\n\ttextMarshalerTyp   = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()\n\ttextUnmarshalerTyp = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()\n\n\tjsonMarshalerTyp   = reflect.TypeOf((*jsonMarshaler)(nil)).Elem()\n\tjsonUnmarshalerTyp = reflect.TypeOf((*jsonUnmarshaler)(nil)).Elem()\n\n\tselferTyp = reflect.TypeOf((*Selfer)(nil)).Elem()\n\n\tuint8SliceTypId = reflect.ValueOf(uint8SliceTyp).Pointer()\n\trawExtTypId     = reflect.ValueOf(rawExtTyp).Pointer()\n\trawTypId        = reflect.ValueOf(rawTyp).Pointer()\n\tintfTypId       = reflect.ValueOf(intfTyp).Pointer()\n\ttimeTypId       = reflect.ValueOf(timeTyp).Pointer()\n\tstringTypId     = reflect.ValueOf(stringTyp).Pointer()\n\n\tmapStrIntfTypId  = reflect.ValueOf(mapStrIntfTyp).Pointer()\n\tmapIntfIntfTypId = reflect.ValueOf(mapIntfIntfTyp).Pointer()\n\tintfSliceTypId   = reflect.ValueOf(intfSliceTyp).Pointer()\n\t// mapBySliceTypId  = reflect.ValueOf(mapBySliceTyp).Pointer()\n\n\tintBitsize  uint8 = uint8(reflect.TypeOf(int(0)).Bits())\n\tuintBitsize uint8 = uint8(reflect.TypeOf(uint(0)).Bits())\n\n\tbsAll0x00 = []byte{0, 0, 0, 0, 0, 0, 0, 0}\n\tbsAll0xff = []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}\n\n\tchkOvf checkOverflow\n\n\tnoFieldNameToStructFieldInfoErr = errors.New(\"no field name passed to parseStructFieldInfo\")\n)\n\nvar defTypeInfos = NewTypeInfos([]string{\"codec\", \"json\"})\n\n// Selfer defines methods by which a value can encode or decode itself.\n//\n// Any type which implements Selfer will be able to encode or decode itself.\n// Consequently, during (en|de)code, this takes precedence over\n// (text|binary)(M|Unm)arshal or extension support.\ntype Selfer interface {\n\tCodecEncodeSelf(*Encoder)\n\tCodecDecodeSelf(*Decoder)\n}\n\n// MapBySlice represents a slice which should be encoded as a map in the stream.\n// The slice contains a sequence of key-value pairs.\n// This affords storing a map in a specific sequence in the stream.\n//\n// The support of MapBySlice affords the following:\n//   - A slice type which implements MapBySlice will be encoded as a map\n//   - A slice can be decoded from a map in the stream\ntype MapBySlice interface {\n\tMapBySlice()\n}\n\n// WARNING: DO NOT USE DIRECTLY. EXPORTED FOR GODOC BENEFIT. WILL BE REMOVED.\n//\n// BasicHandle encapsulates the common options and extension functions.\ntype BasicHandle struct {\n\t// TypeInfos is used to get the type info for any type.\n\t//\n\t// If not configured, the default TypeInfos is used, which uses struct tag keys: codec, json\n\tTypeInfos *TypeInfos\n\n\textHandle\n\tEncodeOptions\n\tDecodeOptions\n}\n\nfunc (x *BasicHandle) getBasicHandle() *BasicHandle {\n\treturn x\n}\n\nfunc (x *BasicHandle) getTypeInfo(rtid uintptr, rt reflect.Type) (pti *typeInfo) {\n\tif x.TypeInfos != nil {\n\t\treturn x.TypeInfos.get(rtid, rt)\n\t}\n\treturn defTypeInfos.get(rtid, rt)\n}\n\n// Handle is the interface for a specific encoding format.\n//\n// Typically, a Handle is pre-configured before first time use,\n// and not modified while in use. Such a pre-configured Handle\n// is safe for concurrent access.\ntype Handle interface {\n\tgetBasicHandle() *BasicHandle\n\tnewEncDriver(w *Encoder) encDriver\n\tnewDecDriver(r *Decoder) decDriver\n\tisBinary() bool\n}\n\n// Raw represents raw formatted bytes.\n// We \"blindly\" store it during encode and store the raw bytes during decode.\n// Note: it is dangerous during encode, so we may gate the behaviour behind an Encode flag which must be explicitly set.\ntype Raw []byte\n\n// RawExt represents raw unprocessed extension data.\n// Some codecs will decode extension data as a *RawExt if there is no registered extension for the tag.\n//\n// Only one of Data or Value is nil. If Data is nil, then the content of the RawExt is in the Value.\ntype RawExt struct {\n\tTag uint64\n\t// Data is the []byte which represents the raw ext. If Data is nil, ext is exposed in Value.\n\t// Data is used by codecs (e.g. binc, msgpack, simple) which do custom serialization of the types\n\tData []byte\n\t// Value represents the extension, if Data is nil.\n\t// Value is used by codecs (e.g. cbor, json) which use the format to do custom serialization of the types.\n\tValue interface{}\n}\n\n// BytesExt handles custom (de)serialization of types to/from []byte.\n// It is used by codecs (e.g. binc, msgpack, simple) which do custom serialization of the types.\ntype BytesExt interface {\n\t// WriteExt converts a value to a []byte.\n\t//\n\t// Note: v *may* be a pointer to the extension type, if the extension type was a struct or array.\n\tWriteExt(v interface{}) []byte\n\n\t// ReadExt updates a value from a []byte.\n\tReadExt(dst interface{}, src []byte)\n}\n\n// InterfaceExt handles custom (de)serialization of types to/from another interface{} value.\n// The Encoder or Decoder will then handle the further (de)serialization of that known type.\n//\n// It is used by codecs (e.g. cbor, json) which use the format to do custom serialization of the types.\ntype InterfaceExt interface {\n\t// ConvertExt converts a value into a simpler interface for easy encoding e.g. convert time.Time to int64.\n\t//\n\t// Note: v *may* be a pointer to the extension type, if the extension type was a struct or array.\n\tConvertExt(v interface{}) interface{}\n\n\t// UpdateExt updates a value from a simpler interface for easy decoding e.g. convert int64 to time.Time.\n\tUpdateExt(dst interface{}, src interface{})\n}\n\n// Ext handles custom (de)serialization of custom types / extensions.\ntype Ext interface {\n\tBytesExt\n\tInterfaceExt\n}\n\n// addExtWrapper is a wrapper implementation to support former AddExt exported method.\ntype addExtWrapper struct {\n\tencFn func(reflect.Value) ([]byte, error)\n\tdecFn func(reflect.Value, []byte) error\n}\n\nfunc (x addExtWrapper) WriteExt(v interface{}) []byte {\n\tbs, err := x.encFn(reflect.ValueOf(v))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn bs\n}\n\nfunc (x addExtWrapper) ReadExt(v interface{}, bs []byte) {\n\tif err := x.decFn(reflect.ValueOf(v), bs); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (x addExtWrapper) ConvertExt(v interface{}) interface{} {\n\treturn x.WriteExt(v)\n}\n\nfunc (x addExtWrapper) UpdateExt(dest interface{}, v interface{}) {\n\tx.ReadExt(dest, v.([]byte))\n}\n\ntype setExtWrapper struct {\n\tb BytesExt\n\ti InterfaceExt\n}\n\nfunc (x *setExtWrapper) WriteExt(v interface{}) []byte {\n\tif x.b == nil {\n\t\tpanic(\"BytesExt.WriteExt is not supported\")\n\t}\n\treturn x.b.WriteExt(v)\n}\n\nfunc (x *setExtWrapper) ReadExt(v interface{}, bs []byte) {\n\tif x.b == nil {\n\t\tpanic(\"BytesExt.WriteExt is not supported\")\n\n\t}\n\tx.b.ReadExt(v, bs)\n}\n\nfunc (x *setExtWrapper) ConvertExt(v interface{}) interface{} {\n\tif x.i == nil {\n\t\tpanic(\"InterfaceExt.ConvertExt is not supported\")\n\n\t}\n\treturn x.i.ConvertExt(v)\n}\n\nfunc (x *setExtWrapper) UpdateExt(dest interface{}, v interface{}) {\n\tif x.i == nil {\n\t\tpanic(\"InterfaceExxt.UpdateExt is not supported\")\n\n\t}\n\tx.i.UpdateExt(dest, v)\n}\n\n// type errorString string\n// func (x errorString) Error() string { return string(x) }\n\ntype binaryEncodingType struct{}\n\nfunc (_ binaryEncodingType) isBinary() bool { return true }\n\ntype textEncodingType struct{}\n\nfunc (_ textEncodingType) isBinary() bool { return false }\n\n// noBuiltInTypes is embedded into many types which do not support builtins\n// e.g. msgpack, simple, cbor.\ntype noBuiltInTypes struct{}\n\nfunc (_ noBuiltInTypes) IsBuiltinType(rt uintptr) bool           { return false }\nfunc (_ noBuiltInTypes) EncodeBuiltin(rt uintptr, v interface{}) {}\nfunc (_ noBuiltInTypes) DecodeBuiltin(rt uintptr, v interface{}) {}\n\ntype noStreamingCodec struct{}\n\nfunc (_ noStreamingCodec) CheckBreak() bool { return false }\n\n// bigenHelper.\n// Users must already slice the x completely, because we will not reslice.\ntype bigenHelper struct {\n\tx []byte // must be correctly sliced to appropriate len. slicing is a cost.\n\tw encWriter\n}\n\nfunc (z bigenHelper) writeUint16(v uint16) {\n\tbigen.PutUint16(z.x, v)\n\tz.w.writeb(z.x)\n}\n\nfunc (z bigenHelper) writeUint32(v uint32) {\n\tbigen.PutUint32(z.x, v)\n\tz.w.writeb(z.x)\n}\n\nfunc (z bigenHelper) writeUint64(v uint64) {\n\tbigen.PutUint64(z.x, v)\n\tz.w.writeb(z.x)\n}\n\ntype extTypeTagFn struct {\n\trtid uintptr\n\trt   reflect.Type\n\ttag  uint64\n\text  Ext\n}\n\ntype extHandle []extTypeTagFn\n\n// DEPRECATED: Use SetBytesExt or SetInterfaceExt on the Handle instead.\n//\n// AddExt registes an encode and decode function for a reflect.Type.\n// AddExt internally calls SetExt.\n// To deregister an Ext, call AddExt with nil encfn and/or nil decfn.\nfunc (o *extHandle) AddExt(\n\trt reflect.Type, tag byte,\n\tencfn func(reflect.Value) ([]byte, error), decfn func(reflect.Value, []byte) error,\n) (err error) {\n\tif encfn == nil || decfn == nil {\n\t\treturn o.SetExt(rt, uint64(tag), nil)\n\t}\n\treturn o.SetExt(rt, uint64(tag), addExtWrapper{encfn, decfn})\n}\n\n// DEPRECATED: Use SetBytesExt or SetInterfaceExt on the Handle instead.\n//\n// Note that the type must be a named type, and specifically not\n// a pointer or Interface. An error is returned if that is not honored.\n//\n// To Deregister an ext, call SetExt with nil Ext\nfunc (o *extHandle) SetExt(rt reflect.Type, tag uint64, ext Ext) (err error) {\n\t// o is a pointer, because we may need to initialize it\n\tif rt.PkgPath() == \"\" || rt.Kind() == reflect.Interface {\n\t\terr = fmt.Errorf(\"codec.Handle.AddExt: Takes named type, not a pointer or interface: %T\",\n\t\t\treflect.Zero(rt).Interface())\n\t\treturn\n\t}\n\n\trtid := reflect.ValueOf(rt).Pointer()\n\tfor _, v := range *o {\n\t\tif v.rtid == rtid {\n\t\t\tv.tag, v.ext = tag, ext\n\t\t\treturn\n\t\t}\n\t}\n\n\tif *o == nil {\n\t\t*o = make([]extTypeTagFn, 0, 4)\n\t}\n\t*o = append(*o, extTypeTagFn{rtid, rt, tag, ext})\n\treturn\n}\n\nfunc (o extHandle) getExt(rtid uintptr) *extTypeTagFn {\n\tvar v *extTypeTagFn\n\tfor i := range o {\n\t\tv = &o[i]\n\t\tif v.rtid == rtid {\n\t\t\treturn v\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (o extHandle) getExtForTag(tag uint64) *extTypeTagFn {\n\tvar v *extTypeTagFn\n\tfor i := range o {\n\t\tv = &o[i]\n\t\tif v.tag == tag {\n\t\t\treturn v\n\t\t}\n\t}\n\treturn nil\n}\n\ntype structFieldInfo struct {\n\tencName   string // encode name\n\tfieldName string // field name\n\n\t// only one of 'i' or 'is' can be set. If 'i' is -1, then 'is' has been set.\n\n\tis        []int // (recursive/embedded) field index in struct\n\ti         int16 // field index in struct\n\tomitEmpty bool\n\ttoArray   bool // if field is _struct, is the toArray set?\n}\n\n// func (si *structFieldInfo) isZero() bool {\n// \treturn si.encName == \"\" && len(si.is) == 0 && si.i == 0 && !si.omitEmpty && !si.toArray\n// }\n\n// rv returns the field of the struct.\n// If anonymous, it returns an Invalid\nfunc (si *structFieldInfo) field(v reflect.Value, update bool) (rv2 reflect.Value) {\n\tif si.i != -1 {\n\t\tv = v.Field(int(si.i))\n\t\treturn v\n\t}\n\t// replicate FieldByIndex\n\tfor _, x := range si.is {\n\t\tfor v.Kind() == reflect.Ptr {\n\t\t\tif v.IsNil() {\n\t\t\t\tif !update {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tv.Set(reflect.New(v.Type().Elem()))\n\t\t\t}\n\t\t\tv = v.Elem()\n\t\t}\n\t\tv = v.Field(x)\n\t}\n\treturn v\n}\n\nfunc (si *structFieldInfo) setToZeroValue(v reflect.Value) {\n\tif si.i != -1 {\n\t\tv = v.Field(int(si.i))\n\t\tv.Set(reflect.Zero(v.Type()))\n\t\t// v.Set(reflect.New(v.Type()).Elem())\n\t\t// v.Set(reflect.New(v.Type()))\n\t} else {\n\t\t// replicate FieldByIndex\n\t\tfor _, x := range si.is {\n\t\t\tfor v.Kind() == reflect.Ptr {\n\t\t\t\tif v.IsNil() {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tv = v.Elem()\n\t\t\t}\n\t\t\tv = v.Field(x)\n\t\t}\n\t\tv.Set(reflect.Zero(v.Type()))\n\t}\n}\n\nfunc parseStructFieldInfo(fname string, stag string) *structFieldInfo {\n\t// if fname == \"\" {\n\t// \tpanic(noFieldNameToStructFieldInfoErr)\n\t// }\n\tsi := structFieldInfo{\n\t\tencName: fname,\n\t}\n\n\tif stag != \"\" {\n\t\tfor i, s := range strings.Split(stag, \",\") {\n\t\t\tif i == 0 {\n\t\t\t\tif s != \"\" {\n\t\t\t\t\tsi.encName = s\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif s == \"omitempty\" {\n\t\t\t\t\tsi.omitEmpty = true\n\t\t\t\t} else if s == \"toarray\" {\n\t\t\t\t\tsi.toArray = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// si.encNameBs = []byte(si.encName)\n\treturn &si\n}\n\ntype sfiSortedByEncName []*structFieldInfo\n\nfunc (p sfiSortedByEncName) Len() int {\n\treturn len(p)\n}\n\nfunc (p sfiSortedByEncName) Less(i, j int) bool {\n\treturn p[i].encName < p[j].encName\n}\n\nfunc (p sfiSortedByEncName) Swap(i, j int) {\n\tp[i], p[j] = p[j], p[i]\n}\n\n// typeInfo keeps information about each type referenced in the encode/decode sequence.\n//\n// During an encode/decode sequence, we work as below:\n//   - If base is a built in type, en/decode base value\n//   - If base is registered as an extension, en/decode base value\n//   - If type is binary(M/Unm)arshaler, call Binary(M/Unm)arshal method\n//   - If type is text(M/Unm)arshaler, call Text(M/Unm)arshal method\n//   - Else decode appropriately based on the reflect.Kind\ntype typeInfo struct {\n\tsfi  []*structFieldInfo // sorted. Used when enc/dec struct to map.\n\tsfip []*structFieldInfo // unsorted. Used when enc/dec struct to array.\n\n\trt   reflect.Type\n\trtid uintptr\n\n\tnumMeth uint16 // number of methods\n\n\t// baseId gives pointer to the base reflect.Type, after deferencing\n\t// the pointers. E.g. base type of ***time.Time is time.Time.\n\tbase      reflect.Type\n\tbaseId    uintptr\n\tbaseIndir int8 // number of indirections to get to base\n\n\tmbs bool // base type (T or *T) is a MapBySlice\n\n\tbm        bool // base type (T or *T) is a binaryMarshaler\n\tbunm      bool // base type (T or *T) is a binaryUnmarshaler\n\tbmIndir   int8 // number of indirections to get to binaryMarshaler type\n\tbunmIndir int8 // number of indirections to get to binaryUnmarshaler type\n\n\ttm        bool // base type (T or *T) is a textMarshaler\n\ttunm      bool // base type (T or *T) is a textUnmarshaler\n\ttmIndir   int8 // number of indirections to get to textMarshaler type\n\ttunmIndir int8 // number of indirections to get to textUnmarshaler type\n\n\tjm        bool // base type (T or *T) is a jsonMarshaler\n\tjunm      bool // base type (T or *T) is a jsonUnmarshaler\n\tjmIndir   int8 // number of indirections to get to jsonMarshaler type\n\tjunmIndir int8 // number of indirections to get to jsonUnmarshaler type\n\n\tcs      bool // base type (T or *T) is a Selfer\n\tcsIndir int8 // number of indirections to get to Selfer type\n\n\ttoArray bool // whether this (struct) type should be encoded as an array\n}\n\nfunc (ti *typeInfo) indexForEncName(name string) int {\n\t// NOTE: name may be a stringView, so don't pass it to another function.\n\t//tisfi := ti.sfi\n\tconst binarySearchThreshold = 16\n\tif sfilen := len(ti.sfi); sfilen < binarySearchThreshold {\n\t\t// linear search. faster than binary search in my testing up to 16-field structs.\n\t\tfor i, si := range ti.sfi {\n\t\t\tif si.encName == name {\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// binary search. adapted from sort/search.go.\n\t\th, i, j := 0, 0, sfilen\n\t\tfor i < j {\n\t\t\th = i + (j-i)/2\n\t\t\tif ti.sfi[h].encName < name {\n\t\t\t\ti = h + 1\n\t\t\t} else {\n\t\t\t\tj = h\n\t\t\t}\n\t\t}\n\t\tif i < sfilen && ti.sfi[i].encName == name {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// TypeInfos caches typeInfo for each type on first inspection.\n//\n// It is configured with a set of tag keys, which are used to get\n// configuration for the type.\ntype TypeInfos struct {\n\tinfos map[uintptr]*typeInfo\n\tmu    sync.RWMutex\n\ttags  []string\n}\n\n// NewTypeInfos creates a TypeInfos given a set of struct tags keys.\n//\n// This allows users customize the struct tag keys which contain configuration\n// of their types.\nfunc NewTypeInfos(tags []string) *TypeInfos {\n\treturn &TypeInfos{tags: tags, infos: make(map[uintptr]*typeInfo, 64)}\n}\n\nfunc (x *TypeInfos) structTag(t reflect.StructTag) (s string) {\n\t// check for tags: codec, json, in that order.\n\t// this allows seamless support for many configured structs.\n\tfor _, x := range x.tags {\n\t\ts = t.Get(x)\n\t\tif s != \"\" {\n\t\t\treturn s\n\t\t}\n\t}\n\treturn\n}\n\nfunc (x *TypeInfos) get(rtid uintptr, rt reflect.Type) (pti *typeInfo) {\n\tvar ok bool\n\tx.mu.RLock()\n\tpti, ok = x.infos[rtid]\n\tx.mu.RUnlock()\n\tif ok {\n\t\treturn\n\t}\n\n\t// do not hold lock while computing this.\n\t// it may lead to duplication, but that's ok.\n\tti := typeInfo{rt: rt, rtid: rtid}\n\tti.numMeth = uint16(rt.NumMethod())\n\n\tvar indir int8\n\tif ok, indir = implementsIntf(rt, binaryMarshalerTyp); ok {\n\t\tti.bm, ti.bmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, binaryUnmarshalerTyp); ok {\n\t\tti.bunm, ti.bunmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, textMarshalerTyp); ok {\n\t\tti.tm, ti.tmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, textUnmarshalerTyp); ok {\n\t\tti.tunm, ti.tunmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, jsonMarshalerTyp); ok {\n\t\tti.jm, ti.jmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, jsonUnmarshalerTyp); ok {\n\t\tti.junm, ti.junmIndir = true, indir\n\t}\n\tif ok, indir = implementsIntf(rt, selferTyp); ok {\n\t\tti.cs, ti.csIndir = true, indir\n\t}\n\tif ok, _ = implementsIntf(rt, mapBySliceTyp); ok {\n\t\tti.mbs = true\n\t}\n\n\tpt := rt\n\tvar ptIndir int8\n\t// for ; pt.Kind() == reflect.Ptr; pt, ptIndir = pt.Elem(), ptIndir+1 { }\n\tfor pt.Kind() == reflect.Ptr {\n\t\tpt = pt.Elem()\n\t\tptIndir++\n\t}\n\tif ptIndir == 0 {\n\t\tti.base = rt\n\t\tti.baseId = rtid\n\t} else {\n\t\tti.base = pt\n\t\tti.baseId = reflect.ValueOf(pt).Pointer()\n\t\tti.baseIndir = ptIndir\n\t}\n\n\tif rt.Kind() == reflect.Struct {\n\t\tvar omitEmpty bool\n\t\tif f, ok := rt.FieldByName(structInfoFieldName); ok {\n\t\t\tsiInfo := parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag))\n\t\t\tti.toArray = siInfo.toArray\n\t\t\tomitEmpty = siInfo.omitEmpty\n\t\t}\n\t\tpi := rgetPool.Get()\n\t\tpv := pi.(*rgetPoolT)\n\t\tpv.etypes[0] = ti.baseId\n\t\tvv := rgetT{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]}\n\t\tx.rget(rt, rtid, omitEmpty, nil, &vv)\n\t\tti.sfip, ti.sfi = rgetResolveSFI(vv.sfis, pv.sfiidx[:0])\n\t\trgetPool.Put(pi)\n\t}\n\t// sfi = sfip\n\n\tx.mu.Lock()\n\tif pti, ok = x.infos[rtid]; !ok {\n\t\tpti = &ti\n\t\tx.infos[rtid] = pti\n\t}\n\tx.mu.Unlock()\n\treturn\n}\n\nfunc (x *TypeInfos) rget(rt reflect.Type, rtid uintptr, omitEmpty bool,\n\tindexstack []int, pv *rgetT,\n) {\n\t// Read up fields and store how to access the value.\n\t//\n\t// It uses go's rules for message selectors,\n\t// which say that the field with the shallowest depth is selected.\n\t//\n\t// Note: we consciously use slices, not a map, to simulate a set.\n\t//       Typically, types have < 16 fields,\n\t//       and iteration using equals is faster than maps there\n\nLOOP:\n\tfor j, jlen := 0, rt.NumField(); j < jlen; j++ {\n\t\tf := rt.Field(j)\n\t\tfkind := f.Type.Kind()\n\t\t// skip if a func type, or is unexported, or structTag value == \"-\"\n\t\tswitch fkind {\n\t\tcase reflect.Func, reflect.Complex64, reflect.Complex128, reflect.UnsafePointer:\n\t\t\tcontinue LOOP\n\t\t}\n\n\t\t// if r1, _ := utf8.DecodeRuneInString(f.Name);\n\t\t// r1 == utf8.RuneError || !unicode.IsUpper(r1) {\n\t\tif f.PkgPath != \"\" && !f.Anonymous { // unexported, not embedded\n\t\t\tcontinue\n\t\t}\n\t\tstag := x.structTag(f.Tag)\n\t\tif stag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\t\tvar si *structFieldInfo\n\t\t// if anonymous and no struct tag (or it's blank),\n\t\t// and a struct (or pointer to struct), inline it.\n\t\tif f.Anonymous && fkind != reflect.Interface {\n\t\t\tdoInline := stag == \"\"\n\t\t\tif !doInline {\n\t\t\t\tsi = parseStructFieldInfo(\"\", stag)\n\t\t\t\tdoInline = si.encName == \"\"\n\t\t\t\t// doInline = si.isZero()\n\t\t\t}\n\t\t\tif doInline {\n\t\t\t\tft := f.Type\n\t\t\t\tfor ft.Kind() == reflect.Ptr {\n\t\t\t\t\tft = ft.Elem()\n\t\t\t\t}\n\t\t\t\tif ft.Kind() == reflect.Struct {\n\t\t\t\t\t// if etypes contains this, don't call rget again (as fields are already seen here)\n\t\t\t\t\tftid := reflect.ValueOf(ft).Pointer()\n\t\t\t\t\t// We cannot recurse forever, but we need to track other field depths.\n\t\t\t\t\t// So - we break if we see a type twice (not the first time).\n\t\t\t\t\t// This should be sufficient to handle an embedded type that refers to its\n\t\t\t\t\t// owning type, which then refers to its embedded type.\n\t\t\t\t\tprocessIt := true\n\t\t\t\t\tnumk := 0\n\t\t\t\t\tfor _, k := range pv.etypes {\n\t\t\t\t\t\tif k == ftid {\n\t\t\t\t\t\t\tnumk++\n\t\t\t\t\t\t\tif numk == rgetMaxRecursion {\n\t\t\t\t\t\t\t\tprocessIt = false\n\t\t\t\t\t\t\t\tbreak\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\tif processIt {\n\t\t\t\t\t\tpv.etypes = append(pv.etypes, ftid)\n\t\t\t\t\t\tindexstack2 := make([]int, len(indexstack)+1)\n\t\t\t\t\t\tcopy(indexstack2, indexstack)\n\t\t\t\t\t\tindexstack2[len(indexstack)] = j\n\t\t\t\t\t\t// indexstack2 := append(append(make([]int, 0, len(indexstack)+4), indexstack...), j)\n\t\t\t\t\t\tx.rget(ft, ftid, omitEmpty, indexstack2, pv)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// after the anonymous dance: if an unexported field, skip\n\t\tif f.PkgPath != \"\" { // unexported\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.Name == \"\" {\n\t\t\tpanic(noFieldNameToStructFieldInfoErr)\n\t\t}\n\n\t\tpv.fNames = append(pv.fNames, f.Name)\n\n\t\tif si == nil {\n\t\t\tsi = parseStructFieldInfo(f.Name, stag)\n\t\t} else if si.encName == \"\" {\n\t\t\tsi.encName = f.Name\n\t\t}\n\t\tsi.fieldName = f.Name\n\n\t\tpv.encNames = append(pv.encNames, si.encName)\n\n\t\t// si.ikind = int(f.Type.Kind())\n\t\tif len(indexstack) == 0 {\n\t\t\tsi.i = int16(j)\n\t\t} else {\n\t\t\tsi.i = -1\n\t\t\tsi.is = make([]int, len(indexstack)+1)\n\t\t\tcopy(si.is, indexstack)\n\t\t\tsi.is[len(indexstack)] = j\n\t\t\t// si.is = append(append(make([]int, 0, len(indexstack)+4), indexstack...), j)\n\t\t}\n\n\t\tif omitEmpty {\n\t\t\tsi.omitEmpty = true\n\t\t}\n\t\tpv.sfis = append(pv.sfis, si)\n\t}\n}\n\n// resolves the struct field info got from a call to rget.\n// Returns a trimmed, unsorted and sorted []*structFieldInfo.\nfunc rgetResolveSFI(x []*structFieldInfo, pv []sfiIdx) (y, z []*structFieldInfo) {\n\tvar n int\n\tfor i, v := range x {\n\t\txn := v.encName //TODO: fieldName or encName? use encName for now.\n\t\tvar found bool\n\t\tfor j, k := range pv {\n\t\t\tif k.name == xn {\n\t\t\t\t// one of them must be reset to nil, and the index updated appropriately to the other one\n\t\t\t\tif len(v.is) == len(x[k.index].is) {\n\t\t\t\t} else if len(v.is) < len(x[k.index].is) {\n\t\t\t\t\tpv[j].index = i\n\t\t\t\t\tif x[k.index] != nil {\n\t\t\t\t\t\tx[k.index] = nil\n\t\t\t\t\t\tn++\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif x[i] != nil {\n\t\t\t\t\t\tx[i] = nil\n\t\t\t\t\t\tn++\n\t\t\t\t\t}\n\t\t\t\t}\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\tpv = append(pv, sfiIdx{xn, i})\n\t\t}\n\t}\n\n\t// remove all the nils\n\ty = make([]*structFieldInfo, len(x)-n)\n\tn = 0\n\tfor _, v := range x {\n\t\tif v == nil {\n\t\t\tcontinue\n\t\t}\n\t\ty[n] = v\n\t\tn++\n\t}\n\n\tz = make([]*structFieldInfo, len(y))\n\tcopy(z, y)\n\tsort.Sort(sfiSortedByEncName(z))\n\treturn\n}\n\nfunc panicToErr(err *error) {\n\tif recoverPanicToErr {\n\t\tif x := recover(); x != nil {\n\t\t\t//debug.PrintStack()\n\t\t\tpanicValToErr(x, err)\n\t\t}\n\t}\n}\n\n// func doPanic(tag string, format string, params ...interface{}) {\n// \tparams2 := make([]interface{}, len(params)+1)\n// \tparams2[0] = tag\n// \tcopy(params2[1:], params)\n// \tpanic(fmt.Errorf(\"%s: \"+format, params2...))\n// }\n\nfunc isImmutableKind(k reflect.Kind) (v bool) {\n\treturn false ||\n\t\tk == reflect.Int ||\n\t\tk == reflect.Int8 ||\n\t\tk == reflect.Int16 ||\n\t\tk == reflect.Int32 ||\n\t\tk == reflect.Int64 ||\n\t\tk == reflect.Uint ||\n\t\tk == reflect.Uint8 ||\n\t\tk == reflect.Uint16 ||\n\t\tk == reflect.Uint32 ||\n\t\tk == reflect.Uint64 ||\n\t\tk == reflect.Uintptr ||\n\t\tk == reflect.Float32 ||\n\t\tk == reflect.Float64 ||\n\t\tk == reflect.Bool ||\n\t\tk == reflect.String\n}\n\n// these functions must be inlinable, and not call anybody\ntype checkOverflow struct{}\n\nfunc (_ checkOverflow) Float32(f float64) (overflow bool) {\n\tif f < 0 {\n\t\tf = -f\n\t}\n\treturn math.MaxFloat32 < f && f <= math.MaxFloat64\n}\n\nfunc (_ checkOverflow) Uint(v uint64, bitsize uint8) (overflow bool) {\n\tif bitsize == 0 || bitsize >= 64 || v == 0 {\n\t\treturn\n\t}\n\tif trunc := (v << (64 - bitsize)) >> (64 - bitsize); v != trunc {\n\t\toverflow = true\n\t}\n\treturn\n}\n\nfunc (_ checkOverflow) Int(v int64, bitsize uint8) (overflow bool) {\n\tif bitsize == 0 || bitsize >= 64 || v == 0 {\n\t\treturn\n\t}\n\tif trunc := (v << (64 - bitsize)) >> (64 - bitsize); v != trunc {\n\t\toverflow = true\n\t}\n\treturn\n}\n\nfunc (_ checkOverflow) SignedInt(v uint64) (i int64, overflow bool) {\n\t//e.g. -127 to 128 for int8\n\tpos := (v >> 63) == 0\n\tui2 := v & 0x7fffffffffffffff\n\tif pos {\n\t\tif ui2 > math.MaxInt64 {\n\t\t\toverflow = true\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tif ui2 > math.MaxInt64-1 {\n\t\t\toverflow = true\n\t\t\treturn\n\t\t}\n\t}\n\ti = int64(v)\n\treturn\n}\n\n// ------------------ SORT -----------------\n\nfunc isNaN(f float64) bool { return f != f }\n\n// -----------------------\n\ntype intSlice []int64\ntype uintSlice []uint64\ntype floatSlice []float64\ntype boolSlice []bool\ntype stringSlice []string\ntype bytesSlice [][]byte\n\nfunc (p intSlice) Len() int           { return len(p) }\nfunc (p intSlice) Less(i, j int) bool { return p[i] < p[j] }\nfunc (p intSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p uintSlice) Len() int           { return len(p) }\nfunc (p uintSlice) Less(i, j int) bool { return p[i] < p[j] }\nfunc (p uintSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p floatSlice) Len() int { return len(p) }\nfunc (p floatSlice) Less(i, j int) bool {\n\treturn p[i] < p[j] || isNaN(p[i]) && !isNaN(p[j])\n}\nfunc (p floatSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }\n\nfunc (p stringSlice) Len() int           { return len(p) }\nfunc (p stringSlice) Less(i, j int) bool { return p[i] < p[j] }\nfunc (p stringSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p bytesSlice) Len() int           { return len(p) }\nfunc (p bytesSlice) Less(i, j int) bool { return bytes.Compare(p[i], p[j]) == -1 }\nfunc (p bytesSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p boolSlice) Len() int           { return len(p) }\nfunc (p boolSlice) Less(i, j int) bool { return !p[i] && p[j] }\nfunc (p boolSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\n// ---------------------\n\ntype intRv struct {\n\tv int64\n\tr reflect.Value\n}\ntype intRvSlice []intRv\ntype uintRv struct {\n\tv uint64\n\tr reflect.Value\n}\ntype uintRvSlice []uintRv\ntype floatRv struct {\n\tv float64\n\tr reflect.Value\n}\ntype floatRvSlice []floatRv\ntype boolRv struct {\n\tv bool\n\tr reflect.Value\n}\ntype boolRvSlice []boolRv\ntype stringRv struct {\n\tv string\n\tr reflect.Value\n}\ntype stringRvSlice []stringRv\ntype bytesRv struct {\n\tv []byte\n\tr reflect.Value\n}\ntype bytesRvSlice []bytesRv\n\nfunc (p intRvSlice) Len() int           { return len(p) }\nfunc (p intRvSlice) Less(i, j int) bool { return p[i].v < p[j].v }\nfunc (p intRvSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p uintRvSlice) Len() int           { return len(p) }\nfunc (p uintRvSlice) Less(i, j int) bool { return p[i].v < p[j].v }\nfunc (p uintRvSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p floatRvSlice) Len() int { return len(p) }\nfunc (p floatRvSlice) Less(i, j int) bool {\n\treturn p[i].v < p[j].v || isNaN(p[i].v) && !isNaN(p[j].v)\n}\nfunc (p floatRvSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }\n\nfunc (p stringRvSlice) Len() int           { return len(p) }\nfunc (p stringRvSlice) Less(i, j int) bool { return p[i].v < p[j].v }\nfunc (p stringRvSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p bytesRvSlice) Len() int           { return len(p) }\nfunc (p bytesRvSlice) Less(i, j int) bool { return bytes.Compare(p[i].v, p[j].v) == -1 }\nfunc (p bytesRvSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\nfunc (p boolRvSlice) Len() int           { return len(p) }\nfunc (p boolRvSlice) Less(i, j int) bool { return !p[i].v && p[j].v }\nfunc (p boolRvSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\n// -----------------\n\ntype bytesI struct {\n\tv []byte\n\ti interface{}\n}\n\ntype bytesISlice []bytesI\n\nfunc (p bytesISlice) Len() int           { return len(p) }\nfunc (p bytesISlice) Less(i, j int) bool { return bytes.Compare(p[i].v, p[j].v) == -1 }\nfunc (p bytesISlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\n// -----------------\n\ntype set []uintptr\n\nfunc (s *set) add(v uintptr) (exists bool) {\n\t// e.ci is always nil, or len >= 1\n\t// defer func() { fmt.Printf(\"$$$$$$$$$$$ cirRef Add: %v, exists: %v\\n\", v, exists) }()\n\tx := *s\n\tif x == nil {\n\t\tx = make([]uintptr, 1, 8)\n\t\tx[0] = v\n\t\t*s = x\n\t\treturn\n\t}\n\t// typically, length will be 1. make this perform.\n\tif len(x) == 1 {\n\t\tif j := x[0]; j == 0 {\n\t\t\tx[0] = v\n\t\t} else if j == v {\n\t\t\texists = true\n\t\t} else {\n\t\t\tx = append(x, v)\n\t\t\t*s = x\n\t\t}\n\t\treturn\n\t}\n\t// check if it exists\n\tfor _, j := range x {\n\t\tif j == v {\n\t\t\texists = true\n\t\t\treturn\n\t\t}\n\t}\n\t// try to replace a \"deleted\" slot\n\tfor i, j := range x {\n\t\tif j == 0 {\n\t\t\tx[i] = v\n\t\t\treturn\n\t\t}\n\t}\n\t// if unable to replace deleted slot, just append it.\n\tx = append(x, v)\n\t*s = x\n\treturn\n}\n\nfunc (s *set) remove(v uintptr) (exists bool) {\n\t// defer func() { fmt.Printf(\"$$$$$$$$$$$ cirRef Rm: %v, exists: %v\\n\", v, exists) }()\n\tx := *s\n\tif len(x) == 0 {\n\t\treturn\n\t}\n\tif len(x) == 1 {\n\t\tif x[0] == v {\n\t\t\tx[0] = 0\n\t\t}\n\t\treturn\n\t}\n\tfor i, j := range x {\n\t\tif j == v {\n\t\t\texists = true\n\t\t\tx[i] = 0 // set it to 0, as way to delete it.\n\t\t\t// copy(x[i:], x[i+1:])\n\t\t\t// x = x[:len(x)-1]\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/helper_internal.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\n// All non-std package dependencies live in this file,\n// so porting to different environment is easy (just update functions).\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n)\n\nfunc panicValToErr(panicVal interface{}, err *error) {\n\tif panicVal == nil {\n\t\treturn\n\t}\n\t// case nil\n\tswitch xerr := panicVal.(type) {\n\tcase error:\n\t\t*err = xerr\n\tcase string:\n\t\t*err = errors.New(xerr)\n\tdefault:\n\t\t*err = fmt.Errorf(\"%v\", panicVal)\n\t}\n\treturn\n}\n\nfunc hIsEmptyValue(v reflect.Value, deref, checkStruct bool) bool {\n\tswitch v.Kind() {\n\tcase reflect.Invalid:\n\t\treturn true\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\tif deref {\n\t\t\tif v.IsNil() {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn hIsEmptyValue(v.Elem(), deref, checkStruct)\n\t\t} else {\n\t\t\treturn v.IsNil()\n\t\t}\n\tcase reflect.Struct:\n\t\tif !checkStruct {\n\t\t\treturn false\n\t\t}\n\t\t// return true if all fields are empty. else return false.\n\t\t// we cannot use equality check, because some fields may be maps/slices/etc\n\t\t// and consequently the structs are not comparable.\n\t\t// return v.Interface() == reflect.Zero(v.Type()).Interface()\n\t\tfor i, n := 0, v.NumField(); i < n; i++ {\n\t\t\tif !hIsEmptyValue(v.Field(i), deref, checkStruct) {\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 isEmptyValue(v reflect.Value, deref, checkStruct bool) bool {\n\treturn hIsEmptyValue(v, deref, checkStruct)\n}\n\nfunc pruneSignExt(v []byte, pos bool) (n int) {\n\tif len(v) < 2 {\n\t} else if pos && v[0] == 0 {\n\t\tfor ; v[n] == 0 && n+1 < len(v) && (v[n+1]&(1<<7) == 0); n++ {\n\t\t}\n\t} else if !pos && v[0] == 0xff {\n\t\tfor ; v[n] == 0xff && n+1 < len(v) && (v[n+1]&(1<<7) != 0); n++ {\n\t\t}\n\t}\n\treturn\n}\n\nfunc implementsIntf(typ, iTyp reflect.Type) (success bool, indir int8) {\n\tif typ == nil {\n\t\treturn\n\t}\n\trt := typ\n\t// The type might be a pointer and we need to keep\n\t// dereferencing to the base type until we find an implementation.\n\tfor {\n\t\tif rt.Implements(iTyp) {\n\t\t\treturn true, indir\n\t\t}\n\t\tif p := rt; p.Kind() == reflect.Ptr {\n\t\t\tindir++\n\t\t\tif indir >= math.MaxInt8 { // insane number of indirections\n\t\t\t\treturn false, 0\n\t\t\t}\n\t\t\trt = p.Elem()\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\t// No luck yet, but if this is a base type (non-pointer), the pointer might satisfy.\n\tif typ.Kind() != reflect.Ptr {\n\t\t// Not a pointer, but does the pointer work?\n\t\tif reflect.PtrTo(typ).Implements(iTyp) {\n\t\t\treturn true, -1\n\t\t}\n\t}\n\treturn false, 0\n}\n\n// validate that this function is correct ...\n// culled from OGRE (Object-Oriented Graphics Rendering Engine)\n// function: halfToFloatI (http://stderr.org/doc/ogre-doc/api/OgreBitwise_8h-source.html)\nfunc halfFloatToFloatBits(yy uint16) (d uint32) {\n\ty := uint32(yy)\n\ts := (y >> 15) & 0x01\n\te := (y >> 10) & 0x1f\n\tm := y & 0x03ff\n\n\tif e == 0 {\n\t\tif m == 0 { // plu or minus 0\n\t\t\treturn s << 31\n\t\t} else { // Denormalized number -- renormalize it\n\t\t\tfor (m & 0x00000400) == 0 {\n\t\t\t\tm <<= 1\n\t\t\t\te -= 1\n\t\t\t}\n\t\t\te += 1\n\t\t\tconst zz uint32 = 0x0400\n\t\t\tm &= ^zz\n\t\t}\n\t} else if e == 31 {\n\t\tif m == 0 { // Inf\n\t\t\treturn (s << 31) | 0x7f800000\n\t\t} else { // NaN\n\t\t\treturn (s << 31) | 0x7f800000 | (m << 13)\n\t\t}\n\t}\n\te = e + (127 - 15)\n\tm = m << 13\n\treturn (s << 31) | (e << 23) | m\n}\n\n// GrowCap will return a new capacity for a slice, given the following:\n//   - oldCap: current capacity\n//   - unit: in-memory size of an element\n//   - num: number of elements to add\nfunc growCap(oldCap, unit, num int) (newCap int) {\n\t// appendslice logic (if cap < 1024, *2, else *1.25):\n\t//   leads to many copy calls, especially when copying bytes.\n\t//   bytes.Buffer model (2*cap + n): much better for bytes.\n\t// smarter way is to take the byte-size of the appended element(type) into account\n\n\t// maintain 3 thresholds:\n\t// t1: if cap <= t1, newcap = 2x\n\t// t2: if cap <= t2, newcap = 1.75x\n\t// t3: if cap <= t3, newcap = 1.5x\n\t//     else          newcap = 1.25x\n\t//\n\t// t1, t2, t3 >= 1024 always.\n\t// i.e. if unit size >= 16, then always do 2x or 1.25x (ie t1, t2, t3 are all same)\n\t//\n\t// With this, appending for bytes increase by:\n\t//    100% up to 4K\n\t//     75% up to 8K\n\t//     50% up to 16K\n\t//     25% beyond that\n\n\t// unit can be 0 e.g. for struct{}{}; handle that appropriately\n\tvar t1, t2, t3 int // thresholds\n\tif unit <= 1 {\n\t\tt1, t2, t3 = 4*1024, 8*1024, 16*1024\n\t} else if unit < 16 {\n\t\tt3 = 16 / unit * 1024\n\t\tt1 = t3 * 1 / 4\n\t\tt2 = t3 * 2 / 4\n\t} else {\n\t\tt1, t2, t3 = 1024, 1024, 1024\n\t}\n\n\tvar x int // temporary variable\n\n\t// x is multiplier here: one of 5, 6, 7 or 8; incr of 25%, 50%, 75% or 100% respectively\n\tif oldCap <= t1 { // [0,t1]\n\t\tx = 8\n\t} else if oldCap > t3 { // (t3,infinity]\n\t\tx = 5\n\t} else if oldCap <= t2 { // (t1,t2]\n\t\tx = 7\n\t} else { // (t2,t3]\n\t\tx = 6\n\t}\n\tnewCap = x * oldCap / 4\n\n\tif num > 0 {\n\t\tnewCap += num\n\t}\n\n\t// ensure newCap is a multiple of 64 (if it is > 64) or 16.\n\tif newCap > 64 {\n\t\tif x = newCap % 64; x != 0 {\n\t\t\tx = newCap / 64\n\t\t\tnewCap = 64 * (x + 1)\n\t\t}\n\t} else {\n\t\tif x = newCap % 16; x != 0 {\n\t\t\tx = newCap / 16\n\t\t\tnewCap = 16 * (x + 1)\n\t\t}\n\t}\n\treturn\n}\n\nfunc expandSliceValue(s reflect.Value, num int) reflect.Value {\n\tif num <= 0 {\n\t\treturn s\n\t}\n\tl0 := s.Len()\n\tl1 := l0 + num // new slice length\n\tif l1 < l0 {\n\t\tpanic(\"ExpandSlice: slice overflow\")\n\t}\n\tc0 := s.Cap()\n\tif l1 <= c0 {\n\t\treturn s.Slice(0, l1)\n\t}\n\tst := s.Type()\n\tc1 := growCap(c0, int(st.Elem().Size()), num)\n\ts2 := reflect.MakeSlice(st, l1, c1)\n\t// println(\"expandslicevalue: cap-old: \", c0, \", cap-new: \", c1, \", len-new: \", l1)\n\treflect.Copy(s2, s)\n\treturn s2\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/helper_not_unsafe.go",
    "content": "// +build !unsafe\n\n// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\n// stringView returns a view of the []byte as a string.\n// In unsafe mode, it doesn't incur allocation and copying caused by conversion.\n// In regular safe mode, it is an allocation and copy.\nfunc stringView(v []byte) string {\n\treturn string(v)\n}\n\n// bytesView returns a view of the string as a []byte.\n// In unsafe mode, it doesn't incur allocation and copying caused by conversion.\n// In regular safe mode, it is an allocation and copy.\nfunc bytesView(v string) []byte {\n\treturn []byte(v)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/helper_unsafe.go",
    "content": "// +build unsafe\n\n// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"unsafe\"\n)\n\n// This file has unsafe variants of some helper methods.\n\ntype unsafeString struct {\n\tData uintptr\n\tLen  int\n}\n\ntype unsafeSlice struct {\n\tData uintptr\n\tLen  int\n\tCap  int\n}\n\n// stringView returns a view of the []byte as a string.\n// In unsafe mode, it doesn't incur allocation and copying caused by conversion.\n// In regular safe mode, it is an allocation and copy.\nfunc stringView(v []byte) string {\n\tif len(v) == 0 {\n\t\treturn \"\"\n\t}\n\n\tbx := (*unsafeSlice)(unsafe.Pointer(&v))\n\tsx := unsafeString{bx.Data, bx.Len}\n\treturn *(*string)(unsafe.Pointer(&sx))\n}\n\n// bytesView returns a view of the string as a []byte.\n// In unsafe mode, it doesn't incur allocation and copying caused by conversion.\n// In regular safe mode, it is an allocation and copy.\nfunc bytesView(v string) []byte {\n\tif len(v) == 0 {\n\t\treturn zeroByteSlice\n\t}\n\n\tsx := (*unsafeString)(unsafe.Pointer(&v))\n\tbx := unsafeSlice{sx.Data, sx.Len, sx.Len}\n\treturn *(*[]byte)(unsafe.Pointer(&bx))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/json.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\n// By default, this json support uses base64 encoding for bytes, because you cannot\n// store and read any arbitrary string in json (only unicode).\n// However, the user can configre how to encode/decode bytes.\n//\n// This library specifically supports UTF-8 for encoding and decoding only.\n//\n// Note that the library will happily encode/decode things which are not valid\n// json e.g. a map[int64]string. We do it for consistency. With valid json,\n// we will encode and decode appropriately.\n// Users can specify their map type if necessary to force it.\n//\n// Note:\n//   - we cannot use strconv.Quote and strconv.Unquote because json quotes/unquotes differently.\n//     We implement it here.\n//   - Also, strconv.ParseXXX for floats and integers\n//     - only works on strings resulting in unnecessary allocation and []byte-string conversion.\n//     - it does a lot of redundant checks, because json numbers are simpler that what it supports.\n//   - We parse numbers (floats and integers) directly here.\n//     We only delegate parsing floats if it is a hairy float which could cause a loss of precision.\n//     In that case, we delegate to strconv.ParseFloat.\n//\n// Note:\n//   - encode does not beautify. There is no whitespace when encoding.\n//   - rpc calls which take single integer arguments or write single numeric arguments will need care.\n\n// Top-level methods of json(End|Dec)Driver (which are implementations of (en|de)cDriver\n// MUST not call one-another.\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n)\n\n//--------------------------------\n\nvar (\n\tjsonLiterals = [...]byte{'t', 'r', 'u', 'e', 'f', 'a', 'l', 's', 'e', 'n', 'u', 'l', 'l'}\n\n\tjsonFloat64Pow10 = [...]float64{\n\t\t1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,\n\t\t1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,\n\t\t1e20, 1e21, 1e22,\n\t}\n\n\tjsonUint64Pow10 = [...]uint64{\n\t\t1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,\n\t\t1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,\n\t}\n\n\t// jsonTabs and jsonSpaces are used as caches for indents\n\tjsonTabs, jsonSpaces string\n)\n\nconst (\n\t// jsonUnreadAfterDecNum controls whether we unread after decoding a number.\n\t//\n\t// instead of unreading, just update d.tok (iff it's not a whitespace char)\n\t// However, doing this means that we may HOLD onto some data which belongs to another stream.\n\t// Thus, it is safest to unread the data when done.\n\t// keep behind a constant flag for now.\n\tjsonUnreadAfterDecNum = true\n\n\t// If !jsonValidateSymbols, decoding will be faster, by skipping some checks:\n\t//   - If we see first character of null, false or true,\n\t//     do not validate subsequent characters.\n\t//   - e.g. if we see a n, assume null and skip next 3 characters,\n\t//     and do not validate they are ull.\n\t// P.S. Do not expect a significant decoding boost from this.\n\tjsonValidateSymbols = true\n\n\t// if jsonTruncateMantissa, truncate mantissa if trailing 0's.\n\t// This is important because it could allow some floats to be decoded without\n\t// deferring to strconv.ParseFloat.\n\tjsonTruncateMantissa = true\n\n\t// if mantissa >= jsonNumUintCutoff before multiplying by 10, this is an overflow\n\tjsonNumUintCutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base)\n\n\t// if mantissa >= jsonNumUintMaxVal, this is an overflow\n\tjsonNumUintMaxVal = 1<<uint64(64) - 1\n\n\t// jsonNumDigitsUint64Largest = 19\n\n\tjsonSpacesOrTabsLen = 128\n)\n\nfunc init() {\n\tvar bs [jsonSpacesOrTabsLen]byte\n\tfor i := 0; i < jsonSpacesOrTabsLen; i++ {\n\t\tbs[i] = ' '\n\t}\n\tjsonSpaces = string(bs[:])\n\n\tfor i := 0; i < jsonSpacesOrTabsLen; i++ {\n\t\tbs[i] = '\\t'\n\t}\n\tjsonTabs = string(bs[:])\n}\n\ntype jsonEncDriver struct {\n\te  *Encoder\n\tw  encWriter\n\th  *JsonHandle\n\tb  [64]byte // scratch\n\tbs []byte   // scratch\n\tse setExtWrapper\n\tds string // indent string\n\tdl uint16 // indent level\n\tdt bool   // indent using tabs\n\td  bool   // indent\n\tc  containerState\n\tnoBuiltInTypes\n}\n\n// indent is done as below:\n//   - newline and indent are added before each mapKey or arrayElem\n//   - newline and indent are added before each ending,\n//     except there was no entry (so we can have {} or [])\n\nfunc (e *jsonEncDriver) sendContainerState(c containerState) {\n\t// determine whether to output separators\n\tif c == containerMapKey {\n\t\tif e.c != containerMapStart {\n\t\t\te.w.writen1(',')\n\t\t}\n\t\tif e.d {\n\t\t\te.writeIndent()\n\t\t}\n\t} else if c == containerMapValue {\n\t\tif e.d {\n\t\t\te.w.writen2(':', ' ')\n\t\t} else {\n\t\t\te.w.writen1(':')\n\t\t}\n\t} else if c == containerMapEnd {\n\t\tif e.d {\n\t\t\te.dl--\n\t\t\tif e.c != containerMapStart {\n\t\t\t\te.writeIndent()\n\t\t\t}\n\t\t}\n\t\te.w.writen1('}')\n\t} else if c == containerArrayElem {\n\t\tif e.c != containerArrayStart {\n\t\t\te.w.writen1(',')\n\t\t}\n\t\tif e.d {\n\t\t\te.writeIndent()\n\t\t}\n\t} else if c == containerArrayEnd {\n\t\tif e.d {\n\t\t\te.dl--\n\t\t\tif e.c != containerArrayStart {\n\t\t\t\te.writeIndent()\n\t\t\t}\n\t\t}\n\t\te.w.writen1(']')\n\t}\n\te.c = c\n}\n\nfunc (e *jsonEncDriver) writeIndent() {\n\te.w.writen1('\\n')\n\tif x := len(e.ds) * int(e.dl); x <= jsonSpacesOrTabsLen {\n\t\tif e.dt {\n\t\t\te.w.writestr(jsonTabs[:x])\n\t\t} else {\n\t\t\te.w.writestr(jsonSpaces[:x])\n\t\t}\n\t} else {\n\t\tfor i := uint16(0); i < e.dl; i++ {\n\t\t\te.w.writestr(e.ds)\n\t\t}\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeNil() {\n\te.w.writeb(jsonLiterals[9:13]) // null\n}\n\nfunc (e *jsonEncDriver) EncodeBool(b bool) {\n\tif b {\n\t\te.w.writeb(jsonLiterals[0:4]) // true\n\t} else {\n\t\te.w.writeb(jsonLiterals[4:9]) // false\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeFloat32(f float32) {\n\te.encodeFloat(float64(f), 32)\n}\n\nfunc (e *jsonEncDriver) EncodeFloat64(f float64) {\n\t// e.w.writestr(strconv.FormatFloat(f, 'E', -1, 64))\n\te.encodeFloat(f, 64)\n}\n\nfunc (e *jsonEncDriver) encodeFloat(f float64, numbits int) {\n\tx := strconv.AppendFloat(e.b[:0], f, 'G', -1, numbits)\n\te.w.writeb(x)\n\tif bytes.IndexByte(x, 'E') == -1 && bytes.IndexByte(x, '.') == -1 {\n\t\te.w.writen2('.', '0')\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeInt(v int64) {\n\tif x := e.h.IntegerAsString; x == 'A' || x == 'L' && (v > 1<<53 || v < -(1<<53)) {\n\t\te.w.writen1('\"')\n\t\te.w.writeb(strconv.AppendInt(e.b[:0], v, 10))\n\t\te.w.writen1('\"')\n\t\treturn\n\t}\n\te.w.writeb(strconv.AppendInt(e.b[:0], v, 10))\n}\n\nfunc (e *jsonEncDriver) EncodeUint(v uint64) {\n\tif x := e.h.IntegerAsString; x == 'A' || x == 'L' && v > 1<<53 {\n\t\te.w.writen1('\"')\n\t\te.w.writeb(strconv.AppendUint(e.b[:0], v, 10))\n\t\te.w.writen1('\"')\n\t\treturn\n\t}\n\te.w.writeb(strconv.AppendUint(e.b[:0], v, 10))\n}\n\nfunc (e *jsonEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, en *Encoder) {\n\tif v := ext.ConvertExt(rv); v == nil {\n\t\te.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()\n\t} else {\n\t\ten.encode(v)\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeRawExt(re *RawExt, en *Encoder) {\n\t// only encodes re.Value (never re.Data)\n\tif re.Value == nil {\n\t\te.w.writeb(jsonLiterals[9:13]) // null // e.EncodeNil()\n\t} else {\n\t\ten.encode(re.Value)\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeArrayStart(length int) {\n\tif e.d {\n\t\te.dl++\n\t}\n\te.w.writen1('[')\n\te.c = containerArrayStart\n}\n\nfunc (e *jsonEncDriver) EncodeMapStart(length int) {\n\tif e.d {\n\t\te.dl++\n\t}\n\te.w.writen1('{')\n\te.c = containerMapStart\n}\n\nfunc (e *jsonEncDriver) EncodeString(c charEncoding, v string) {\n\t// e.w.writestr(strconv.Quote(v))\n\te.quoteStr(v)\n}\n\nfunc (e *jsonEncDriver) EncodeSymbol(v string) {\n\t// e.EncodeString(c_UTF8, v)\n\te.quoteStr(v)\n}\n\nfunc (e *jsonEncDriver) EncodeStringBytes(c charEncoding, v []byte) {\n\t// if encoding raw bytes and RawBytesExt is configured, use it to encode\n\tif c == c_RAW && e.se.i != nil {\n\t\te.EncodeExt(v, 0, &e.se, e.e)\n\t\treturn\n\t}\n\tif c == c_RAW {\n\t\tslen := base64.StdEncoding.EncodedLen(len(v))\n\t\tif cap(e.bs) >= slen {\n\t\t\te.bs = e.bs[:slen]\n\t\t} else {\n\t\t\te.bs = make([]byte, slen)\n\t\t}\n\t\tbase64.StdEncoding.Encode(e.bs, v)\n\t\te.w.writen1('\"')\n\t\te.w.writeb(e.bs)\n\t\te.w.writen1('\"')\n\t} else {\n\t\t// e.EncodeString(c, string(v))\n\t\te.quoteStr(stringView(v))\n\t}\n}\n\nfunc (e *jsonEncDriver) EncodeAsis(v []byte) {\n\te.w.writeb(v)\n}\n\nfunc (e *jsonEncDriver) quoteStr(s string) {\n\t// adapted from std pkg encoding/json\n\tconst hex = \"0123456789abcdef\"\n\tw := e.w\n\tw.writen1('\"')\n\tstart := 0\n\tfor i := 0; i < len(s); {\n\t\t// encode all bytes < 0x20 (except \\r, \\n).\n\t\t// also encode < > & to prevent security holes when served to some browsers.\n\t\tif b := s[i]; b < utf8.RuneSelf {\n\t\t\tif 0x20 <= b && b != '\\\\' && b != '\"' && b != '<' && b != '>' && b != '&' {\n\t\t\t\ti++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif start < i {\n\t\t\t\tw.writestr(s[start:i])\n\t\t\t}\n\t\t\tswitch b {\n\t\t\tcase '\\\\', '\"':\n\t\t\t\tw.writen2('\\\\', b)\n\t\t\tcase '\\n':\n\t\t\t\tw.writen2('\\\\', 'n')\n\t\t\tcase '\\r':\n\t\t\t\tw.writen2('\\\\', 'r')\n\t\t\tcase '\\b':\n\t\t\t\tw.writen2('\\\\', 'b')\n\t\t\tcase '\\f':\n\t\t\t\tw.writen2('\\\\', 'f')\n\t\t\tcase '\\t':\n\t\t\t\tw.writen2('\\\\', 't')\n\t\t\tcase '<', '>', '&':\n\t\t\t\tif e.h.HTMLCharsAsIs {\n\t\t\t\t\tw.writen1(b)\n\t\t\t\t} else {\n\t\t\t\t\tw.writestr(`\\u00`)\n\t\t\t\t\tw.writen2(hex[b>>4], hex[b&0xF])\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tw.writestr(`\\u00`)\n\t\t\t\tw.writen2(hex[b>>4], hex[b&0xF])\n\t\t\t}\n\t\t\ti++\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\tc, size := utf8.DecodeRuneInString(s[i:])\n\t\tif c == utf8.RuneError && size == 1 {\n\t\t\tif start < i {\n\t\t\t\tw.writestr(s[start:i])\n\t\t\t}\n\t\t\tw.writestr(`\\ufffd`)\n\t\t\ti += size\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\t// U+2028 is LINE SEPARATOR. U+2029 is PARAGRAPH SEPARATOR.\n\t\t// Both technically valid JSON, but bomb on JSONP, so fix here unconditionally.\n\t\tif c == '\\u2028' || c == '\\u2029' {\n\t\t\tif start < i {\n\t\t\t\tw.writestr(s[start:i])\n\t\t\t}\n\t\t\tw.writestr(`\\u202`)\n\t\t\tw.writen1(hex[c&0xF])\n\t\t\ti += size\n\t\t\tstart = i\n\t\t\tcontinue\n\t\t}\n\t\ti += size\n\t}\n\tif start < len(s) {\n\t\tw.writestr(s[start:])\n\t}\n\tw.writen1('\"')\n}\n\n//--------------------------------\n\ntype jsonNum struct {\n\t// bytes            []byte // may have [+-.eE0-9]\n\tmantissa         uint64 // where mantissa ends, and maybe dot begins.\n\texponent         int16  // exponent value.\n\tmanOverflow      bool\n\tneg              bool // started with -. No initial sign in the bytes above.\n\tdot              bool // has dot\n\texplicitExponent bool // explicit exponent\n}\n\nfunc (x *jsonNum) reset() {\n\tx.manOverflow = false\n\tx.neg = false\n\tx.dot = false\n\tx.explicitExponent = false\n\tx.mantissa = 0\n\tx.exponent = 0\n}\n\n// uintExp is called only if exponent > 0.\nfunc (x *jsonNum) uintExp() (n uint64, overflow bool) {\n\tn = x.mantissa\n\te := x.exponent\n\tif e >= int16(len(jsonUint64Pow10)) {\n\t\toverflow = true\n\t\treturn\n\t}\n\tn *= jsonUint64Pow10[e]\n\tif n < x.mantissa || n > jsonNumUintMaxVal {\n\t\toverflow = true\n\t\treturn\n\t}\n\treturn\n\t// for i := int16(0); i < e; i++ {\n\t// \tif n >= jsonNumUintCutoff {\n\t// \t\toverflow = true\n\t// \t\treturn\n\t// \t}\n\t// \tn *= 10\n\t// }\n\t// return\n}\n\n// these constants are only used withn floatVal.\n// They are brought out, so that floatVal can be inlined.\nconst (\n\tjsonUint64MantissaBits = 52\n\tjsonMaxExponent        = int16(len(jsonFloat64Pow10)) - 1\n)\n\nfunc (x *jsonNum) floatVal() (f float64, parseUsingStrConv bool) {\n\t// We do not want to lose precision.\n\t// Consequently, we will delegate to strconv.ParseFloat if any of the following happen:\n\t//    - There are more digits than in math.MaxUint64: 18446744073709551615 (20 digits)\n\t//      We expect up to 99.... (19 digits)\n\t//    - The mantissa cannot fit into a 52 bits of uint64\n\t//    - The exponent is beyond our scope ie beyong 22.\n\tparseUsingStrConv = x.manOverflow ||\n\t\tx.exponent > jsonMaxExponent ||\n\t\t(x.exponent < 0 && -(x.exponent) > jsonMaxExponent) ||\n\t\tx.mantissa>>jsonUint64MantissaBits != 0\n\n\tif parseUsingStrConv {\n\t\treturn\n\t}\n\n\t// all good. so handle parse here.\n\tf = float64(x.mantissa)\n\t// fmt.Printf(\".Float: uint64 value: %v, float: %v\\n\", m, f)\n\tif x.neg {\n\t\tf = -f\n\t}\n\tif x.exponent > 0 {\n\t\tf *= jsonFloat64Pow10[x.exponent]\n\t} else if x.exponent < 0 {\n\t\tf /= jsonFloat64Pow10[-x.exponent]\n\t}\n\treturn\n}\n\ntype jsonDecDriver struct {\n\tnoBuiltInTypes\n\td *Decoder\n\th *JsonHandle\n\tr decReader\n\n\tc containerState\n\t// tok is used to store the token read right after skipWhiteSpace.\n\ttok uint8\n\n\tbstr [8]byte  // scratch used for string \\UXXX parsing\n\tb    [64]byte // scratch, used for parsing strings or numbers\n\tb2   [64]byte // scratch, used only for decodeBytes (after base64)\n\tbs   []byte   // scratch. Initialized from b. Used for parsing strings or numbers.\n\n\tse setExtWrapper\n\n\tn jsonNum\n}\n\nfunc jsonIsWS(b byte) bool {\n\treturn b == ' ' || b == '\\t' || b == '\\r' || b == '\\n'\n}\n\n// // This will skip whitespace characters and return the next byte to read.\n// // The next byte determines what the value will be one of.\n// func (d *jsonDecDriver) skipWhitespace() {\n// \t// fast-path: do not enter loop. Just check first (in case no whitespace).\n// \tb := d.r.readn1()\n// \tif jsonIsWS(b) {\n// \t\tr := d.r\n// \t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n// \t\t}\n// \t}\n// \td.tok = b\n// }\n\nfunc (d *jsonDecDriver) uncacheRead() {\n\tif d.tok != 0 {\n\t\td.r.unreadn1()\n\t\td.tok = 0\n\t}\n}\n\nfunc (d *jsonDecDriver) sendContainerState(c containerState) {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tvar xc uint8 // char expected\n\tif c == containerMapKey {\n\t\tif d.c != containerMapStart {\n\t\t\txc = ','\n\t\t}\n\t} else if c == containerMapValue {\n\t\txc = ':'\n\t} else if c == containerMapEnd {\n\t\txc = '}'\n\t} else if c == containerArrayElem {\n\t\tif d.c != containerArrayStart {\n\t\t\txc = ','\n\t\t}\n\t} else if c == containerArrayEnd {\n\t\txc = ']'\n\t}\n\tif xc != 0 {\n\t\tif d.tok != xc {\n\t\t\td.d.errorf(\"json: expect char '%c' but got char '%c'\", xc, d.tok)\n\t\t}\n\t\td.tok = 0\n\t}\n\td.c = c\n}\n\nfunc (d *jsonDecDriver) CheckBreak() bool {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif d.tok == '}' || d.tok == ']' {\n\t\t// d.tok = 0 // only checking, not consuming\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *jsonDecDriver) readStrIdx(fromIdx, toIdx uint8) {\n\tbs := d.r.readx(int(toIdx - fromIdx))\n\td.tok = 0\n\tif jsonValidateSymbols {\n\t\tif !bytes.Equal(bs, jsonLiterals[fromIdx:toIdx]) {\n\t\t\td.d.errorf(\"json: expecting %s: got %s\", jsonLiterals[fromIdx:toIdx], bs)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (d *jsonDecDriver) TryDecodeAsNil() bool {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif d.tok == 'n' {\n\t\td.readStrIdx(10, 13) // ull\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *jsonDecDriver) DecodeBool() bool {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif d.tok == 'f' {\n\t\td.readStrIdx(5, 9) // alse\n\t\treturn false\n\t}\n\tif d.tok == 't' {\n\t\td.readStrIdx(1, 4) // rue\n\t\treturn true\n\t}\n\td.d.errorf(\"json: decode bool: got first char %c\", d.tok)\n\treturn false // \"unreachable\"\n}\n\nfunc (d *jsonDecDriver) ReadMapStart() int {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif d.tok != '{' {\n\t\td.d.errorf(\"json: expect char '%c' but got char '%c'\", '{', d.tok)\n\t}\n\td.tok = 0\n\td.c = containerMapStart\n\treturn -1\n}\n\nfunc (d *jsonDecDriver) ReadArrayStart() int {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif d.tok != '[' {\n\t\td.d.errorf(\"json: expect char '%c' but got char '%c'\", '[', d.tok)\n\t}\n\td.tok = 0\n\td.c = containerArrayStart\n\treturn -1\n}\n\nfunc (d *jsonDecDriver) ContainerType() (vt valueType) {\n\t// check container type by checking the first char\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tif b := d.tok; b == '{' {\n\t\treturn valueTypeMap\n\t} else if b == '[' {\n\t\treturn valueTypeArray\n\t} else if b == 'n' {\n\t\treturn valueTypeNil\n\t} else if b == '\"' {\n\t\treturn valueTypeString\n\t}\n\treturn valueTypeUnset\n\t// d.d.errorf(\"isContainerType: unsupported parameter: %v\", vt)\n\t// return false // \"unreachable\"\n}\n\nfunc (d *jsonDecDriver) decNum(storeBytes bool) {\n\t// If it is has a . or an e|E, decode as a float; else decode as an int.\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tb := d.tok\n\tvar str bool\n\tif b == '\"' {\n\t\tstr = true\n\t\tb = d.r.readn1()\n\t}\n\tif !(b == '+' || b == '-' || b == '.' || (b >= '0' && b <= '9')) {\n\t\td.d.errorf(\"json: decNum: got first char '%c'\", b)\n\t\treturn\n\t}\n\td.tok = 0\n\n\tconst cutoff = (1<<64-1)/uint64(10) + 1 // cutoff64(base)\n\tconst jsonNumUintMaxVal = 1<<uint64(64) - 1\n\n\tn := &d.n\n\tr := d.r\n\tn.reset()\n\td.bs = d.bs[:0]\n\n\tif str && storeBytes {\n\t\td.bs = append(d.bs, '\"')\n\t}\n\n\t// The format of a number is as below:\n\t// parsing:     sign? digit* dot? digit* e?  sign? digit*\n\t// states:  0   1*    2      3*   4      5*  6     7\n\t// We honor this state so we can break correctly.\n\tvar state uint8 = 0\n\tvar eNeg bool\n\tvar e int16\n\tvar eof bool\nLOOP:\n\tfor !eof {\n\t\t// fmt.Printf(\"LOOP: b: %q\\n\", b)\n\t\tswitch b {\n\t\tcase '+':\n\t\t\tswitch state {\n\t\t\tcase 0:\n\t\t\t\tstate = 2\n\t\t\t\t// do not add sign to the slice ...\n\t\t\t\tb, eof = r.readn1eof()\n\t\t\t\tcontinue\n\t\t\tcase 6: // typ = jsonNumFloat\n\t\t\t\tstate = 7\n\t\t\tdefault:\n\t\t\t\tbreak LOOP\n\t\t\t}\n\t\tcase '-':\n\t\t\tswitch state {\n\t\t\tcase 0:\n\t\t\t\tstate = 2\n\t\t\t\tn.neg = true\n\t\t\t\t// do not add sign to the slice ...\n\t\t\t\tb, eof = r.readn1eof()\n\t\t\t\tcontinue\n\t\t\tcase 6: // typ = jsonNumFloat\n\t\t\t\teNeg = true\n\t\t\t\tstate = 7\n\t\t\tdefault:\n\t\t\t\tbreak LOOP\n\t\t\t}\n\t\tcase '.':\n\t\t\tswitch state {\n\t\t\tcase 0, 2: // typ = jsonNumFloat\n\t\t\t\tstate = 4\n\t\t\t\tn.dot = true\n\t\t\tdefault:\n\t\t\t\tbreak LOOP\n\t\t\t}\n\t\tcase 'e', 'E':\n\t\t\tswitch state {\n\t\t\tcase 0, 2, 4: // typ = jsonNumFloat\n\t\t\t\tstate = 6\n\t\t\t\t// n.mantissaEndIndex = int16(len(n.bytes))\n\t\t\t\tn.explicitExponent = true\n\t\t\tdefault:\n\t\t\t\tbreak LOOP\n\t\t\t}\n\t\tcase '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tswitch state {\n\t\t\tcase 0:\n\t\t\t\tstate = 2\n\t\t\t\tfallthrough\n\t\t\tcase 2:\n\t\t\t\tfallthrough\n\t\t\tcase 4:\n\t\t\t\tif n.dot {\n\t\t\t\t\tn.exponent--\n\t\t\t\t}\n\t\t\t\tif n.mantissa >= jsonNumUintCutoff {\n\t\t\t\t\tn.manOverflow = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tv := uint64(b - '0')\n\t\t\t\tn.mantissa *= 10\n\t\t\t\tif v != 0 {\n\t\t\t\t\tn1 := n.mantissa + v\n\t\t\t\t\tif n1 < n.mantissa || n1 > jsonNumUintMaxVal {\n\t\t\t\t\t\tn.manOverflow = true // n+v overflows\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tn.mantissa = n1\n\t\t\t\t}\n\t\t\tcase 6:\n\t\t\t\tstate = 7\n\t\t\t\tfallthrough\n\t\t\tcase 7:\n\t\t\t\tif !(b == '0' && e == 0) {\n\t\t\t\t\te = e*10 + int16(b-'0')\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak LOOP\n\t\t\t}\n\t\tcase '\"':\n\t\t\tif str {\n\t\t\t\tif storeBytes {\n\t\t\t\t\td.bs = append(d.bs, '\"')\n\t\t\t\t}\n\t\t\t\tb, eof = r.readn1eof()\n\t\t\t}\n\t\t\tbreak LOOP\n\t\tdefault:\n\t\t\tbreak LOOP\n\t\t}\n\t\tif storeBytes {\n\t\t\td.bs = append(d.bs, b)\n\t\t}\n\t\tb, eof = r.readn1eof()\n\t}\n\n\tif jsonTruncateMantissa && n.mantissa != 0 {\n\t\tfor n.mantissa%10 == 0 {\n\t\t\tn.mantissa /= 10\n\t\t\tn.exponent++\n\t\t}\n\t}\n\n\tif e != 0 {\n\t\tif eNeg {\n\t\t\tn.exponent -= e\n\t\t} else {\n\t\t\tn.exponent += e\n\t\t}\n\t}\n\n\t// d.n = n\n\n\tif !eof {\n\t\tif jsonUnreadAfterDecNum {\n\t\t\tr.unreadn1()\n\t\t} else {\n\t\t\tif !jsonIsWS(b) {\n\t\t\t\td.tok = b\n\t\t\t}\n\t\t}\n\t}\n\t// fmt.Printf(\"1: n: bytes: %s, neg: %v, dot: %v, exponent: %v, mantissaEndIndex: %v\\n\",\n\t// \tn.bytes, n.neg, n.dot, n.exponent, n.mantissaEndIndex)\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeInt(bitsize uint8) (i int64) {\n\td.decNum(false)\n\tn := &d.n\n\tif n.manOverflow {\n\t\td.d.errorf(\"json: overflow integer after: %v\", n.mantissa)\n\t\treturn\n\t}\n\tvar u uint64\n\tif n.exponent == 0 {\n\t\tu = n.mantissa\n\t} else if n.exponent < 0 {\n\t\td.d.errorf(\"json: fractional integer\")\n\t\treturn\n\t} else if n.exponent > 0 {\n\t\tvar overflow bool\n\t\tif u, overflow = n.uintExp(); overflow {\n\t\t\td.d.errorf(\"json: overflow integer\")\n\t\t\treturn\n\t\t}\n\t}\n\ti = int64(u)\n\tif n.neg {\n\t\ti = -i\n\t}\n\tif chkOvf.Int(i, bitsize) {\n\t\td.d.errorf(\"json: overflow %v bits: %s\", bitsize, d.bs)\n\t\treturn\n\t}\n\t// fmt.Printf(\"DecodeInt: %v\\n\", i)\n\treturn\n}\n\n// floatVal MUST only be called after a decNum, as d.bs now contains the bytes of the number\nfunc (d *jsonDecDriver) floatVal() (f float64) {\n\tf, useStrConv := d.n.floatVal()\n\tif useStrConv {\n\t\tvar err error\n\t\tif f, err = strconv.ParseFloat(stringView(d.bs), 64); err != nil {\n\t\t\tpanic(fmt.Errorf(\"parse float: %s, %v\", d.bs, err))\n\t\t}\n\t\tif d.n.neg {\n\t\t\tf = -f\n\t\t}\n\t}\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeUint(bitsize uint8) (u uint64) {\n\td.decNum(false)\n\tn := &d.n\n\tif n.neg {\n\t\td.d.errorf(\"json: unsigned integer cannot be negative\")\n\t\treturn\n\t}\n\tif n.manOverflow {\n\t\td.d.errorf(\"json: overflow integer after: %v\", n.mantissa)\n\t\treturn\n\t}\n\tif n.exponent == 0 {\n\t\tu = n.mantissa\n\t} else if n.exponent < 0 {\n\t\td.d.errorf(\"json: fractional integer\")\n\t\treturn\n\t} else if n.exponent > 0 {\n\t\tvar overflow bool\n\t\tif u, overflow = n.uintExp(); overflow {\n\t\t\td.d.errorf(\"json: overflow integer\")\n\t\t\treturn\n\t\t}\n\t}\n\tif chkOvf.Uint(u, bitsize) {\n\t\td.d.errorf(\"json: overflow %v bits: %s\", bitsize, d.bs)\n\t\treturn\n\t}\n\t// fmt.Printf(\"DecodeUint: %v\\n\", u)\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {\n\td.decNum(true)\n\tf = d.floatVal()\n\tif chkOverflow32 && chkOvf.Float32(f) {\n\t\td.d.errorf(\"json: overflow float32: %v, %s\", f, d.bs)\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {\n\tif ext == nil {\n\t\tre := rv.(*RawExt)\n\t\tre.Tag = xtag\n\t\td.d.decode(&re.Value)\n\t} else {\n\t\tvar v interface{}\n\t\td.d.decode(&v)\n\t\text.UpdateExt(rv, v)\n\t}\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {\n\t// if decoding into raw bytes, and the RawBytesExt is configured, use it to decode.\n\tif !isstring && d.se.i != nil {\n\t\tbsOut = bs\n\t\td.DecodeExt(&bsOut, 0, &d.se)\n\t\treturn\n\t}\n\td.appendStringAsBytes()\n\t// if isstring, then just return the bytes, even if it is using the scratch buffer.\n\t// the bytes will be converted to a string as needed.\n\tif isstring {\n\t\treturn d.bs\n\t}\n\t// if appendStringAsBytes returned a zero-len slice, then treat as nil.\n\t// This should only happen for null, and \"\".\n\tif len(d.bs) == 0 {\n\t\treturn nil\n\t}\n\tbs0 := d.bs\n\tslen := base64.StdEncoding.DecodedLen(len(bs0))\n\tif slen <= cap(bs) {\n\t\tbsOut = bs[:slen]\n\t} else if zerocopy && slen <= cap(d.b2) {\n\t\tbsOut = d.b2[:slen]\n\t} else {\n\t\tbsOut = make([]byte, slen)\n\t}\n\tslen2, err := base64.StdEncoding.Decode(bsOut, bs0)\n\tif err != nil {\n\t\td.d.errorf(\"json: error decoding base64 binary '%s': %v\", bs0, err)\n\t\treturn nil\n\t}\n\tif slen != slen2 {\n\t\tbsOut = bsOut[:slen2]\n\t}\n\treturn\n}\n\nfunc (d *jsonDecDriver) DecodeString() (s string) {\n\td.appendStringAsBytes()\n\t// if x := d.s.sc; x != nil && x.so && x.st == '}' { // map key\n\tif d.c == containerMapKey {\n\t\treturn d.d.string(d.bs)\n\t}\n\treturn string(d.bs)\n}\n\nfunc (d *jsonDecDriver) appendStringAsBytes() {\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\n\t// handle null as a string\n\tif d.tok == 'n' {\n\t\td.readStrIdx(10, 13) // ull\n\t\td.bs = d.bs[:0]\n\t\treturn\n\t}\n\n\tif d.tok != '\"' {\n\t\td.d.errorf(\"json: expect char '%c' but got char '%c'\", '\"', d.tok)\n\t}\n\td.tok = 0\n\n\tv := d.bs[:0]\n\tvar c uint8\n\tr := d.r\n\tfor {\n\t\tc = r.readn1()\n\t\tif c == '\"' {\n\t\t\tbreak\n\t\t} else if c == '\\\\' {\n\t\t\tc = r.readn1()\n\t\t\tswitch c {\n\t\t\tcase '\"', '\\\\', '/', '\\'':\n\t\t\t\tv = append(v, c)\n\t\t\tcase 'b':\n\t\t\t\tv = append(v, '\\b')\n\t\t\tcase 'f':\n\t\t\t\tv = append(v, '\\f')\n\t\t\tcase 'n':\n\t\t\t\tv = append(v, '\\n')\n\t\t\tcase 'r':\n\t\t\t\tv = append(v, '\\r')\n\t\t\tcase 't':\n\t\t\t\tv = append(v, '\\t')\n\t\t\tcase 'u':\n\t\t\t\trr := d.jsonU4(false)\n\t\t\t\t// fmt.Printf(\"$$$$$$$$$: is surrogate: %v\\n\", utf16.IsSurrogate(rr))\n\t\t\t\tif utf16.IsSurrogate(rr) {\n\t\t\t\t\trr = utf16.DecodeRune(rr, d.jsonU4(true))\n\t\t\t\t}\n\t\t\t\tw2 := utf8.EncodeRune(d.bstr[:], rr)\n\t\t\t\tv = append(v, d.bstr[:w2]...)\n\t\t\tdefault:\n\t\t\t\td.d.errorf(\"json: unsupported escaped value: %c\", c)\n\t\t\t}\n\t\t} else {\n\t\t\tv = append(v, c)\n\t\t}\n\t}\n\td.bs = v\n}\n\nfunc (d *jsonDecDriver) jsonU4(checkSlashU bool) rune {\n\tr := d.r\n\tif checkSlashU && !(r.readn1() == '\\\\' && r.readn1() == 'u') {\n\t\td.d.errorf(`json: unquoteStr: invalid unicode sequence. Expecting \\u`)\n\t\treturn 0\n\t}\n\t// u, _ := strconv.ParseUint(string(d.bstr[:4]), 16, 64)\n\tvar u uint32\n\tfor i := 0; i < 4; i++ {\n\t\tv := r.readn1()\n\t\tif '0' <= v && v <= '9' {\n\t\t\tv = v - '0'\n\t\t} else if 'a' <= v && v <= 'z' {\n\t\t\tv = v - 'a' + 10\n\t\t} else if 'A' <= v && v <= 'Z' {\n\t\t\tv = v - 'A' + 10\n\t\t} else {\n\t\t\td.d.errorf(`json: unquoteStr: invalid hex char in \\u unicode sequence: %q`, v)\n\t\t\treturn 0\n\t\t}\n\t\tu = u*16 + uint32(v)\n\t}\n\treturn rune(u)\n}\n\nfunc (d *jsonDecDriver) DecodeNaked() {\n\tz := &d.d.n\n\t// var decodeFurther bool\n\n\tif d.tok == 0 {\n\t\tvar b byte\n\t\tr := d.r\n\t\tfor b = r.readn1(); jsonIsWS(b); b = r.readn1() {\n\t\t}\n\t\td.tok = b\n\t}\n\tswitch d.tok {\n\tcase 'n':\n\t\td.readStrIdx(10, 13) // ull\n\t\tz.v = valueTypeNil\n\tcase 'f':\n\t\td.readStrIdx(5, 9) // alse\n\t\tz.v = valueTypeBool\n\t\tz.b = false\n\tcase 't':\n\t\td.readStrIdx(1, 4) // rue\n\t\tz.v = valueTypeBool\n\t\tz.b = true\n\tcase '{':\n\t\tz.v = valueTypeMap\n\t\t// d.tok = 0 // don't consume. kInterfaceNaked will call ReadMapStart\n\t\t// decodeFurther = true\n\tcase '[':\n\t\tz.v = valueTypeArray\n\t\t// d.tok = 0 // don't consume. kInterfaceNaked will call ReadArrayStart\n\t\t// decodeFurther = true\n\tcase '\"':\n\t\tz.v = valueTypeString\n\t\tz.s = d.DecodeString()\n\tdefault: // number\n\t\td.decNum(true)\n\t\tn := &d.n\n\t\t// if the string had a any of [.eE], then decode as float.\n\t\tswitch {\n\t\tcase n.explicitExponent, n.dot, n.exponent < 0, n.manOverflow:\n\t\t\tz.v = valueTypeFloat\n\t\t\tz.f = d.floatVal()\n\t\tcase n.exponent == 0:\n\t\t\tu := n.mantissa\n\t\t\tswitch {\n\t\t\tcase n.neg:\n\t\t\t\tz.v = valueTypeInt\n\t\t\t\tz.i = -int64(u)\n\t\t\tcase d.h.SignedInteger:\n\t\t\t\tz.v = valueTypeInt\n\t\t\t\tz.i = int64(u)\n\t\t\tdefault:\n\t\t\t\tz.v = valueTypeUint\n\t\t\t\tz.u = u\n\t\t\t}\n\t\tdefault:\n\t\t\tu, overflow := n.uintExp()\n\t\t\tswitch {\n\t\t\tcase overflow:\n\t\t\t\tz.v = valueTypeFloat\n\t\t\t\tz.f = d.floatVal()\n\t\t\tcase n.neg:\n\t\t\t\tz.v = valueTypeInt\n\t\t\t\tz.i = -int64(u)\n\t\t\tcase d.h.SignedInteger:\n\t\t\t\tz.v = valueTypeInt\n\t\t\t\tz.i = int64(u)\n\t\t\tdefault:\n\t\t\t\tz.v = valueTypeUint\n\t\t\t\tz.u = u\n\t\t\t}\n\t\t}\n\t\t// fmt.Printf(\"DecodeNaked: Number: %T, %v\\n\", v, v)\n\t}\n\t// if decodeFurther {\n\t// \td.s.sc.retryRead()\n\t// }\n\treturn\n}\n\n//----------------------\n\n// JsonHandle is a handle for JSON encoding format.\n//\n// Json is comprehensively supported:\n//    - decodes numbers into interface{} as int, uint or float64\n//    - configurable way to encode/decode []byte .\n//      by default, encodes and decodes []byte using base64 Std Encoding\n//    - UTF-8 support for encoding and decoding\n//\n// It has better performance than the json library in the standard library,\n// by leveraging the performance improvements of the codec library and\n// minimizing allocations.\n//\n// In addition, it doesn't read more bytes than necessary during a decode, which allows\n// reading multiple values from a stream containing json and non-json content.\n// For example, a user can read a json value, then a cbor value, then a msgpack value,\n// all from the same stream in sequence.\ntype JsonHandle struct {\n\ttextEncodingType\n\tBasicHandle\n\t// RawBytesExt, if configured, is used to encode and decode raw bytes in a custom way.\n\t// If not configured, raw bytes are encoded to/from base64 text.\n\tRawBytesExt InterfaceExt\n\n\t// Indent indicates how a value is encoded.\n\t//   - If positive, indent by that number of spaces.\n\t//   - If negative, indent by that number of tabs.\n\tIndent int8\n\n\t// IntegerAsString controls how integers (signed and unsigned) are encoded.\n\t//\n\t// Per the JSON Spec, JSON numbers are 64-bit floating point numbers.\n\t// Consequently, integers > 2^53 cannot be represented as a JSON number without losing precision.\n\t// This can be mitigated by configuring how to encode integers.\n\t//\n\t// IntegerAsString interpretes the following values:\n\t//   - if 'L', then encode integers > 2^53 as a json string.\n\t//   - if 'A', then encode all integers as a json string\n\t//             containing the exact integer representation as a decimal.\n\t//   - else    encode all integers as a json number (default)\n\tIntegerAsString uint8\n\n\t// HTMLCharsAsIs controls how to encode some special characters to html: < > &\n\t//\n\t// By default, we encode them as \\uXXX\n\t// to prevent security holes when served from some browsers.\n\tHTMLCharsAsIs bool\n}\n\nfunc (h *JsonHandle) SetInterfaceExt(rt reflect.Type, tag uint64, ext InterfaceExt) (err error) {\n\treturn h.SetExt(rt, tag, &setExtWrapper{i: ext})\n}\n\nfunc (h *JsonHandle) newEncDriver(e *Encoder) encDriver {\n\thd := jsonEncDriver{e: e, h: h}\n\thd.bs = hd.b[:0]\n\n\thd.reset()\n\n\treturn &hd\n}\n\nfunc (h *JsonHandle) newDecDriver(d *Decoder) decDriver {\n\t// d := jsonDecDriver{r: r.(*bytesDecReader), h: h}\n\thd := jsonDecDriver{d: d, h: h}\n\thd.bs = hd.b[:0]\n\thd.reset()\n\treturn &hd\n}\n\nfunc (e *jsonEncDriver) reset() {\n\te.w = e.e.w\n\te.se.i = e.h.RawBytesExt\n\tif e.bs != nil {\n\t\te.bs = e.bs[:0]\n\t}\n\te.d, e.dt, e.dl, e.ds = false, false, 0, \"\"\n\te.c = 0\n\tif e.h.Indent > 0 {\n\t\te.d = true\n\t\te.ds = jsonSpaces[:e.h.Indent]\n\t} else if e.h.Indent < 0 {\n\t\te.d = true\n\t\te.dt = true\n\t\te.ds = jsonTabs[:-(e.h.Indent)]\n\t}\n}\n\nfunc (d *jsonDecDriver) reset() {\n\td.r = d.d.r\n\td.se.i = d.h.RawBytesExt\n\tif d.bs != nil {\n\t\td.bs = d.bs[:0]\n\t}\n\td.c, d.tok = 0, 0\n\td.n.reset()\n}\n\nvar jsonEncodeTerminate = []byte{' '}\n\nfunc (h *JsonHandle) rpcEncodeTerminate() []byte {\n\treturn jsonEncodeTerminate\n}\n\nvar _ decDriver = (*jsonDecDriver)(nil)\nvar _ encDriver = (*jsonEncDriver)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/msgpack.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\n/*\nMSGPACK\n\nMsgpack-c implementation powers the c, c++, python, ruby, etc libraries.\nWe need to maintain compatibility with it and how it encodes integer values\nwithout caring about the type.\n\nFor compatibility with behaviour of msgpack-c reference implementation:\n  - Go intX (>0) and uintX\n       IS ENCODED AS\n    msgpack +ve fixnum, unsigned\n  - Go intX (<0)\n       IS ENCODED AS\n    msgpack -ve fixnum, signed\n\n*/\npackage codec\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/rpc\"\n\t\"reflect\"\n)\n\nconst (\n\tmpPosFixNumMin byte = 0x00\n\tmpPosFixNumMax      = 0x7f\n\tmpFixMapMin         = 0x80\n\tmpFixMapMax         = 0x8f\n\tmpFixArrayMin       = 0x90\n\tmpFixArrayMax       = 0x9f\n\tmpFixStrMin         = 0xa0\n\tmpFixStrMax         = 0xbf\n\tmpNil               = 0xc0\n\t_                   = 0xc1\n\tmpFalse             = 0xc2\n\tmpTrue              = 0xc3\n\tmpFloat             = 0xca\n\tmpDouble            = 0xcb\n\tmpUint8             = 0xcc\n\tmpUint16            = 0xcd\n\tmpUint32            = 0xce\n\tmpUint64            = 0xcf\n\tmpInt8              = 0xd0\n\tmpInt16             = 0xd1\n\tmpInt32             = 0xd2\n\tmpInt64             = 0xd3\n\n\t// extensions below\n\tmpBin8     = 0xc4\n\tmpBin16    = 0xc5\n\tmpBin32    = 0xc6\n\tmpExt8     = 0xc7\n\tmpExt16    = 0xc8\n\tmpExt32    = 0xc9\n\tmpFixExt1  = 0xd4\n\tmpFixExt2  = 0xd5\n\tmpFixExt4  = 0xd6\n\tmpFixExt8  = 0xd7\n\tmpFixExt16 = 0xd8\n\n\tmpStr8  = 0xd9 // new\n\tmpStr16 = 0xda\n\tmpStr32 = 0xdb\n\n\tmpArray16 = 0xdc\n\tmpArray32 = 0xdd\n\n\tmpMap16 = 0xde\n\tmpMap32 = 0xdf\n\n\tmpNegFixNumMin = 0xe0\n\tmpNegFixNumMax = 0xff\n)\n\n// MsgpackSpecRpcMultiArgs is a special type which signifies to the MsgpackSpecRpcCodec\n// that the backend RPC service takes multiple arguments, which have been arranged\n// in sequence in the slice.\n//\n// The Codec then passes it AS-IS to the rpc service (without wrapping it in an\n// array of 1 element).\ntype MsgpackSpecRpcMultiArgs []interface{}\n\n// A MsgpackContainer type specifies the different types of msgpackContainers.\ntype msgpackContainerType struct {\n\tfixCutoff                   int\n\tbFixMin, b8, b16, b32       byte\n\thasFixMin, has8, has8Always bool\n}\n\nvar (\n\tmsgpackContainerStr  = msgpackContainerType{32, mpFixStrMin, mpStr8, mpStr16, mpStr32, true, true, false}\n\tmsgpackContainerBin  = msgpackContainerType{0, 0, mpBin8, mpBin16, mpBin32, false, true, true}\n\tmsgpackContainerList = msgpackContainerType{16, mpFixArrayMin, 0, mpArray16, mpArray32, true, false, false}\n\tmsgpackContainerMap  = msgpackContainerType{16, mpFixMapMin, 0, mpMap16, mpMap32, true, false, false}\n)\n\n//---------------------------------------------\n\ntype msgpackEncDriver struct {\n\tnoBuiltInTypes\n\tencNoSeparator\n\te *Encoder\n\tw encWriter\n\th *MsgpackHandle\n\tx [8]byte\n}\n\nfunc (e *msgpackEncDriver) EncodeNil() {\n\te.w.writen1(mpNil)\n}\n\nfunc (e *msgpackEncDriver) EncodeInt(i int64) {\n\tif i >= 0 {\n\t\te.EncodeUint(uint64(i))\n\t} else if i >= -32 {\n\t\te.w.writen1(byte(i))\n\t} else if i >= math.MinInt8 {\n\t\te.w.writen2(mpInt8, byte(i))\n\t} else if i >= math.MinInt16 {\n\t\te.w.writen1(mpInt16)\n\t\tbigenHelper{e.x[:2], e.w}.writeUint16(uint16(i))\n\t} else if i >= math.MinInt32 {\n\t\te.w.writen1(mpInt32)\n\t\tbigenHelper{e.x[:4], e.w}.writeUint32(uint32(i))\n\t} else {\n\t\te.w.writen1(mpInt64)\n\t\tbigenHelper{e.x[:8], e.w}.writeUint64(uint64(i))\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeUint(i uint64) {\n\tif i <= math.MaxInt8 {\n\t\te.w.writen1(byte(i))\n\t} else if i <= math.MaxUint8 {\n\t\te.w.writen2(mpUint8, byte(i))\n\t} else if i <= math.MaxUint16 {\n\t\te.w.writen1(mpUint16)\n\t\tbigenHelper{e.x[:2], e.w}.writeUint16(uint16(i))\n\t} else if i <= math.MaxUint32 {\n\t\te.w.writen1(mpUint32)\n\t\tbigenHelper{e.x[:4], e.w}.writeUint32(uint32(i))\n\t} else {\n\t\te.w.writen1(mpUint64)\n\t\tbigenHelper{e.x[:8], e.w}.writeUint64(uint64(i))\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeBool(b bool) {\n\tif b {\n\t\te.w.writen1(mpTrue)\n\t} else {\n\t\te.w.writen1(mpFalse)\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeFloat32(f float32) {\n\te.w.writen1(mpFloat)\n\tbigenHelper{e.x[:4], e.w}.writeUint32(math.Float32bits(f))\n}\n\nfunc (e *msgpackEncDriver) EncodeFloat64(f float64) {\n\te.w.writen1(mpDouble)\n\tbigenHelper{e.x[:8], e.w}.writeUint64(math.Float64bits(f))\n}\n\nfunc (e *msgpackEncDriver) EncodeExt(v interface{}, xtag uint64, ext Ext, _ *Encoder) {\n\tbs := ext.WriteExt(v)\n\tif bs == nil {\n\t\te.EncodeNil()\n\t\treturn\n\t}\n\tif e.h.WriteExt {\n\t\te.encodeExtPreamble(uint8(xtag), len(bs))\n\t\te.w.writeb(bs)\n\t} else {\n\t\te.EncodeStringBytes(c_RAW, bs)\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) {\n\te.encodeExtPreamble(uint8(re.Tag), len(re.Data))\n\te.w.writeb(re.Data)\n}\n\nfunc (e *msgpackEncDriver) encodeExtPreamble(xtag byte, l int) {\n\tif l == 1 {\n\t\te.w.writen2(mpFixExt1, xtag)\n\t} else if l == 2 {\n\t\te.w.writen2(mpFixExt2, xtag)\n\t} else if l == 4 {\n\t\te.w.writen2(mpFixExt4, xtag)\n\t} else if l == 8 {\n\t\te.w.writen2(mpFixExt8, xtag)\n\t} else if l == 16 {\n\t\te.w.writen2(mpFixExt16, xtag)\n\t} else if l < 256 {\n\t\te.w.writen2(mpExt8, byte(l))\n\t\te.w.writen1(xtag)\n\t} else if l < 65536 {\n\t\te.w.writen1(mpExt16)\n\t\tbigenHelper{e.x[:2], e.w}.writeUint16(uint16(l))\n\t\te.w.writen1(xtag)\n\t} else {\n\t\te.w.writen1(mpExt32)\n\t\tbigenHelper{e.x[:4], e.w}.writeUint32(uint32(l))\n\t\te.w.writen1(xtag)\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeArrayStart(length int) {\n\te.writeContainerLen(msgpackContainerList, length)\n}\n\nfunc (e *msgpackEncDriver) EncodeMapStart(length int) {\n\te.writeContainerLen(msgpackContainerMap, length)\n}\n\nfunc (e *msgpackEncDriver) EncodeString(c charEncoding, s string) {\n\tif c == c_RAW && e.h.WriteExt {\n\t\te.writeContainerLen(msgpackContainerBin, len(s))\n\t} else {\n\t\te.writeContainerLen(msgpackContainerStr, len(s))\n\t}\n\tif len(s) > 0 {\n\t\te.w.writestr(s)\n\t}\n}\n\nfunc (e *msgpackEncDriver) EncodeSymbol(v string) {\n\te.EncodeString(c_UTF8, v)\n}\n\nfunc (e *msgpackEncDriver) EncodeStringBytes(c charEncoding, bs []byte) {\n\tif c == c_RAW && e.h.WriteExt {\n\t\te.writeContainerLen(msgpackContainerBin, len(bs))\n\t} else {\n\t\te.writeContainerLen(msgpackContainerStr, len(bs))\n\t}\n\tif len(bs) > 0 {\n\t\te.w.writeb(bs)\n\t}\n}\n\nfunc (e *msgpackEncDriver) writeContainerLen(ct msgpackContainerType, l int) {\n\tif ct.hasFixMin && l < ct.fixCutoff {\n\t\te.w.writen1(ct.bFixMin | byte(l))\n\t} else if ct.has8 && l < 256 && (ct.has8Always || e.h.WriteExt) {\n\t\te.w.writen2(ct.b8, uint8(l))\n\t} else if l < 65536 {\n\t\te.w.writen1(ct.b16)\n\t\tbigenHelper{e.x[:2], e.w}.writeUint16(uint16(l))\n\t} else {\n\t\te.w.writen1(ct.b32)\n\t\tbigenHelper{e.x[:4], e.w}.writeUint32(uint32(l))\n\t}\n}\n\n//---------------------------------------------\n\ntype msgpackDecDriver struct {\n\td      *Decoder\n\tr      decReader // *Decoder decReader decReaderT\n\th      *MsgpackHandle\n\tb      [scratchByteArrayLen]byte\n\tbd     byte\n\tbdRead bool\n\tbr     bool // bytes reader\n\tnoBuiltInTypes\n\tnoStreamingCodec\n\tdecNoSeparator\n}\n\n// Note: This returns either a primitive (int, bool, etc) for non-containers,\n// or a containerType, or a specific type denoting nil or extension.\n// It is called when a nil interface{} is passed, leaving it up to the DecDriver\n// to introspect the stream and decide how best to decode.\n// It deciphers the value by looking at the stream first.\nfunc (d *msgpackDecDriver) DecodeNaked() {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tbd := d.bd\n\tn := &d.d.n\n\tvar decodeFurther bool\n\n\tswitch bd {\n\tcase mpNil:\n\t\tn.v = valueTypeNil\n\t\td.bdRead = false\n\tcase mpFalse:\n\t\tn.v = valueTypeBool\n\t\tn.b = false\n\tcase mpTrue:\n\t\tn.v = valueTypeBool\n\t\tn.b = true\n\n\tcase mpFloat:\n\t\tn.v = valueTypeFloat\n\t\tn.f = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4))))\n\tcase mpDouble:\n\t\tn.v = valueTypeFloat\n\t\tn.f = math.Float64frombits(bigen.Uint64(d.r.readx(8)))\n\n\tcase mpUint8:\n\t\tn.v = valueTypeUint\n\t\tn.u = uint64(d.r.readn1())\n\tcase mpUint16:\n\t\tn.v = valueTypeUint\n\t\tn.u = uint64(bigen.Uint16(d.r.readx(2)))\n\tcase mpUint32:\n\t\tn.v = valueTypeUint\n\t\tn.u = uint64(bigen.Uint32(d.r.readx(4)))\n\tcase mpUint64:\n\t\tn.v = valueTypeUint\n\t\tn.u = uint64(bigen.Uint64(d.r.readx(8)))\n\n\tcase mpInt8:\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(int8(d.r.readn1()))\n\tcase mpInt16:\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(int16(bigen.Uint16(d.r.readx(2))))\n\tcase mpInt32:\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(int32(bigen.Uint32(d.r.readx(4))))\n\tcase mpInt64:\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(int64(bigen.Uint64(d.r.readx(8))))\n\n\tdefault:\n\t\tswitch {\n\t\tcase bd >= mpPosFixNumMin && bd <= mpPosFixNumMax:\n\t\t\t// positive fixnum (always signed)\n\t\t\tn.v = valueTypeInt\n\t\t\tn.i = int64(int8(bd))\n\t\tcase bd >= mpNegFixNumMin && bd <= mpNegFixNumMax:\n\t\t\t// negative fixnum\n\t\t\tn.v = valueTypeInt\n\t\t\tn.i = int64(int8(bd))\n\t\tcase bd == mpStr8, bd == mpStr16, bd == mpStr32, bd >= mpFixStrMin && bd <= mpFixStrMax:\n\t\t\tif d.h.RawToString {\n\t\t\t\tn.v = valueTypeString\n\t\t\t\tn.s = d.DecodeString()\n\t\t\t} else {\n\t\t\t\tn.v = valueTypeBytes\n\t\t\t\tn.l = d.DecodeBytes(nil, false, false)\n\t\t\t}\n\t\tcase bd == mpBin8, bd == mpBin16, bd == mpBin32:\n\t\t\tn.v = valueTypeBytes\n\t\t\tn.l = d.DecodeBytes(nil, false, false)\n\t\tcase bd == mpArray16, bd == mpArray32, bd >= mpFixArrayMin && bd <= mpFixArrayMax:\n\t\t\tn.v = valueTypeArray\n\t\t\tdecodeFurther = true\n\t\tcase bd == mpMap16, bd == mpMap32, bd >= mpFixMapMin && bd <= mpFixMapMax:\n\t\t\tn.v = valueTypeMap\n\t\t\tdecodeFurther = true\n\t\tcase bd >= mpFixExt1 && bd <= mpFixExt16, bd >= mpExt8 && bd <= mpExt32:\n\t\t\tn.v = valueTypeExt\n\t\t\tclen := d.readExtLen()\n\t\t\tn.u = uint64(d.r.readn1())\n\t\t\tn.l = d.r.readx(clen)\n\t\tdefault:\n\t\t\td.d.errorf(\"Nil-Deciphered DecodeValue: %s: hex: %x, dec: %d\", msgBadDesc, bd, bd)\n\t\t}\n\t}\n\tif !decodeFurther {\n\t\td.bdRead = false\n\t}\n\tif n.v == valueTypeUint && d.h.SignedInteger {\n\t\tn.v = valueTypeInt\n\t\tn.i = int64(n.u)\n\t}\n\treturn\n}\n\n// int can be decoded from msgpack type: intXXX or uintXXX\nfunc (d *msgpackDecDriver) DecodeInt(bitsize uint8) (i int64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tswitch d.bd {\n\tcase mpUint8:\n\t\ti = int64(uint64(d.r.readn1()))\n\tcase mpUint16:\n\t\ti = int64(uint64(bigen.Uint16(d.r.readx(2))))\n\tcase mpUint32:\n\t\ti = int64(uint64(bigen.Uint32(d.r.readx(4))))\n\tcase mpUint64:\n\t\ti = int64(bigen.Uint64(d.r.readx(8)))\n\tcase mpInt8:\n\t\ti = int64(int8(d.r.readn1()))\n\tcase mpInt16:\n\t\ti = int64(int16(bigen.Uint16(d.r.readx(2))))\n\tcase mpInt32:\n\t\ti = int64(int32(bigen.Uint32(d.r.readx(4))))\n\tcase mpInt64:\n\t\ti = int64(bigen.Uint64(d.r.readx(8)))\n\tdefault:\n\t\tswitch {\n\t\tcase d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax:\n\t\t\ti = int64(int8(d.bd))\n\t\tcase d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax:\n\t\t\ti = int64(int8(d.bd))\n\t\tdefault:\n\t\t\td.d.errorf(\"Unhandled single-byte unsigned integer value: %s: %x\", msgBadDesc, d.bd)\n\t\t\treturn\n\t\t}\n\t}\n\t// check overflow (logic adapted from std pkg reflect/value.go OverflowUint()\n\tif bitsize > 0 {\n\t\tif trunc := (i << (64 - bitsize)) >> (64 - bitsize); i != trunc {\n\t\t\td.d.errorf(\"Overflow int value: %v\", i)\n\t\t\treturn\n\t\t}\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// uint can be decoded from msgpack type: intXXX or uintXXX\nfunc (d *msgpackDecDriver) DecodeUint(bitsize uint8) (ui uint64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tswitch d.bd {\n\tcase mpUint8:\n\t\tui = uint64(d.r.readn1())\n\tcase mpUint16:\n\t\tui = uint64(bigen.Uint16(d.r.readx(2)))\n\tcase mpUint32:\n\t\tui = uint64(bigen.Uint32(d.r.readx(4)))\n\tcase mpUint64:\n\t\tui = bigen.Uint64(d.r.readx(8))\n\tcase mpInt8:\n\t\tif i := int64(int8(d.r.readn1())); i >= 0 {\n\t\t\tui = uint64(i)\n\t\t} else {\n\t\t\td.d.errorf(\"Assigning negative signed value: %v, to unsigned type\", i)\n\t\t\treturn\n\t\t}\n\tcase mpInt16:\n\t\tif i := int64(int16(bigen.Uint16(d.r.readx(2)))); i >= 0 {\n\t\t\tui = uint64(i)\n\t\t} else {\n\t\t\td.d.errorf(\"Assigning negative signed value: %v, to unsigned type\", i)\n\t\t\treturn\n\t\t}\n\tcase mpInt32:\n\t\tif i := int64(int32(bigen.Uint32(d.r.readx(4)))); i >= 0 {\n\t\t\tui = uint64(i)\n\t\t} else {\n\t\t\td.d.errorf(\"Assigning negative signed value: %v, to unsigned type\", i)\n\t\t\treturn\n\t\t}\n\tcase mpInt64:\n\t\tif i := int64(bigen.Uint64(d.r.readx(8))); i >= 0 {\n\t\t\tui = uint64(i)\n\t\t} else {\n\t\t\td.d.errorf(\"Assigning negative signed value: %v, to unsigned type\", i)\n\t\t\treturn\n\t\t}\n\tdefault:\n\t\tswitch {\n\t\tcase d.bd >= mpPosFixNumMin && d.bd <= mpPosFixNumMax:\n\t\t\tui = uint64(d.bd)\n\t\tcase d.bd >= mpNegFixNumMin && d.bd <= mpNegFixNumMax:\n\t\t\td.d.errorf(\"Assigning negative signed value: %v, to unsigned type\", int(d.bd))\n\t\t\treturn\n\t\tdefault:\n\t\t\td.d.errorf(\"Unhandled single-byte unsigned integer value: %s: %x\", msgBadDesc, d.bd)\n\t\t\treturn\n\t\t}\n\t}\n\t// check overflow (logic adapted from std pkg reflect/value.go OverflowUint()\n\tif bitsize > 0 {\n\t\tif trunc := (ui << (64 - bitsize)) >> (64 - bitsize); ui != trunc {\n\t\t\td.d.errorf(\"Overflow uint value: %v\", ui)\n\t\t\treturn\n\t\t}\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// float can either be decoded from msgpack type: float, double or intX\nfunc (d *msgpackDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == mpFloat {\n\t\tf = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4))))\n\t} else if d.bd == mpDouble {\n\t\tf = math.Float64frombits(bigen.Uint64(d.r.readx(8)))\n\t} else {\n\t\tf = float64(d.DecodeInt(0))\n\t}\n\tif chkOverflow32 && chkOvf.Float32(f) {\n\t\td.d.errorf(\"msgpack: float32 overflow: %v\", f)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// bool can be decoded from bool, fixnum 0 or 1.\nfunc (d *msgpackDecDriver) DecodeBool() (b bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == mpFalse || d.bd == 0 {\n\t\t// b = false\n\t} else if d.bd == mpTrue || d.bd == 1 {\n\t\tb = true\n\t} else {\n\t\td.d.errorf(\"Invalid single-byte value for bool: %s: %x\", msgBadDesc, d.bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *msgpackDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tvar clen int\n\t// ignore isstring. Expect that the bytes may be found from msgpackContainerStr or msgpackContainerBin\n\tif bd := d.bd; bd == mpBin8 || bd == mpBin16 || bd == mpBin32 {\n\t\tclen = d.readContainerLen(msgpackContainerBin)\n\t} else {\n\t\tclen = d.readContainerLen(msgpackContainerStr)\n\t}\n\t// println(\"DecodeBytes: clen: \", clen)\n\td.bdRead = false\n\t// bytes may be nil, so handle it. if nil, clen=-1.\n\tif clen < 0 {\n\t\treturn nil\n\t}\n\tif zerocopy {\n\t\tif d.br {\n\t\t\treturn d.r.readx(clen)\n\t\t} else if len(bs) == 0 {\n\t\t\tbs = d.b[:]\n\t\t}\n\t}\n\treturn decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)\n}\n\nfunc (d *msgpackDecDriver) DecodeString() (s string) {\n\treturn string(d.DecodeBytes(d.b[:], true, true))\n}\n\nfunc (d *msgpackDecDriver) readNextBd() {\n\td.bd = d.r.readn1()\n\td.bdRead = true\n}\n\nfunc (d *msgpackDecDriver) uncacheRead() {\n\tif d.bdRead {\n\t\td.r.unreadn1()\n\t\td.bdRead = false\n\t}\n}\n\nfunc (d *msgpackDecDriver) ContainerType() (vt valueType) {\n\tbd := d.bd\n\tif bd == mpNil {\n\t\treturn valueTypeNil\n\t} else if bd == mpBin8 || bd == mpBin16 || bd == mpBin32 ||\n\t\t(!d.h.RawToString &&\n\t\t\t(bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || (bd >= mpFixStrMin && bd <= mpFixStrMax))) {\n\t\treturn valueTypeBytes\n\t} else if d.h.RawToString &&\n\t\t(bd == mpStr8 || bd == mpStr16 || bd == mpStr32 || (bd >= mpFixStrMin && bd <= mpFixStrMax)) {\n\t\treturn valueTypeString\n\t} else if bd == mpArray16 || bd == mpArray32 || (bd >= mpFixArrayMin && bd <= mpFixArrayMax) {\n\t\treturn valueTypeArray\n\t} else if bd == mpMap16 || bd == mpMap32 || (bd >= mpFixMapMin && bd <= mpFixMapMax) {\n\t\treturn valueTypeMap\n\t} else {\n\t\t// d.d.errorf(\"isContainerType: unsupported parameter: %v\", vt)\n\t}\n\treturn valueTypeUnset\n}\n\nfunc (d *msgpackDecDriver) TryDecodeAsNil() (v bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == mpNil {\n\t\td.bdRead = false\n\t\tv = true\n\t}\n\treturn\n}\n\nfunc (d *msgpackDecDriver) readContainerLen(ct msgpackContainerType) (clen int) {\n\tbd := d.bd\n\tif bd == mpNil {\n\t\tclen = -1 // to represent nil\n\t} else if bd == ct.b8 {\n\t\tclen = int(d.r.readn1())\n\t} else if bd == ct.b16 {\n\t\tclen = int(bigen.Uint16(d.r.readx(2)))\n\t} else if bd == ct.b32 {\n\t\tclen = int(bigen.Uint32(d.r.readx(4)))\n\t} else if (ct.bFixMin & bd) == ct.bFixMin {\n\t\tclen = int(ct.bFixMin ^ bd)\n\t} else {\n\t\td.d.errorf(\"readContainerLen: %s: hex: %x, decimal: %d\", msgBadDesc, bd, bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *msgpackDecDriver) ReadMapStart() int {\n\treturn d.readContainerLen(msgpackContainerMap)\n}\n\nfunc (d *msgpackDecDriver) ReadArrayStart() int {\n\treturn d.readContainerLen(msgpackContainerList)\n}\n\nfunc (d *msgpackDecDriver) readExtLen() (clen int) {\n\tswitch d.bd {\n\tcase mpNil:\n\t\tclen = -1 // to represent nil\n\tcase mpFixExt1:\n\t\tclen = 1\n\tcase mpFixExt2:\n\t\tclen = 2\n\tcase mpFixExt4:\n\t\tclen = 4\n\tcase mpFixExt8:\n\t\tclen = 8\n\tcase mpFixExt16:\n\t\tclen = 16\n\tcase mpExt8:\n\t\tclen = int(d.r.readn1())\n\tcase mpExt16:\n\t\tclen = int(bigen.Uint16(d.r.readx(2)))\n\tcase mpExt32:\n\t\tclen = int(bigen.Uint32(d.r.readx(4)))\n\tdefault:\n\t\td.d.errorf(\"decoding ext bytes: found unexpected byte: %x\", d.bd)\n\t\treturn\n\t}\n\treturn\n}\n\nfunc (d *msgpackDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {\n\tif xtag > 0xff {\n\t\td.d.errorf(\"decodeExt: tag must be <= 0xff; got: %v\", xtag)\n\t\treturn\n\t}\n\trealxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag))\n\trealxtag = uint64(realxtag1)\n\tif ext == nil {\n\t\tre := rv.(*RawExt)\n\t\tre.Tag = realxtag\n\t\tre.Data = detachZeroCopyBytes(d.br, re.Data, xbs)\n\t} else {\n\t\text.ReadExt(rv, xbs)\n\t}\n\treturn\n}\n\nfunc (d *msgpackDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\txbd := d.bd\n\tif xbd == mpBin8 || xbd == mpBin16 || xbd == mpBin32 {\n\t\txbs = d.DecodeBytes(nil, false, true)\n\t} else if xbd == mpStr8 || xbd == mpStr16 || xbd == mpStr32 ||\n\t\t(xbd >= mpFixStrMin && xbd <= mpFixStrMax) {\n\t\txbs = d.DecodeBytes(nil, true, true)\n\t} else {\n\t\tclen := d.readExtLen()\n\t\txtag = d.r.readn1()\n\t\tif verifyTag && xtag != tag {\n\t\t\td.d.errorf(\"Wrong extension tag. Got %b. Expecting: %v\", xtag, tag)\n\t\t\treturn\n\t\t}\n\t\txbs = d.r.readx(clen)\n\t}\n\td.bdRead = false\n\treturn\n}\n\n//--------------------------------------------------\n\n//MsgpackHandle is a Handle for the Msgpack Schema-Free Encoding Format.\ntype MsgpackHandle struct {\n\tBasicHandle\n\n\t// RawToString controls how raw bytes are decoded into a nil interface{}.\n\tRawToString bool\n\n\t// WriteExt flag supports encoding configured extensions with extension tags.\n\t// It also controls whether other elements of the new spec are encoded (ie Str8).\n\t//\n\t// With WriteExt=false, configured extensions are serialized as raw bytes\n\t// and Str8 is not encoded.\n\t//\n\t// A stream can still be decoded into a typed value, provided an appropriate value\n\t// is provided, but the type cannot be inferred from the stream. If no appropriate\n\t// type is provided (e.g. decoding into a nil interface{}), you get back\n\t// a []byte or string based on the setting of RawToString.\n\tWriteExt bool\n\tbinaryEncodingType\n}\n\nfunc (h *MsgpackHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {\n\treturn h.SetExt(rt, tag, &setExtWrapper{b: ext})\n}\n\nfunc (h *MsgpackHandle) newEncDriver(e *Encoder) encDriver {\n\treturn &msgpackEncDriver{e: e, w: e.w, h: h}\n}\n\nfunc (h *MsgpackHandle) newDecDriver(d *Decoder) decDriver {\n\treturn &msgpackDecDriver{d: d, h: h, r: d.r, br: d.bytes}\n}\n\nfunc (e *msgpackEncDriver) reset() {\n\te.w = e.e.w\n}\n\nfunc (d *msgpackDecDriver) reset() {\n\td.r, d.br = d.d.r, d.d.bytes\n\td.bd, d.bdRead = 0, false\n}\n\n//--------------------------------------------------\n\ntype msgpackSpecRpcCodec struct {\n\trpcCodec\n}\n\n// /////////////// Spec RPC Codec ///////////////////\nfunc (c *msgpackSpecRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error {\n\t// WriteRequest can write to both a Go service, and other services that do\n\t// not abide by the 1 argument rule of a Go service.\n\t// We discriminate based on if the body is a MsgpackSpecRpcMultiArgs\n\tvar bodyArr []interface{}\n\tif m, ok := body.(MsgpackSpecRpcMultiArgs); ok {\n\t\tbodyArr = ([]interface{})(m)\n\t} else {\n\t\tbodyArr = []interface{}{body}\n\t}\n\tr2 := []interface{}{0, uint32(r.Seq), r.ServiceMethod, bodyArr}\n\treturn c.write(r2, nil, false, true)\n}\n\nfunc (c *msgpackSpecRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error {\n\tvar moe interface{}\n\tif r.Error != \"\" {\n\t\tmoe = r.Error\n\t}\n\tif moe != nil && body != nil {\n\t\tbody = nil\n\t}\n\tr2 := []interface{}{1, uint32(r.Seq), moe, body}\n\treturn c.write(r2, nil, false, true)\n}\n\nfunc (c *msgpackSpecRpcCodec) ReadResponseHeader(r *rpc.Response) error {\n\treturn c.parseCustomHeader(1, &r.Seq, &r.Error)\n}\n\nfunc (c *msgpackSpecRpcCodec) ReadRequestHeader(r *rpc.Request) error {\n\treturn c.parseCustomHeader(0, &r.Seq, &r.ServiceMethod)\n}\n\nfunc (c *msgpackSpecRpcCodec) ReadRequestBody(body interface{}) error {\n\tif body == nil { // read and discard\n\t\treturn c.read(nil)\n\t}\n\tbodyArr := []interface{}{body}\n\treturn c.read(&bodyArr)\n}\n\nfunc (c *msgpackSpecRpcCodec) parseCustomHeader(expectTypeByte byte, msgid *uint64, methodOrError *string) (err error) {\n\n\tif c.isClosed() {\n\t\treturn io.EOF\n\t}\n\n\t// We read the response header by hand\n\t// so that the body can be decoded on its own from the stream at a later time.\n\n\tconst fia byte = 0x94 //four item array descriptor value\n\t// Not sure why the panic of EOF is swallowed above.\n\t// if bs1 := c.dec.r.readn1(); bs1 != fia {\n\t// \terr = fmt.Errorf(\"Unexpected value for array descriptor: Expecting %v. Received %v\", fia, bs1)\n\t// \treturn\n\t// }\n\tvar b byte\n\tb, err = c.br.ReadByte()\n\tif err != nil {\n\t\treturn\n\t}\n\tif b != fia {\n\t\terr = fmt.Errorf(\"Unexpected value for array descriptor: Expecting %v. Received %v\", fia, b)\n\t\treturn\n\t}\n\n\tif err = c.read(&b); err != nil {\n\t\treturn\n\t}\n\tif b != expectTypeByte {\n\t\terr = fmt.Errorf(\"Unexpected byte descriptor in header. Expecting %v. Received %v\", expectTypeByte, b)\n\t\treturn\n\t}\n\tif err = c.read(msgid); err != nil {\n\t\treturn\n\t}\n\tif err = c.read(methodOrError); err != nil {\n\t\treturn\n\t}\n\treturn\n}\n\n//--------------------------------------------------\n\n// msgpackSpecRpc is the implementation of Rpc that uses custom communication protocol\n// as defined in the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md\ntype msgpackSpecRpc struct{}\n\n// MsgpackSpecRpc implements Rpc using the communication protocol defined in\n// the msgpack spec at https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md .\n// Its methods (ServerCodec and ClientCodec) return values that implement RpcCodecBuffered.\nvar MsgpackSpecRpc msgpackSpecRpc\n\nfunc (x msgpackSpecRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec {\n\treturn &msgpackSpecRpcCodec{newRPCCodec(conn, h)}\n}\n\nfunc (x msgpackSpecRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec {\n\treturn &msgpackSpecRpcCodec{newRPCCodec(conn, h)}\n}\n\nvar _ decDriver = (*msgpackDecDriver)(nil)\nvar _ encDriver = (*msgpackEncDriver)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/noop.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\n// NoopHandle returns a no-op handle. It basically does nothing.\n// It is only useful for benchmarking, as it gives an idea of the\n// overhead from the codec framework.\n//\n// LIBRARY USERS: *** DO NOT USE ***\nfunc NoopHandle(slen int) *noopHandle {\n\th := noopHandle{}\n\th.rand = rand.New(rand.NewSource(time.Now().UnixNano()))\n\th.B = make([][]byte, slen)\n\th.S = make([]string, slen)\n\tfor i := 0; i < len(h.S); i++ {\n\t\tb := make([]byte, i+1)\n\t\tfor j := 0; j < len(b); j++ {\n\t\t\tb[j] = 'a' + byte(i)\n\t\t}\n\t\th.B[i] = b\n\t\th.S[i] = string(b)\n\t}\n\treturn &h\n}\n\n// noopHandle does nothing.\n// It is used to simulate the overhead of the codec framework.\ntype noopHandle struct {\n\tBasicHandle\n\tbinaryEncodingType\n\tnoopDrv // noopDrv is unexported here, so we can get a copy of it when needed.\n}\n\ntype noopDrv struct {\n\td    *Decoder\n\te    *Encoder\n\ti    int\n\tS    []string\n\tB    [][]byte\n\tmks  []bool    // stack. if map (true), else if array (false)\n\tmk   bool      // top of stack. what container are we on? map or array?\n\tct   valueType // last response for IsContainerType.\n\tcb   int       // counter for ContainerType\n\trand *rand.Rand\n}\n\nfunc (h *noopDrv) r(v int) int { return h.rand.Intn(v) }\nfunc (h *noopDrv) m(v int) int { h.i++; return h.i % v }\n\nfunc (h *noopDrv) newEncDriver(e *Encoder) encDriver { h.e = e; return h }\nfunc (h *noopDrv) newDecDriver(d *Decoder) decDriver { h.d = d; return h }\n\nfunc (h *noopDrv) reset()       {}\nfunc (h *noopDrv) uncacheRead() {}\n\n// --- encDriver\n\n// stack functions (for map and array)\nfunc (h *noopDrv) start(b bool) {\n\t// println(\"start\", len(h.mks)+1)\n\th.mks = append(h.mks, b)\n\th.mk = b\n}\nfunc (h *noopDrv) end() {\n\t// println(\"end: \", len(h.mks)-1)\n\th.mks = h.mks[:len(h.mks)-1]\n\tif len(h.mks) > 0 {\n\t\th.mk = h.mks[len(h.mks)-1]\n\t} else {\n\t\th.mk = false\n\t}\n}\n\nfunc (h *noopDrv) EncodeBuiltin(rt uintptr, v interface{}) {}\nfunc (h *noopDrv) EncodeNil()                              {}\nfunc (h *noopDrv) EncodeInt(i int64)                       {}\nfunc (h *noopDrv) EncodeUint(i uint64)                     {}\nfunc (h *noopDrv) EncodeBool(b bool)                       {}\nfunc (h *noopDrv) EncodeFloat32(f float32)                 {}\nfunc (h *noopDrv) EncodeFloat64(f float64)                 {}\nfunc (h *noopDrv) EncodeRawExt(re *RawExt, e *Encoder)     {}\nfunc (h *noopDrv) EncodeArrayStart(length int)             { h.start(true) }\nfunc (h *noopDrv) EncodeMapStart(length int)               { h.start(false) }\nfunc (h *noopDrv) EncodeEnd()                              { h.end() }\n\nfunc (h *noopDrv) EncodeString(c charEncoding, v string)      {}\nfunc (h *noopDrv) EncodeSymbol(v string)                      {}\nfunc (h *noopDrv) EncodeStringBytes(c charEncoding, v []byte) {}\n\nfunc (h *noopDrv) EncodeExt(rv interface{}, xtag uint64, ext Ext, e *Encoder) {}\n\n// ---- decDriver\nfunc (h *noopDrv) initReadNext()                              {}\nfunc (h *noopDrv) CheckBreak() bool                           { return false }\nfunc (h *noopDrv) IsBuiltinType(rt uintptr) bool              { return false }\nfunc (h *noopDrv) DecodeBuiltin(rt uintptr, v interface{})    {}\nfunc (h *noopDrv) DecodeInt(bitsize uint8) (i int64)          { return int64(h.m(15)) }\nfunc (h *noopDrv) DecodeUint(bitsize uint8) (ui uint64)       { return uint64(h.m(35)) }\nfunc (h *noopDrv) DecodeFloat(chkOverflow32 bool) (f float64) { return float64(h.m(95)) }\nfunc (h *noopDrv) DecodeBool() (b bool)                       { return h.m(2) == 0 }\nfunc (h *noopDrv) DecodeString() (s string)                   { return h.S[h.m(8)] }\n\n// func (h *noopDrv) DecodeStringAsBytes(bs []byte) []byte       { return h.DecodeBytes(bs) }\n\nfunc (h *noopDrv) DecodeBytes(bs []byte, isstring, zerocopy bool) []byte { return h.B[h.m(len(h.B))] }\n\nfunc (h *noopDrv) ReadEnd() { h.end() }\n\n// toggle map/slice\nfunc (h *noopDrv) ReadMapStart() int   { h.start(true); return h.m(10) }\nfunc (h *noopDrv) ReadArrayStart() int { h.start(false); return h.m(10) }\n\nfunc (h *noopDrv) ContainerType() (vt valueType) {\n\t// return h.m(2) == 0\n\t// handle kStruct, which will bomb is it calls this and doesn't get back a map or array.\n\t// consequently, if the return value is not map or array, reset it to one of them based on h.m(7) % 2\n\t// for kstruct: at least one out of every 2 times, return one of valueTypeMap or Array (else kstruct bombs)\n\t// however, every 10th time it is called, we just return something else.\n\tvar vals = [...]valueType{valueTypeArray, valueTypeMap}\n\t//  ------------ TAKE ------------\n\t// if h.cb%2 == 0 {\n\t// \tif h.ct == valueTypeMap || h.ct == valueTypeArray {\n\t// \t} else {\n\t// \t\th.ct = vals[h.m(2)]\n\t// \t}\n\t// } else if h.cb%5 == 0 {\n\t// \th.ct = valueType(h.m(8))\n\t// } else {\n\t// \th.ct = vals[h.m(2)]\n\t// }\n\t//  ------------ TAKE ------------\n\t// if h.cb%16 == 0 {\n\t// \th.ct = valueType(h.cb % 8)\n\t// } else {\n\t// \th.ct = vals[h.cb%2]\n\t// }\n\th.ct = vals[h.cb%2]\n\th.cb++\n\treturn h.ct\n\n\t// if h.ct == valueTypeNil || h.ct == valueTypeString || h.ct == valueTypeBytes {\n\t// \treturn h.ct\n\t// }\n\t// return valueTypeUnset\n\t// TODO: may need to tweak this so it works.\n\t// if h.ct == valueTypeMap && vt == valueTypeArray || h.ct == valueTypeArray && vt == valueTypeMap {\n\t// \th.cb = !h.cb\n\t// \th.ct = vt\n\t// \treturn h.cb\n\t// }\n\t// // go in a loop and check it.\n\t// h.ct = vt\n\t// h.cb = h.m(7) == 0\n\t// return h.cb\n}\nfunc (h *noopDrv) TryDecodeAsNil() bool {\n\tif h.mk {\n\t\treturn false\n\t} else {\n\t\treturn h.m(8) == 0\n\t}\n}\nfunc (h *noopDrv) DecodeExt(rv interface{}, xtag uint64, ext Ext) uint64 {\n\treturn 0\n}\n\nfunc (h *noopDrv) DecodeNaked() {\n\t// use h.r (random) not h.m() because h.m() could cause the same value to be given.\n\tvar sk int\n\tif h.mk {\n\t\t// if mapkey, do not support values of nil OR bytes, array, map or rawext\n\t\tsk = h.r(7) + 1\n\t} else {\n\t\tsk = h.r(12)\n\t}\n\tn := &h.d.n\n\tswitch sk {\n\tcase 0:\n\t\tn.v = valueTypeNil\n\tcase 1:\n\t\tn.v, n.b = valueTypeBool, false\n\tcase 2:\n\t\tn.v, n.b = valueTypeBool, true\n\tcase 3:\n\t\tn.v, n.i = valueTypeInt, h.DecodeInt(64)\n\tcase 4:\n\t\tn.v, n.u = valueTypeUint, h.DecodeUint(64)\n\tcase 5:\n\t\tn.v, n.f = valueTypeFloat, h.DecodeFloat(true)\n\tcase 6:\n\t\tn.v, n.f = valueTypeFloat, h.DecodeFloat(false)\n\tcase 7:\n\t\tn.v, n.s = valueTypeString, h.DecodeString()\n\tcase 8:\n\t\tn.v, n.l = valueTypeBytes, h.B[h.m(len(h.B))]\n\tcase 9:\n\t\tn.v = valueTypeArray\n\tcase 10:\n\t\tn.v = valueTypeMap\n\tdefault:\n\t\tn.v = valueTypeExt\n\t\tn.u = h.DecodeUint(64)\n\t\tn.l = h.B[h.m(len(h.B))]\n\t}\n\th.ct = n.v\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/prebuild.go",
    "content": "package codec\n\n//go:generate bash prebuild.sh\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/rpc.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"net/rpc\"\n\t\"sync\"\n)\n\n// rpcEncodeTerminator allows a handler specify a []byte terminator to send after each Encode.\n//\n// Some codecs like json need to put a space after each encoded value, to serve as a\n// delimiter for things like numbers (else json codec will continue reading till EOF).\ntype rpcEncodeTerminator interface {\n\trpcEncodeTerminate() []byte\n}\n\n// Rpc provides a rpc Server or Client Codec for rpc communication.\ntype Rpc interface {\n\tServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec\n\tClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec\n}\n\n// RpcCodecBuffered allows access to the underlying bufio.Reader/Writer\n// used by the rpc connection. It accommodates use-cases where the connection\n// should be used by rpc and non-rpc functions, e.g. streaming a file after\n// sending an rpc response.\ntype RpcCodecBuffered interface {\n\tBufferedReader() *bufio.Reader\n\tBufferedWriter() *bufio.Writer\n}\n\n// -------------------------------------\n\n// rpcCodec defines the struct members and common methods.\ntype rpcCodec struct {\n\trwc io.ReadWriteCloser\n\tdec *Decoder\n\tenc *Encoder\n\tbw  *bufio.Writer\n\tbr  *bufio.Reader\n\tmu  sync.Mutex\n\th   Handle\n\n\tcls   bool\n\tclsmu sync.RWMutex\n}\n\nfunc newRPCCodec(conn io.ReadWriteCloser, h Handle) rpcCodec {\n\tbw := bufio.NewWriter(conn)\n\tbr := bufio.NewReader(conn)\n\treturn rpcCodec{\n\t\trwc: conn,\n\t\tbw:  bw,\n\t\tbr:  br,\n\t\tenc: NewEncoder(bw, h),\n\t\tdec: NewDecoder(br, h),\n\t\th:   h,\n\t}\n}\n\nfunc (c *rpcCodec) BufferedReader() *bufio.Reader {\n\treturn c.br\n}\n\nfunc (c *rpcCodec) BufferedWriter() *bufio.Writer {\n\treturn c.bw\n}\n\nfunc (c *rpcCodec) write(obj1, obj2 interface{}, writeObj2, doFlush bool) (err error) {\n\tif c.isClosed() {\n\t\treturn io.EOF\n\t}\n\tif err = c.enc.Encode(obj1); err != nil {\n\t\treturn\n\t}\n\tt, tOk := c.h.(rpcEncodeTerminator)\n\tif tOk {\n\t\tc.bw.Write(t.rpcEncodeTerminate())\n\t}\n\tif writeObj2 {\n\t\tif err = c.enc.Encode(obj2); err != nil {\n\t\t\treturn\n\t\t}\n\t\tif tOk {\n\t\t\tc.bw.Write(t.rpcEncodeTerminate())\n\t\t}\n\t}\n\tif doFlush {\n\t\treturn c.bw.Flush()\n\t}\n\treturn\n}\n\nfunc (c *rpcCodec) read(obj interface{}) (err error) {\n\tif c.isClosed() {\n\t\treturn io.EOF\n\t}\n\t//If nil is passed in, we should still attempt to read content to nowhere.\n\tif obj == nil {\n\t\tvar obj2 interface{}\n\t\treturn c.dec.Decode(&obj2)\n\t}\n\treturn c.dec.Decode(obj)\n}\n\nfunc (c *rpcCodec) isClosed() bool {\n\tc.clsmu.RLock()\n\tx := c.cls\n\tc.clsmu.RUnlock()\n\treturn x\n}\n\nfunc (c *rpcCodec) Close() error {\n\tif c.isClosed() {\n\t\treturn io.EOF\n\t}\n\tc.clsmu.Lock()\n\tc.cls = true\n\tc.clsmu.Unlock()\n\treturn c.rwc.Close()\n}\n\nfunc (c *rpcCodec) ReadResponseBody(body interface{}) error {\n\treturn c.read(body)\n}\n\n// -------------------------------------\n\ntype goRpcCodec struct {\n\trpcCodec\n}\n\nfunc (c *goRpcCodec) WriteRequest(r *rpc.Request, body interface{}) error {\n\t// Must protect for concurrent access as per API\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn c.write(r, body, true, true)\n}\n\nfunc (c *goRpcCodec) WriteResponse(r *rpc.Response, body interface{}) error {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn c.write(r, body, true, true)\n}\n\nfunc (c *goRpcCodec) ReadResponseHeader(r *rpc.Response) error {\n\treturn c.read(r)\n}\n\nfunc (c *goRpcCodec) ReadRequestHeader(r *rpc.Request) error {\n\treturn c.read(r)\n}\n\nfunc (c *goRpcCodec) ReadRequestBody(body interface{}) error {\n\treturn c.read(body)\n}\n\n// -------------------------------------\n\n// goRpc is the implementation of Rpc that uses the communication protocol\n// as defined in net/rpc package.\ntype goRpc struct{}\n\n// GoRpc implements Rpc using the communication protocol defined in net/rpc package.\n// Its methods (ServerCodec and ClientCodec) return values that implement RpcCodecBuffered.\nvar GoRpc goRpc\n\nfunc (x goRpc) ServerCodec(conn io.ReadWriteCloser, h Handle) rpc.ServerCodec {\n\treturn &goRpcCodec{newRPCCodec(conn, h)}\n}\n\nfunc (x goRpc) ClientCodec(conn io.ReadWriteCloser, h Handle) rpc.ClientCodec {\n\treturn &goRpcCodec{newRPCCodec(conn, h)}\n}\n\nvar _ RpcCodecBuffered = (*rpcCodec)(nil) // ensure *rpcCodec implements RpcCodecBuffered\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/simple.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"math\"\n\t\"reflect\"\n)\n\nconst (\n\t_               uint8 = iota\n\tsimpleVdNil           = 1\n\tsimpleVdFalse         = 2\n\tsimpleVdTrue          = 3\n\tsimpleVdFloat32       = 4\n\tsimpleVdFloat64       = 5\n\n\t// each lasts for 4 (ie n, n+1, n+2, n+3)\n\tsimpleVdPosInt = 8\n\tsimpleVdNegInt = 12\n\n\t// containers: each lasts for 4 (ie n, n+1, n+2, ... n+7)\n\tsimpleVdString    = 216\n\tsimpleVdByteArray = 224\n\tsimpleVdArray     = 232\n\tsimpleVdMap       = 240\n\tsimpleVdExt       = 248\n)\n\ntype simpleEncDriver struct {\n\tnoBuiltInTypes\n\tencNoSeparator\n\te *Encoder\n\th *SimpleHandle\n\tw encWriter\n\tb [8]byte\n}\n\nfunc (e *simpleEncDriver) EncodeNil() {\n\te.w.writen1(simpleVdNil)\n}\n\nfunc (e *simpleEncDriver) EncodeBool(b bool) {\n\tif b {\n\t\te.w.writen1(simpleVdTrue)\n\t} else {\n\t\te.w.writen1(simpleVdFalse)\n\t}\n}\n\nfunc (e *simpleEncDriver) EncodeFloat32(f float32) {\n\te.w.writen1(simpleVdFloat32)\n\tbigenHelper{e.b[:4], e.w}.writeUint32(math.Float32bits(f))\n}\n\nfunc (e *simpleEncDriver) EncodeFloat64(f float64) {\n\te.w.writen1(simpleVdFloat64)\n\tbigenHelper{e.b[:8], e.w}.writeUint64(math.Float64bits(f))\n}\n\nfunc (e *simpleEncDriver) EncodeInt(v int64) {\n\tif v < 0 {\n\t\te.encUint(uint64(-v), simpleVdNegInt)\n\t} else {\n\t\te.encUint(uint64(v), simpleVdPosInt)\n\t}\n}\n\nfunc (e *simpleEncDriver) EncodeUint(v uint64) {\n\te.encUint(v, simpleVdPosInt)\n}\n\nfunc (e *simpleEncDriver) encUint(v uint64, bd uint8) {\n\tif v <= math.MaxUint8 {\n\t\te.w.writen2(bd, uint8(v))\n\t} else if v <= math.MaxUint16 {\n\t\te.w.writen1(bd + 1)\n\t\tbigenHelper{e.b[:2], e.w}.writeUint16(uint16(v))\n\t} else if v <= math.MaxUint32 {\n\t\te.w.writen1(bd + 2)\n\t\tbigenHelper{e.b[:4], e.w}.writeUint32(uint32(v))\n\t} else { // if v <= math.MaxUint64 {\n\t\te.w.writen1(bd + 3)\n\t\tbigenHelper{e.b[:8], e.w}.writeUint64(v)\n\t}\n}\n\nfunc (e *simpleEncDriver) encLen(bd byte, length int) {\n\tif length == 0 {\n\t\te.w.writen1(bd)\n\t} else if length <= math.MaxUint8 {\n\t\te.w.writen1(bd + 1)\n\t\te.w.writen1(uint8(length))\n\t} else if length <= math.MaxUint16 {\n\t\te.w.writen1(bd + 2)\n\t\tbigenHelper{e.b[:2], e.w}.writeUint16(uint16(length))\n\t} else if int64(length) <= math.MaxUint32 {\n\t\te.w.writen1(bd + 3)\n\t\tbigenHelper{e.b[:4], e.w}.writeUint32(uint32(length))\n\t} else {\n\t\te.w.writen1(bd + 4)\n\t\tbigenHelper{e.b[:8], e.w}.writeUint64(uint64(length))\n\t}\n}\n\nfunc (e *simpleEncDriver) EncodeExt(rv interface{}, xtag uint64, ext Ext, _ *Encoder) {\n\tbs := ext.WriteExt(rv)\n\tif bs == nil {\n\t\te.EncodeNil()\n\t\treturn\n\t}\n\te.encodeExtPreamble(uint8(xtag), len(bs))\n\te.w.writeb(bs)\n}\n\nfunc (e *simpleEncDriver) EncodeRawExt(re *RawExt, _ *Encoder) {\n\te.encodeExtPreamble(uint8(re.Tag), len(re.Data))\n\te.w.writeb(re.Data)\n}\n\nfunc (e *simpleEncDriver) encodeExtPreamble(xtag byte, length int) {\n\te.encLen(simpleVdExt, length)\n\te.w.writen1(xtag)\n}\n\nfunc (e *simpleEncDriver) EncodeArrayStart(length int) {\n\te.encLen(simpleVdArray, length)\n}\n\nfunc (e *simpleEncDriver) EncodeMapStart(length int) {\n\te.encLen(simpleVdMap, length)\n}\n\nfunc (e *simpleEncDriver) EncodeString(c charEncoding, v string) {\n\te.encLen(simpleVdString, len(v))\n\te.w.writestr(v)\n}\n\nfunc (e *simpleEncDriver) EncodeSymbol(v string) {\n\te.EncodeString(c_UTF8, v)\n}\n\nfunc (e *simpleEncDriver) EncodeStringBytes(c charEncoding, v []byte) {\n\te.encLen(simpleVdByteArray, len(v))\n\te.w.writeb(v)\n}\n\n//------------------------------------\n\ntype simpleDecDriver struct {\n\td      *Decoder\n\th      *SimpleHandle\n\tr      decReader\n\tbdRead bool\n\tbd     byte\n\tbr     bool // bytes reader\n\tnoBuiltInTypes\n\tnoStreamingCodec\n\tdecNoSeparator\n\tb [scratchByteArrayLen]byte\n}\n\nfunc (d *simpleDecDriver) readNextBd() {\n\td.bd = d.r.readn1()\n\td.bdRead = true\n}\n\nfunc (d *simpleDecDriver) uncacheRead() {\n\tif d.bdRead {\n\t\td.r.unreadn1()\n\t\td.bdRead = false\n\t}\n}\n\nfunc (d *simpleDecDriver) ContainerType() (vt valueType) {\n\tif d.bd == simpleVdNil {\n\t\treturn valueTypeNil\n\t} else if d.bd == simpleVdByteArray || d.bd == simpleVdByteArray+1 ||\n\t\td.bd == simpleVdByteArray+2 || d.bd == simpleVdByteArray+3 || d.bd == simpleVdByteArray+4 {\n\t\treturn valueTypeBytes\n\t} else if d.bd == simpleVdString || d.bd == simpleVdString+1 ||\n\t\td.bd == simpleVdString+2 || d.bd == simpleVdString+3 || d.bd == simpleVdString+4 {\n\t\treturn valueTypeString\n\t} else if d.bd == simpleVdArray || d.bd == simpleVdArray+1 ||\n\t\td.bd == simpleVdArray+2 || d.bd == simpleVdArray+3 || d.bd == simpleVdArray+4 {\n\t\treturn valueTypeArray\n\t} else if d.bd == simpleVdMap || d.bd == simpleVdMap+1 ||\n\t\td.bd == simpleVdMap+2 || d.bd == simpleVdMap+3 || d.bd == simpleVdMap+4 {\n\t\treturn valueTypeMap\n\t} else {\n\t\t// d.d.errorf(\"isContainerType: unsupported parameter: %v\", vt)\n\t}\n\treturn valueTypeUnset\n}\n\nfunc (d *simpleDecDriver) TryDecodeAsNil() bool {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == simpleVdNil {\n\t\td.bdRead = false\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *simpleDecDriver) decCheckInteger() (ui uint64, neg bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tswitch d.bd {\n\tcase simpleVdPosInt:\n\t\tui = uint64(d.r.readn1())\n\tcase simpleVdPosInt + 1:\n\t\tui = uint64(bigen.Uint16(d.r.readx(2)))\n\tcase simpleVdPosInt + 2:\n\t\tui = uint64(bigen.Uint32(d.r.readx(4)))\n\tcase simpleVdPosInt + 3:\n\t\tui = uint64(bigen.Uint64(d.r.readx(8)))\n\tcase simpleVdNegInt:\n\t\tui = uint64(d.r.readn1())\n\t\tneg = true\n\tcase simpleVdNegInt + 1:\n\t\tui = uint64(bigen.Uint16(d.r.readx(2)))\n\t\tneg = true\n\tcase simpleVdNegInt + 2:\n\t\tui = uint64(bigen.Uint32(d.r.readx(4)))\n\t\tneg = true\n\tcase simpleVdNegInt + 3:\n\t\tui = uint64(bigen.Uint64(d.r.readx(8)))\n\t\tneg = true\n\tdefault:\n\t\td.d.errorf(\"decIntAny: Integer only valid from pos/neg integer1..8. Invalid descriptor: %v\", d.bd)\n\t\treturn\n\t}\n\t// don't do this check, because callers may only want the unsigned value.\n\t// if ui > math.MaxInt64 {\n\t// \td.d.errorf(\"decIntAny: Integer out of range for signed int64: %v\", ui)\n\t//\t\treturn\n\t// }\n\treturn\n}\n\nfunc (d *simpleDecDriver) DecodeInt(bitsize uint8) (i int64) {\n\tui, neg := d.decCheckInteger()\n\ti, overflow := chkOvf.SignedInt(ui)\n\tif overflow {\n\t\td.d.errorf(\"simple: overflow converting %v to signed integer\", ui)\n\t\treturn\n\t}\n\tif neg {\n\t\ti = -i\n\t}\n\tif chkOvf.Int(i, bitsize) {\n\t\td.d.errorf(\"simple: overflow integer: %v\", i)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *simpleDecDriver) DecodeUint(bitsize uint8) (ui uint64) {\n\tui, neg := d.decCheckInteger()\n\tif neg {\n\t\td.d.errorf(\"Assigning negative signed value to unsigned type\")\n\t\treturn\n\t}\n\tif chkOvf.Uint(ui, bitsize) {\n\t\td.d.errorf(\"simple: overflow integer: %v\", ui)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *simpleDecDriver) DecodeFloat(chkOverflow32 bool) (f float64) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == simpleVdFloat32 {\n\t\tf = float64(math.Float32frombits(bigen.Uint32(d.r.readx(4))))\n\t} else if d.bd == simpleVdFloat64 {\n\t\tf = math.Float64frombits(bigen.Uint64(d.r.readx(8)))\n\t} else {\n\t\tif d.bd >= simpleVdPosInt && d.bd <= simpleVdNegInt+3 {\n\t\t\tf = float64(d.DecodeInt(64))\n\t\t} else {\n\t\t\td.d.errorf(\"Float only valid from float32/64: Invalid descriptor: %v\", d.bd)\n\t\t\treturn\n\t\t}\n\t}\n\tif chkOverflow32 && chkOvf.Float32(f) {\n\t\td.d.errorf(\"msgpack: float32 overflow: %v\", f)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\n// bool can be decoded from bool only (single byte).\nfunc (d *simpleDecDriver) DecodeBool() (b bool) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == simpleVdTrue {\n\t\tb = true\n\t} else if d.bd == simpleVdFalse {\n\t} else {\n\t\td.d.errorf(\"Invalid single-byte value for bool: %s: %x\", msgBadDesc, d.bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *simpleDecDriver) ReadMapStart() (length int) {\n\td.bdRead = false\n\treturn d.decLen()\n}\n\nfunc (d *simpleDecDriver) ReadArrayStart() (length int) {\n\td.bdRead = false\n\treturn d.decLen()\n}\n\nfunc (d *simpleDecDriver) decLen() int {\n\tswitch d.bd % 8 {\n\tcase 0:\n\t\treturn 0\n\tcase 1:\n\t\treturn int(d.r.readn1())\n\tcase 2:\n\t\treturn int(bigen.Uint16(d.r.readx(2)))\n\tcase 3:\n\t\tui := uint64(bigen.Uint32(d.r.readx(4)))\n\t\tif chkOvf.Uint(ui, intBitsize) {\n\t\t\td.d.errorf(\"simple: overflow integer: %v\", ui)\n\t\t\treturn 0\n\t\t}\n\t\treturn int(ui)\n\tcase 4:\n\t\tui := bigen.Uint64(d.r.readx(8))\n\t\tif chkOvf.Uint(ui, intBitsize) {\n\t\t\td.d.errorf(\"simple: overflow integer: %v\", ui)\n\t\t\treturn 0\n\t\t}\n\t\treturn int(ui)\n\t}\n\td.d.errorf(\"decLen: Cannot read length: bd%%8 must be in range 0..4. Got: %d\", d.bd%8)\n\treturn -1\n}\n\nfunc (d *simpleDecDriver) DecodeString() (s string) {\n\treturn string(d.DecodeBytes(d.b[:], true, true))\n}\n\nfunc (d *simpleDecDriver) DecodeBytes(bs []byte, isstring, zerocopy bool) (bsOut []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tif d.bd == simpleVdNil {\n\t\td.bdRead = false\n\t\treturn\n\t}\n\tclen := d.decLen()\n\td.bdRead = false\n\tif zerocopy {\n\t\tif d.br {\n\t\t\treturn d.r.readx(clen)\n\t\t} else if len(bs) == 0 {\n\t\t\tbs = d.b[:]\n\t\t}\n\t}\n\treturn decByteSlice(d.r, clen, d.d.h.MaxInitLen, bs)\n}\n\nfunc (d *simpleDecDriver) DecodeExt(rv interface{}, xtag uint64, ext Ext) (realxtag uint64) {\n\tif xtag > 0xff {\n\t\td.d.errorf(\"decodeExt: tag must be <= 0xff; got: %v\", xtag)\n\t\treturn\n\t}\n\trealxtag1, xbs := d.decodeExtV(ext != nil, uint8(xtag))\n\trealxtag = uint64(realxtag1)\n\tif ext == nil {\n\t\tre := rv.(*RawExt)\n\t\tre.Tag = realxtag\n\t\tre.Data = detachZeroCopyBytes(d.br, re.Data, xbs)\n\t} else {\n\t\text.ReadExt(rv, xbs)\n\t}\n\treturn\n}\n\nfunc (d *simpleDecDriver) decodeExtV(verifyTag bool, tag byte) (xtag byte, xbs []byte) {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\tswitch d.bd {\n\tcase simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4:\n\t\tl := d.decLen()\n\t\txtag = d.r.readn1()\n\t\tif verifyTag && xtag != tag {\n\t\t\td.d.errorf(\"Wrong extension tag. Got %b. Expecting: %v\", xtag, tag)\n\t\t\treturn\n\t\t}\n\t\txbs = d.r.readx(l)\n\tcase simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4:\n\t\txbs = d.DecodeBytes(nil, false, true)\n\tdefault:\n\t\td.d.errorf(\"Invalid d.bd for extensions (Expecting extensions or byte array). Got: 0x%x\", d.bd)\n\t\treturn\n\t}\n\td.bdRead = false\n\treturn\n}\n\nfunc (d *simpleDecDriver) DecodeNaked() {\n\tif !d.bdRead {\n\t\td.readNextBd()\n\t}\n\n\tn := &d.d.n\n\tvar decodeFurther bool\n\n\tswitch d.bd {\n\tcase simpleVdNil:\n\t\tn.v = valueTypeNil\n\tcase simpleVdFalse:\n\t\tn.v = valueTypeBool\n\t\tn.b = false\n\tcase simpleVdTrue:\n\t\tn.v = valueTypeBool\n\t\tn.b = true\n\tcase simpleVdPosInt, simpleVdPosInt + 1, simpleVdPosInt + 2, simpleVdPosInt + 3:\n\t\tif d.h.SignedInteger {\n\t\t\tn.v = valueTypeInt\n\t\t\tn.i = d.DecodeInt(64)\n\t\t} else {\n\t\t\tn.v = valueTypeUint\n\t\t\tn.u = d.DecodeUint(64)\n\t\t}\n\tcase simpleVdNegInt, simpleVdNegInt + 1, simpleVdNegInt + 2, simpleVdNegInt + 3:\n\t\tn.v = valueTypeInt\n\t\tn.i = d.DecodeInt(64)\n\tcase simpleVdFloat32:\n\t\tn.v = valueTypeFloat\n\t\tn.f = d.DecodeFloat(true)\n\tcase simpleVdFloat64:\n\t\tn.v = valueTypeFloat\n\t\tn.f = d.DecodeFloat(false)\n\tcase simpleVdString, simpleVdString + 1, simpleVdString + 2, simpleVdString + 3, simpleVdString + 4:\n\t\tn.v = valueTypeString\n\t\tn.s = d.DecodeString()\n\tcase simpleVdByteArray, simpleVdByteArray + 1, simpleVdByteArray + 2, simpleVdByteArray + 3, simpleVdByteArray + 4:\n\t\tn.v = valueTypeBytes\n\t\tn.l = d.DecodeBytes(nil, false, false)\n\tcase simpleVdExt, simpleVdExt + 1, simpleVdExt + 2, simpleVdExt + 3, simpleVdExt + 4:\n\t\tn.v = valueTypeExt\n\t\tl := d.decLen()\n\t\tn.u = uint64(d.r.readn1())\n\t\tn.l = d.r.readx(l)\n\tcase simpleVdArray, simpleVdArray + 1, simpleVdArray + 2, simpleVdArray + 3, simpleVdArray + 4:\n\t\tn.v = valueTypeArray\n\t\tdecodeFurther = true\n\tcase simpleVdMap, simpleVdMap + 1, simpleVdMap + 2, simpleVdMap + 3, simpleVdMap + 4:\n\t\tn.v = valueTypeMap\n\t\tdecodeFurther = true\n\tdefault:\n\t\td.d.errorf(\"decodeNaked: Unrecognized d.bd: 0x%x\", d.bd)\n\t}\n\n\tif !decodeFurther {\n\t\td.bdRead = false\n\t}\n\treturn\n}\n\n//------------------------------------\n\n// SimpleHandle is a Handle for a very simple encoding format.\n//\n// simple is a simplistic codec similar to binc, but not as compact.\n//   - Encoding of a value is always preceded by the descriptor byte (bd)\n//   - True, false, nil are encoded fully in 1 byte (the descriptor)\n//   - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte).\n//     There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers.\n//   - Floats are encoded in 4 or 8 bytes (plus a descriptor byte)\n//   - Lenght of containers (strings, bytes, array, map, extensions)\n//     are encoded in 0, 1, 2, 4 or 8 bytes.\n//     Zero-length containers have no length encoded.\n//     For others, the number of bytes is given by pow(2, bd%3)\n//   - maps are encoded as [bd] [length] [[key][value]]...\n//   - arrays are encoded as [bd] [length] [value]...\n//   - extensions are encoded as [bd] [length] [tag] [byte]...\n//   - strings/bytearrays are encoded as [bd] [length] [byte]...\n//\n// The full spec will be published soon.\ntype SimpleHandle struct {\n\tBasicHandle\n\tbinaryEncodingType\n}\n\nfunc (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {\n\treturn h.SetExt(rt, tag, &setExtWrapper{b: ext})\n}\n\nfunc (h *SimpleHandle) newEncDriver(e *Encoder) encDriver {\n\treturn &simpleEncDriver{e: e, w: e.w, h: h}\n}\n\nfunc (h *SimpleHandle) newDecDriver(d *Decoder) decDriver {\n\treturn &simpleDecDriver{d: d, h: h, r: d.r, br: d.bytes}\n}\n\nfunc (e *simpleEncDriver) reset() {\n\te.w = e.e.w\n}\n\nfunc (d *simpleDecDriver) reset() {\n\td.r, d.br = d.d.r, d.d.bytes\n\td.bd, d.bdRead = 0, false\n}\n\nvar _ decDriver = (*simpleDecDriver)(nil)\nvar _ encDriver = (*simpleEncDriver)(nil)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/ugorji/go/codec/time.go",
    "content": "// Copyright (c) 2012-2015 Ugorji Nwoke. All rights reserved.\n// Use of this source code is governed by a MIT license found in the LICENSE file.\n\npackage codec\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"time\"\n)\n\nvar (\n\ttimeDigits   = [...]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}\n\ttimeExtEncFn = func(rv reflect.Value) (bs []byte, err error) {\n\t\tdefer panicToErr(&err)\n\t\tbs = timeExt{}.WriteExt(rv.Interface())\n\t\treturn\n\t}\n\ttimeExtDecFn = func(rv reflect.Value, bs []byte) (err error) {\n\t\tdefer panicToErr(&err)\n\t\ttimeExt{}.ReadExt(rv.Interface(), bs)\n\t\treturn\n\t}\n)\n\ntype timeExt struct{}\n\nfunc (x timeExt) WriteExt(v interface{}) (bs []byte) {\n\tswitch v2 := v.(type) {\n\tcase time.Time:\n\t\tbs = encodeTime(v2)\n\tcase *time.Time:\n\t\tbs = encodeTime(*v2)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported format for time conversion: expecting time.Time; got %T\", v2))\n\t}\n\treturn\n}\nfunc (x timeExt) ReadExt(v interface{}, bs []byte) {\n\ttt, err := decodeTime(bs)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\t*(v.(*time.Time)) = tt\n}\n\nfunc (x timeExt) ConvertExt(v interface{}) interface{} {\n\treturn x.WriteExt(v)\n}\nfunc (x timeExt) UpdateExt(v interface{}, src interface{}) {\n\tx.ReadExt(v, src.([]byte))\n}\n\n// EncodeTime encodes a time.Time as a []byte, including\n// information on the instant in time and UTC offset.\n//\n// Format Description\n//\n//   A timestamp is composed of 3 components:\n//\n//   - secs: signed integer representing seconds since unix epoch\n//   - nsces: unsigned integer representing fractional seconds as a\n//     nanosecond offset within secs, in the range 0 <= nsecs < 1e9\n//   - tz: signed integer representing timezone offset in minutes east of UTC,\n//     and a dst (daylight savings time) flag\n//\n//   When encoding a timestamp, the first byte is the descriptor, which\n//   defines which components are encoded and how many bytes are used to\n//   encode secs and nsecs components. *If secs/nsecs is 0 or tz is UTC, it\n//   is not encoded in the byte array explicitly*.\n//\n//       Descriptor 8 bits are of the form `A B C DDD EE`:\n//           A:   Is secs component encoded? 1 = true\n//           B:   Is nsecs component encoded? 1 = true\n//           C:   Is tz component encoded? 1 = true\n//           DDD: Number of extra bytes for secs (range 0-7).\n//                If A = 1, secs encoded in DDD+1 bytes.\n//                    If A = 0, secs is not encoded, and is assumed to be 0.\n//                    If A = 1, then we need at least 1 byte to encode secs.\n//                    DDD says the number of extra bytes beyond that 1.\n//                    E.g. if DDD=0, then secs is represented in 1 byte.\n//                         if DDD=2, then secs is represented in 3 bytes.\n//           EE:  Number of extra bytes for nsecs (range 0-3).\n//                If B = 1, nsecs encoded in EE+1 bytes (similar to secs/DDD above)\n//\n//   Following the descriptor bytes, subsequent bytes are:\n//\n//       secs component encoded in `DDD + 1` bytes (if A == 1)\n//       nsecs component encoded in `EE + 1` bytes (if B == 1)\n//       tz component encoded in 2 bytes (if C == 1)\n//\n//   secs and nsecs components are integers encoded in a BigEndian\n//   2-complement encoding format.\n//\n//   tz component is encoded as 2 bytes (16 bits). Most significant bit 15 to\n//   Least significant bit 0 are described below:\n//\n//       Timezone offset has a range of -12:00 to +14:00 (ie -720 to +840 minutes).\n//       Bit 15 = have\\_dst: set to 1 if we set the dst flag.\n//       Bit 14 = dst\\_on: set to 1 if dst is in effect at the time, or 0 if not.\n//       Bits 13..0 = timezone offset in minutes. It is a signed integer in Big Endian format.\n//\nfunc encodeTime(t time.Time) []byte {\n\t//t := rv.Interface().(time.Time)\n\ttsecs, tnsecs := t.Unix(), t.Nanosecond()\n\tvar (\n\t\tbd   byte\n\t\tbtmp [8]byte\n\t\tbs   [16]byte\n\t\ti    int = 1\n\t)\n\tl := t.Location()\n\tif l == time.UTC {\n\t\tl = nil\n\t}\n\tif tsecs != 0 {\n\t\tbd = bd | 0x80\n\t\tbigen.PutUint64(btmp[:], uint64(tsecs))\n\t\tf := pruneSignExt(btmp[:], tsecs >= 0)\n\t\tbd = bd | (byte(7-f) << 2)\n\t\tcopy(bs[i:], btmp[f:])\n\t\ti = i + (8 - f)\n\t}\n\tif tnsecs != 0 {\n\t\tbd = bd | 0x40\n\t\tbigen.PutUint32(btmp[:4], uint32(tnsecs))\n\t\tf := pruneSignExt(btmp[:4], true)\n\t\tbd = bd | byte(3-f)\n\t\tcopy(bs[i:], btmp[f:4])\n\t\ti = i + (4 - f)\n\t}\n\tif l != nil {\n\t\tbd = bd | 0x20\n\t\t// Note that Go Libs do not give access to dst flag.\n\t\t_, zoneOffset := t.Zone()\n\t\t//zoneName, zoneOffset := t.Zone()\n\t\tzoneOffset /= 60\n\t\tz := uint16(zoneOffset)\n\t\tbigen.PutUint16(btmp[:2], z)\n\t\t// clear dst flags\n\t\tbs[i] = btmp[0] & 0x3f\n\t\tbs[i+1] = btmp[1]\n\t\ti = i + 2\n\t}\n\tbs[0] = bd\n\treturn bs[0:i]\n}\n\n// DecodeTime decodes a []byte into a time.Time.\nfunc decodeTime(bs []byte) (tt time.Time, err error) {\n\tbd := bs[0]\n\tvar (\n\t\ttsec  int64\n\t\ttnsec uint32\n\t\ttz    uint16\n\t\ti     byte = 1\n\t\ti2    byte\n\t\tn     byte\n\t)\n\tif bd&(1<<7) != 0 {\n\t\tvar btmp [8]byte\n\t\tn = ((bd >> 2) & 0x7) + 1\n\t\ti2 = i + n\n\t\tcopy(btmp[8-n:], bs[i:i2])\n\t\t//if first bit of bs[i] is set, then fill btmp[0..8-n] with 0xff (ie sign extend it)\n\t\tif bs[i]&(1<<7) != 0 {\n\t\t\tcopy(btmp[0:8-n], bsAll0xff)\n\t\t\t//for j,k := byte(0), 8-n; j < k; j++ {\tbtmp[j] = 0xff }\n\t\t}\n\t\ti = i2\n\t\ttsec = int64(bigen.Uint64(btmp[:]))\n\t}\n\tif bd&(1<<6) != 0 {\n\t\tvar btmp [4]byte\n\t\tn = (bd & 0x3) + 1\n\t\ti2 = i + n\n\t\tcopy(btmp[4-n:], bs[i:i2])\n\t\ti = i2\n\t\ttnsec = bigen.Uint32(btmp[:])\n\t}\n\tif bd&(1<<5) == 0 {\n\t\ttt = time.Unix(tsec, int64(tnsec)).UTC()\n\t\treturn\n\t}\n\t// In stdlib time.Parse, when a date is parsed without a zone name, it uses \"\" as zone name.\n\t// However, we need name here, so it can be shown when time is printed.\n\t// Zone name is in form: UTC-08:00.\n\t// Note that Go Libs do not give access to dst flag, so we ignore dst bits\n\n\ti2 = i + 2\n\ttz = bigen.Uint16(bs[i:i2])\n\ti = i2\n\t// sign extend sign bit into top 2 MSB (which were dst bits):\n\tif tz&(1<<13) == 0 { // positive\n\t\ttz = tz & 0x3fff //clear 2 MSBs: dst bits\n\t} else { // negative\n\t\ttz = tz | 0xc000 //set 2 MSBs: dst bits\n\t\t//tzname[3] = '-' (TODO: verify. this works here)\n\t}\n\ttzint := int16(tz)\n\tif tzint == 0 {\n\t\ttt = time.Unix(tsec, int64(tnsec)).UTC()\n\t} else {\n\t\t// For Go Time, do not use a descriptive timezone.\n\t\t// It's unnecessary, and makes it harder to do a reflect.DeepEqual.\n\t\t// The Offset already tells what the offset should be, if not on UTC and unknown zone name.\n\t\t// var zoneName = timeLocUTCName(tzint)\n\t\ttt = time.Unix(tsec, int64(tnsec)).In(time.FixedZone(\"\", int(tzint)*60))\n\t}\n\treturn\n}\n\nfunc timeLocUTCName(tzint int16) string {\n\tif tzint == 0 {\n\t\treturn \"UTC\"\n\t}\n\tvar tzname = []byte(\"UTC+00:00\")\n\t//tzname := fmt.Sprintf(\"UTC%s%02d:%02d\", tzsign, tz/60, tz%60) //perf issue using Sprintf. inline below.\n\t//tzhr, tzmin := tz/60, tz%60 //faster if u convert to int first\n\tvar tzhr, tzmin int16\n\tif tzint < 0 {\n\t\ttzname[3] = '-' // (TODO: verify. this works here)\n\t\ttzhr, tzmin = -tzint/60, (-tzint)%60\n\t} else {\n\t\ttzhr, tzmin = tzint/60, tzint%60\n\t}\n\ttzname[4] = timeDigits[tzhr/10]\n\ttzname[5] = timeDigits[tzhr%10]\n\ttzname[7] = timeDigits[tzmin/10]\n\ttzname[8] = timeDigits[tzmin%10]\n\treturn string(tzname)\n\t//return time.FixedZone(string(tzname), int(tzint)*60)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/backend/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 XOR Data Exchange, Inc.\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/backend/backend.go",
    "content": "// Package backend provides the K/V store interface for crypt backends.\npackage backend\n\n// Response represents a response from a backend store.\ntype Response struct {\n\tValue []byte\n\tError error\n}\n\n// KVPair holds both a key and value when reading a list.\ntype KVPair struct {\n\tKey   string\n\tValue []byte\n}\n\ntype KVPairs []*KVPair\n\n// A Store is a K/V store backend that retrieves and sets, and monitors\n// data in a K/V store.\ntype Store interface {\n\t// Get retrieves a value from a K/V store for the provided key.\n\tGet(key string) ([]byte, error)\n\n\t// List retrieves all keys and values under a provided key.\n\tList(key string) (KVPairs, error)\n\n\t// Set sets the provided key to value.\n\tSet(key string, value []byte) error\n\n\t// Watch monitors a K/V store for changes to key.\n\tWatch(key string, stop chan bool) <-chan *Response\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/backend/consul/consul.go",
    "content": "package consul\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/xordataexchange/crypt/backend\"\n\n\t\"github.com/armon/consul-api\"\n)\n\ntype Client struct {\n\tclient    *consulapi.KV\n\twaitIndex uint64\n}\n\nfunc New(machines []string) (*Client, error) {\n\tconf := consulapi.DefaultConfig()\n\tif len(machines) > 0 {\n\t\tconf.Address = machines[0]\n\t}\n\tclient, err := consulapi.NewClient(conf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Client{client.KV(), 0}, nil\n}\n\nfunc (c *Client) Get(key string) ([]byte, error) {\n\tkv, _, err := c.client.Get(key, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif kv == nil {\n\t\treturn nil, fmt.Errorf(\"Key ( %s ) was not found.\", key)\n\t}\n\treturn kv.Value, nil\n}\n\nfunc (c *Client) List(key string) (backend.KVPairs, error) {\n\tpairs, _, err := c.client.List(key, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make(backend.KVPairs, len(pairs), len(pairs))\n\tfor i, kv := range pairs {\n\t\tret[i] = &backend.KVPair{Key: kv.Key, Value: kv.Value}\n\t}\n\treturn ret, nil\n}\n\nfunc (c *Client) Set(key string, value []byte) error {\n\tkey = strings.TrimPrefix(key, \"/\")\n\tkv := &consulapi.KVPair{\n\t\tKey:   key,\n\t\tValue: value,\n\t}\n\t_, err := c.client.Put(kv, nil)\n\treturn err\n}\n\nfunc (c *Client) Watch(key string, stop chan bool) <-chan *backend.Response {\n\trespChan := make(chan *backend.Response, 0)\n\tgo func() {\n\t\tfor {\n\t\t\topts := consulapi.QueryOptions{\n\t\t\t\tWaitIndex: c.waitIndex,\n\t\t\t}\n\t\t\tkeypair, meta, err := c.client.Get(key, &opts)\n\t\t\tif keypair == nil && err == nil {\n\t\t\t\terr = fmt.Errorf(\"Key ( %s ) was not found.\", key)\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\trespChan <- &backend.Response{nil, err}\n\t\t\t\ttime.Sleep(time.Second * 5)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tc.waitIndex = meta.LastIndex\n\t\t\trespChan <- &backend.Response{keypair.Value, nil}\n\t\t}\n\t}()\n\treturn respChan\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/backend/etcd/etcd.go",
    "content": "package etcd\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/xordataexchange/crypt/backend\"\n\n\tgoetcd \"github.com/coreos/go-etcd/etcd\"\n)\n\ntype Client struct {\n\tclient    *goetcd.Client\n\twaitIndex uint64\n}\n\nfunc New(machines []string) (*Client, error) {\n\treturn &Client{goetcd.NewClient(machines), 0}, nil\n}\n\nfunc (c *Client) Get(key string) ([]byte, error) {\n\tresp, err := c.client.Get(key, false, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn []byte(resp.Node.Value), nil\n}\n\nfunc addKVPairs(node *goetcd.Node, list backend.KVPairs) backend.KVPairs {\n\tif node.Dir {\n\t\tfor _, n := range node.Nodes {\n\t\t\tlist = addKVPairs(n, list)\n\t\t}\n\t\treturn list\n\t}\n\treturn append(list, &backend.KVPair{Key: node.Key, Value: []byte(node.Value)})\n}\n\nfunc (c *Client) List(key string) (backend.KVPairs, error) {\n\tresp, err := c.client.Get(key, false, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !resp.Node.Dir {\n\t\treturn nil, errors.New(\"key is not a directory\")\n\t}\n\tlist := addKVPairs(resp.Node, nil)\n\treturn list, nil\n}\n\nfunc (c *Client) Set(key string, value []byte) error {\n\t_, err := c.client.Set(key, string(value), 0)\n\treturn err\n}\n\nfunc (c *Client) Watch(key string, stop chan bool) <-chan *backend.Response {\n\trespChan := make(chan *backend.Response, 0)\n\tgo func() {\n\t\tfor {\n\t\t\tvar resp *goetcd.Response\n\t\t\tvar err error\n\t\t\t// if c.waitIndex == 0 {\n\t\t\t// \tresp, err = c.client.Get(key, false, false)\n\t\t\t// \tif err != nil {\n\t\t\t// \t\trespChan <- &backend.Response{nil, err}\n\t\t\t// \t\ttime.Sleep(time.Second * 5)\n\t\t\t// \t\tcontinue\n\t\t\t// \t}\n\t\t\t// \tc.waitIndex = resp.EtcdIndex\n\t\t\t// \trespChan <- &backend.Response{[]byte(resp.Node.Value), nil}\n\t\t\t// }\n\t\t\t// resp, err = c.client.Watch(key, c.waitIndex+1, false, nil, stop)\n\t\t\tresp, err = c.client.Watch(key, 0, false, nil, stop)\n\t\t\tif err != nil {\n\t\t\t\trespChan <- &backend.Response{nil, err}\n\t\t\t\ttime.Sleep(time.Second * 5)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tc.waitIndex = resp.Node.ModifiedIndex\n\t\t\trespChan <- &backend.Response{[]byte(resp.Node.Value), nil}\n\t\t}\n\t}()\n\treturn respChan\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/backend/mock/mock.go",
    "content": "package mock\n\nimport (\n\t\"errors\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/xordataexchange/crypt/backend\"\n)\n\nvar mockedStore map[string][]byte\n\ntype Client struct{}\n\nfunc New(machines []string) (*Client, error) {\n\tif mockedStore == nil {\n\t\tmockedStore = make(map[string][]byte, 2)\n\t}\n\treturn &Client{}, nil\n}\n\nfunc (c *Client) Get(key string) ([]byte, error) {\n\tif v, ok := mockedStore[key]; ok {\n\t\treturn v, nil\n\t}\n\terr := errors.New(\"Could not find key: \" + key)\n\treturn nil, err\n}\n\nfunc (c *Client) List(key string) (backend.KVPairs, error) {\n\tvar list backend.KVPairs\n\tdir := path.Clean(key) + \"/\"\n\tfor k, v := range mockedStore {\n\t\tif strings.HasPrefix(k, dir) {\n\t\t\tlist = append(list, &backend.KVPair{Key: k, Value: v})\n\t\t}\n\t}\n\treturn list, nil\n}\n\nfunc (c *Client) Set(key string, value []byte) error {\n\tmockedStore[key] = value\n\treturn nil\n}\n\nfunc (c *Client) Watch(key string, stop chan bool) <-chan *backend.Response {\n\trespChan := make(chan *backend.Response, 0)\n\tgo func() {\n\t\tfor {\n\t\t\tb, err := c.Get(key)\n\t\t\tif err != nil {\n\t\t\t\trespChan <- &backend.Response{nil, err}\n\t\t\t\ttime.Sleep(time.Second * 5)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trespChan <- &backend.Response{b, nil}\n\t\t}\n\t}()\n\treturn respChan\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/config/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 XOR Data Exchange, Inc.\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/config/config.go",
    "content": "package config\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"github.com/xordataexchange/crypt/backend\"\n\t\"github.com/xordataexchange/crypt/backend/consul\"\n\t\"github.com/xordataexchange/crypt/backend/etcd\"\n\t\"github.com/xordataexchange/crypt/encoding/secconf\"\n)\n\ntype KVPair struct {\n\tbackend.KVPair\n}\n\ntype KVPairs []*KVPair\n\ntype configManager struct {\n\tkeystore []byte\n\tstore    backend.Store\n}\n\n// A ConfigManager retrieves and decrypts configuration from a key/value store.\ntype ConfigManager interface {\n\tGet(key string) ([]byte, error)\n\tList(key string) (KVPairs, error)\n\tSet(key string, value []byte) error\n\tWatch(key string, stop chan bool) <-chan *Response\n}\n\ntype standardConfigManager struct {\n\tstore backend.Store\n}\n\nfunc NewStandardConfigManager(client backend.Store) (ConfigManager, error) {\n\treturn standardConfigManager{client}, nil\n}\n\nfunc NewConfigManager(client backend.Store, keystore io.Reader) (ConfigManager, error) {\n\tbytes, err := ioutil.ReadAll(keystore)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn configManager{bytes, client}, nil\n}\n\n// NewStandardEtcdConfigManager returns a new ConfigManager backed by etcd.\nfunc NewStandardEtcdConfigManager(machines []string) (ConfigManager, error) {\n\tstore, err := etcd.New(machines)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewStandardConfigManager(store)\n}\n\n// NewStandardConsulConfigManager returns a new ConfigManager backed by consul.\nfunc NewStandardConsulConfigManager(machines []string) (ConfigManager, error) {\n\tstore, err := consul.New(machines)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewStandardConfigManager(store)\n}\n\n// NewEtcdConfigManager returns a new ConfigManager backed by etcd.\n// Data will be encrypted.\nfunc NewEtcdConfigManager(machines []string, keystore io.Reader) (ConfigManager, error) {\n\tstore, err := etcd.New(machines)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewConfigManager(store, keystore)\n}\n\n// NewConsulConfigManager returns a new ConfigManager backed by consul.\n// Data will be encrypted.\nfunc NewConsulConfigManager(machines []string, keystore io.Reader) (ConfigManager, error) {\n\tstore, err := consul.New(machines)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewConfigManager(store, keystore)\n}\n\n// Get retrieves and decodes a secconf value stored at key.\nfunc (c configManager) Get(key string) ([]byte, error) {\n\tvalue, err := c.store.Get(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn secconf.Decode(value, bytes.NewBuffer(c.keystore))\n}\n\n// Get retrieves a value stored at key.\n// convenience function, no additional value provided over\n// `etcdctl`\nfunc (c standardConfigManager) Get(key string) ([]byte, error) {\n\tvalue, err := c.store.Get(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn value, err\n}\n\n// List retrieves and decodes all secconf value stored under key.\nfunc (c configManager) List(key string) (KVPairs, error) {\n\tlist, err := c.store.List(key)\n\tretList := make(KVPairs, len(list))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor i, kv := range list {\n\t\tretList[i].Key = kv.Key\n\t\tretList[i].Value, err = secconf.Decode(kv.Value, bytes.NewBuffer(c.keystore))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn retList, nil\n}\n\n// List retrieves all values under key.\n// convenience function, no additional value provided over\n// `etcdctl`\nfunc (c standardConfigManager) List(key string) (KVPairs, error) {\n\tlist, err := c.store.List(key)\n\tretList := make(KVPairs, len(list))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor i, kv := range list {\n\t\tretList[i].Key = kv.Key\n\t\tretList[i].Value = kv.Value\n\t}\n\treturn retList, err\n}\n\n// Set will put a key/value into the data store\n// and encode it with secconf\nfunc (c configManager) Set(key string, value []byte) error {\n\tencodedValue, err := secconf.Encode(value, bytes.NewBuffer(c.keystore))\n\tif err == nil {\n\t\terr = c.store.Set(key, encodedValue)\n\t}\n\treturn err\n}\n\n// Set will put a key/value into the data store\nfunc (c standardConfigManager) Set(key string, value []byte) error {\n\terr := c.store.Set(key, value)\n\treturn err\n}\n\ntype Response struct {\n\tValue []byte\n\tError error\n}\n\nfunc (c configManager) Watch(key string, stop chan bool) <-chan *Response {\n\tresp := make(chan *Response, 0)\n\tbackendResp := c.store.Watch(key, stop)\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-stop:\n\t\t\t\treturn\n\t\t\tcase r := <-backendResp:\n\t\t\t\tif r.Error != nil {\n\t\t\t\t\tresp <- &Response{nil, r.Error}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvalue, err := secconf.Decode(r.Value, bytes.NewBuffer(c.keystore))\n\t\t\t\tresp <- &Response{value, err}\n\t\t\t}\n\t\t}\n\t}()\n\treturn resp\n}\n\nfunc (c standardConfigManager) Watch(key string, stop chan bool) <-chan *Response {\n\tresp := make(chan *Response, 0)\n\tbackendResp := c.store.Watch(key, stop)\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-stop:\n\t\t\t\treturn\n\t\t\tcase r := <-backendResp:\n\t\t\t\tif r.Error != nil {\n\t\t\t\t\tresp <- &Response{nil, r.Error}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tresp <- &Response{r.Value, nil}\n\t\t\t}\n\t\t}\n\t}()\n\treturn resp\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/encoding/secconf/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 XOR Data Exchange, Inc.\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": "12fa-docker-golang/chapter3/viper/vendor/github.com/xordataexchange/crypt/encoding/secconf/secconf.go",
    "content": "// Package secconf implements secconf encoding as specified in the following\n// format:\n//\n//   base64(gpg(gzip(data)))\n//\npackage secconf\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/base64\"\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"golang.org/x/crypto/openpgp\"\n)\n\n// Deocde decodes data using the secconf codec.\nfunc Decode(data []byte, secertKeyring io.Reader) ([]byte, error) {\n\tdecoder := base64.NewDecoder(base64.StdEncoding, bytes.NewBuffer(data))\n\tentityList, err := openpgp.ReadArmoredKeyRing(secertKeyring)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmd, err := openpgp.ReadMessage(decoder, entityList, nil, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgzReader, err := gzip.NewReader(md.UnverifiedBody)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer gzReader.Close()\n\tbytes, err := ioutil.ReadAll(gzReader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn bytes, nil\n}\n\n// Encode encodes data to a base64 encoded using the secconf codec.\n// data is encrypted with all public keys found in the supplied keyring.\nfunc Encode(data []byte, keyring io.Reader) ([]byte, error) {\n\tentityList, err := openpgp.ReadArmoredKeyRing(keyring)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuffer := new(bytes.Buffer)\n\tencoder := base64.NewEncoder(base64.StdEncoding, buffer)\n\tpgpWriter, err := openpgp.Encrypt(encoder, entityList, nil, nil, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgzWriter := gzip.NewWriter(pgpWriter)\n\tif _, err := gzWriter.Write(data); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := gzWriter.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := pgpWriter.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := encoder.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buffer.Bytes(), nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/cast5/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/const_amd64.h",
    "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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n#define REDMASK51     0x0007FFFFFFFFFFFF\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/const_amd64.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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n// +build amd64,!gccgo,!appengine\n\n// These constants cannot be encoded in non-MOVQ immediates.\n// We access them directly from memory instead.\n\nDATA ·_121666_213(SB)/8, $996687872\nGLOBL ·_121666_213(SB), 8, $8\n\nDATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA\nGLOBL ·_2P0(SB), 8, $8\n\nDATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE\nGLOBL ·_2P1234(SB), 8, $8\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/cswap_amd64.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 amd64,!gccgo,!appengine\n\n// func cswap(inout *[4][5]uint64, v uint64)\nTEXT ·cswap(SB),7,$0\n\tMOVQ inout+0(FP),DI\n\tMOVQ v+8(FP),SI\n\n\tSUBQ $1, SI\n\tNOTQ SI\n\tMOVQ SI, X15\n\tPSHUFD $0x44, X15, X15\n\n\tMOVOU 0(DI), X0\n\tMOVOU 16(DI), X2\n\tMOVOU 32(DI), X4\n\tMOVOU 48(DI), X6\n\tMOVOU 64(DI), X8\n\tMOVOU 80(DI), X1\n\tMOVOU 96(DI), X3\n\tMOVOU 112(DI), X5\n\tMOVOU 128(DI), X7\n\tMOVOU 144(DI), X9\n\n\tMOVO X1, X10\n\tMOVO X3, X11\n\tMOVO X5, X12\n\tMOVO X7, X13\n\tMOVO X9, X14\n\n\tPXOR X0, X10\n\tPXOR X2, X11\n\tPXOR X4, X12\n\tPXOR X6, X13\n\tPXOR X8, X14\n\tPAND X15, X10\n\tPAND X15, X11\n\tPAND X15, X12\n\tPAND X15, X13\n\tPAND X15, X14\n\tPXOR X10, X0\n\tPXOR X10, X1\n\tPXOR X11, X2\n\tPXOR X11, X3\n\tPXOR X12, X4\n\tPXOR X12, X5\n\tPXOR X13, X6\n\tPXOR X13, X7\n\tPXOR X14, X8\n\tPXOR X14, X9\n\n\tMOVOU X0, 0(DI)\n\tMOVOU X2, 16(DI)\n\tMOVOU X4, 32(DI)\n\tMOVOU X6, 48(DI)\n\tMOVOU X8, 64(DI)\n\tMOVOU X1, 80(DI)\n\tMOVOU X3, 96(DI)\n\tMOVOU X5, 112(DI)\n\tMOVOU X7, 128(DI)\n\tMOVOU X9, 144(DI)\n\tRET\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/curve25519.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// We have a implementation in amd64 assembly so this code is only run on\n// non-amd64 platforms. The amd64 assembly does not support gccgo.\n// +build !amd64 gccgo appengine\n\npackage curve25519\n\nimport (\n\t\"encoding/binary\"\n)\n\n// This code is a port of the public domain, \"ref10\" implementation of\n// curve25519 from SUPERCOP 20130419 by D. J. Bernstein.\n\n// fieldElement represents an element of the field GF(2^255 - 19). An element\n// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77\n// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on\n// context.\ntype fieldElement [10]int32\n\nfunc feZero(fe *fieldElement) {\n\tfor i := range fe {\n\t\tfe[i] = 0\n\t}\n}\n\nfunc feOne(fe *fieldElement) {\n\tfeZero(fe)\n\tfe[0] = 1\n}\n\nfunc feAdd(dst, a, b *fieldElement) {\n\tfor i := range dst {\n\t\tdst[i] = a[i] + b[i]\n\t}\n}\n\nfunc feSub(dst, a, b *fieldElement) {\n\tfor i := range dst {\n\t\tdst[i] = a[i] - b[i]\n\t}\n}\n\nfunc feCopy(dst, src *fieldElement) {\n\tfor i := range dst {\n\t\tdst[i] = src[i]\n\t}\n}\n\n// feCSwap replaces (f,g) with (g,f) if b == 1; replaces (f,g) with (f,g) if b == 0.\n//\n// Preconditions: b in {0,1}.\nfunc feCSwap(f, g *fieldElement, b int32) {\n\tb = -b\n\tfor i := range f {\n\t\tt := b & (f[i] ^ g[i])\n\t\tf[i] ^= t\n\t\tg[i] ^= t\n\t}\n}\n\n// load3 reads a 24-bit, little-endian value from in.\nfunc load3(in []byte) int64 {\n\tvar r int64\n\tr = int64(in[0])\n\tr |= int64(in[1]) << 8\n\tr |= int64(in[2]) << 16\n\treturn r\n}\n\n// load4 reads a 32-bit, little-endian value from in.\nfunc load4(in []byte) int64 {\n\treturn int64(binary.LittleEndian.Uint32(in))\n}\n\nfunc feFromBytes(dst *fieldElement, src *[32]byte) {\n\th0 := load4(src[:])\n\th1 := load3(src[4:]) << 6\n\th2 := load3(src[7:]) << 5\n\th3 := load3(src[10:]) << 3\n\th4 := load3(src[13:]) << 2\n\th5 := load4(src[16:])\n\th6 := load3(src[20:]) << 7\n\th7 := load3(src[23:]) << 5\n\th8 := load3(src[26:]) << 4\n\th9 := load3(src[29:]) << 2\n\n\tvar carry [10]int64\n\tcarry[9] = (h9 + 1<<24) >> 25\n\th0 += carry[9] * 19\n\th9 -= carry[9] << 25\n\tcarry[1] = (h1 + 1<<24) >> 25\n\th2 += carry[1]\n\th1 -= carry[1] << 25\n\tcarry[3] = (h3 + 1<<24) >> 25\n\th4 += carry[3]\n\th3 -= carry[3] << 25\n\tcarry[5] = (h5 + 1<<24) >> 25\n\th6 += carry[5]\n\th5 -= carry[5] << 25\n\tcarry[7] = (h7 + 1<<24) >> 25\n\th8 += carry[7]\n\th7 -= carry[7] << 25\n\n\tcarry[0] = (h0 + 1<<25) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\tcarry[2] = (h2 + 1<<25) >> 26\n\th3 += carry[2]\n\th2 -= carry[2] << 26\n\tcarry[4] = (h4 + 1<<25) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\tcarry[6] = (h6 + 1<<25) >> 26\n\th7 += carry[6]\n\th6 -= carry[6] << 26\n\tcarry[8] = (h8 + 1<<25) >> 26\n\th9 += carry[8]\n\th8 -= carry[8] << 26\n\n\tdst[0] = int32(h0)\n\tdst[1] = int32(h1)\n\tdst[2] = int32(h2)\n\tdst[3] = int32(h3)\n\tdst[4] = int32(h4)\n\tdst[5] = int32(h5)\n\tdst[6] = int32(h6)\n\tdst[7] = int32(h7)\n\tdst[8] = int32(h8)\n\tdst[9] = int32(h9)\n}\n\n// feToBytes marshals h to s.\n// Preconditions:\n//   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n//\n// Write p=2^255-19; q=floor(h/p).\n// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).\n//\n// Proof:\n//   Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.\n//   Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4.\n//\n//   Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).\n//   Then 0<y<1.\n//\n//   Write r=h-pq.\n//   Have 0<=r<=p-1=2^255-20.\n//   Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.\n//\n//   Write x=r+19(2^-255)r+y.\n//   Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.\n//\n//   Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))\n//   so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.\nfunc feToBytes(s *[32]byte, h *fieldElement) {\n\tvar carry [10]int32\n\n\tq := (19*h[9] + (1 << 24)) >> 25\n\tq = (h[0] + q) >> 26\n\tq = (h[1] + q) >> 25\n\tq = (h[2] + q) >> 26\n\tq = (h[3] + q) >> 25\n\tq = (h[4] + q) >> 26\n\tq = (h[5] + q) >> 25\n\tq = (h[6] + q) >> 26\n\tq = (h[7] + q) >> 25\n\tq = (h[8] + q) >> 26\n\tq = (h[9] + q) >> 25\n\n\t// Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20.\n\th[0] += 19 * q\n\t// Goal: Output h-2^255 q, which is between 0 and 2^255-20.\n\n\tcarry[0] = h[0] >> 26\n\th[1] += carry[0]\n\th[0] -= carry[0] << 26\n\tcarry[1] = h[1] >> 25\n\th[2] += carry[1]\n\th[1] -= carry[1] << 25\n\tcarry[2] = h[2] >> 26\n\th[3] += carry[2]\n\th[2] -= carry[2] << 26\n\tcarry[3] = h[3] >> 25\n\th[4] += carry[3]\n\th[3] -= carry[3] << 25\n\tcarry[4] = h[4] >> 26\n\th[5] += carry[4]\n\th[4] -= carry[4] << 26\n\tcarry[5] = h[5] >> 25\n\th[6] += carry[5]\n\th[5] -= carry[5] << 25\n\tcarry[6] = h[6] >> 26\n\th[7] += carry[6]\n\th[6] -= carry[6] << 26\n\tcarry[7] = h[7] >> 25\n\th[8] += carry[7]\n\th[7] -= carry[7] << 25\n\tcarry[8] = h[8] >> 26\n\th[9] += carry[8]\n\th[8] -= carry[8] << 26\n\tcarry[9] = h[9] >> 25\n\th[9] -= carry[9] << 25\n\t// h10 = carry9\n\n\t// Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.\n\t// Have h[0]+...+2^230 h[9] between 0 and 2^255-1;\n\t// evidently 2^255 h10-2^255 q = 0.\n\t// Goal: Output h[0]+...+2^230 h[9].\n\n\ts[0] = byte(h[0] >> 0)\n\ts[1] = byte(h[0] >> 8)\n\ts[2] = byte(h[0] >> 16)\n\ts[3] = byte((h[0] >> 24) | (h[1] << 2))\n\ts[4] = byte(h[1] >> 6)\n\ts[5] = byte(h[1] >> 14)\n\ts[6] = byte((h[1] >> 22) | (h[2] << 3))\n\ts[7] = byte(h[2] >> 5)\n\ts[8] = byte(h[2] >> 13)\n\ts[9] = byte((h[2] >> 21) | (h[3] << 5))\n\ts[10] = byte(h[3] >> 3)\n\ts[11] = byte(h[3] >> 11)\n\ts[12] = byte((h[3] >> 19) | (h[4] << 6))\n\ts[13] = byte(h[4] >> 2)\n\ts[14] = byte(h[4] >> 10)\n\ts[15] = byte(h[4] >> 18)\n\ts[16] = byte(h[5] >> 0)\n\ts[17] = byte(h[5] >> 8)\n\ts[18] = byte(h[5] >> 16)\n\ts[19] = byte((h[5] >> 24) | (h[6] << 1))\n\ts[20] = byte(h[6] >> 7)\n\ts[21] = byte(h[6] >> 15)\n\ts[22] = byte((h[6] >> 23) | (h[7] << 3))\n\ts[23] = byte(h[7] >> 5)\n\ts[24] = byte(h[7] >> 13)\n\ts[25] = byte((h[7] >> 21) | (h[8] << 4))\n\ts[26] = byte(h[8] >> 4)\n\ts[27] = byte(h[8] >> 12)\n\ts[28] = byte((h[8] >> 20) | (h[9] << 6))\n\ts[29] = byte(h[9] >> 2)\n\ts[30] = byte(h[9] >> 10)\n\ts[31] = byte(h[9] >> 18)\n}\n\n// feMul calculates h = f * g\n// Can overlap h with f or g.\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//    |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n//\n// Notes on implementation strategy:\n//\n// Using schoolbook multiplication.\n// Karatsuba would save a little in some cost models.\n//\n// Most multiplications by 2 and 19 are 32-bit precomputations;\n// cheaper than 64-bit postcomputations.\n//\n// There is one remaining multiplication by 19 in the carry chain;\n// one *19 precomputation can be merged into this,\n// but the resulting data flow is considerably less clean.\n//\n// There are 12 carries below.\n// 10 of them are 2-way parallelizable and vectorizable.\n// Can get away with 11 carries, but then data flow is much deeper.\n//\n// With tighter constraints on inputs can squeeze carries into int32.\nfunc feMul(h, f, g *fieldElement) {\n\tf0 := f[0]\n\tf1 := f[1]\n\tf2 := f[2]\n\tf3 := f[3]\n\tf4 := f[4]\n\tf5 := f[5]\n\tf6 := f[6]\n\tf7 := f[7]\n\tf8 := f[8]\n\tf9 := f[9]\n\tg0 := g[0]\n\tg1 := g[1]\n\tg2 := g[2]\n\tg3 := g[3]\n\tg4 := g[4]\n\tg5 := g[5]\n\tg6 := g[6]\n\tg7 := g[7]\n\tg8 := g[8]\n\tg9 := g[9]\n\tg1_19 := 19 * g1 // 1.4*2^29\n\tg2_19 := 19 * g2 // 1.4*2^30; still ok\n\tg3_19 := 19 * g3\n\tg4_19 := 19 * g4\n\tg5_19 := 19 * g5\n\tg6_19 := 19 * g6\n\tg7_19 := 19 * g7\n\tg8_19 := 19 * g8\n\tg9_19 := 19 * g9\n\tf1_2 := 2 * f1\n\tf3_2 := 2 * f3\n\tf5_2 := 2 * f5\n\tf7_2 := 2 * f7\n\tf9_2 := 2 * f9\n\tf0g0 := int64(f0) * int64(g0)\n\tf0g1 := int64(f0) * int64(g1)\n\tf0g2 := int64(f0) * int64(g2)\n\tf0g3 := int64(f0) * int64(g3)\n\tf0g4 := int64(f0) * int64(g4)\n\tf0g5 := int64(f0) * int64(g5)\n\tf0g6 := int64(f0) * int64(g6)\n\tf0g7 := int64(f0) * int64(g7)\n\tf0g8 := int64(f0) * int64(g8)\n\tf0g9 := int64(f0) * int64(g9)\n\tf1g0 := int64(f1) * int64(g0)\n\tf1g1_2 := int64(f1_2) * int64(g1)\n\tf1g2 := int64(f1) * int64(g2)\n\tf1g3_2 := int64(f1_2) * int64(g3)\n\tf1g4 := int64(f1) * int64(g4)\n\tf1g5_2 := int64(f1_2) * int64(g5)\n\tf1g6 := int64(f1) * int64(g6)\n\tf1g7_2 := int64(f1_2) * int64(g7)\n\tf1g8 := int64(f1) * int64(g8)\n\tf1g9_38 := int64(f1_2) * int64(g9_19)\n\tf2g0 := int64(f2) * int64(g0)\n\tf2g1 := int64(f2) * int64(g1)\n\tf2g2 := int64(f2) * int64(g2)\n\tf2g3 := int64(f2) * int64(g3)\n\tf2g4 := int64(f2) * int64(g4)\n\tf2g5 := int64(f2) * int64(g5)\n\tf2g6 := int64(f2) * int64(g6)\n\tf2g7 := int64(f2) * int64(g7)\n\tf2g8_19 := int64(f2) * int64(g8_19)\n\tf2g9_19 := int64(f2) * int64(g9_19)\n\tf3g0 := int64(f3) * int64(g0)\n\tf3g1_2 := int64(f3_2) * int64(g1)\n\tf3g2 := int64(f3) * int64(g2)\n\tf3g3_2 := int64(f3_2) * int64(g3)\n\tf3g4 := int64(f3) * int64(g4)\n\tf3g5_2 := int64(f3_2) * int64(g5)\n\tf3g6 := int64(f3) * int64(g6)\n\tf3g7_38 := int64(f3_2) * int64(g7_19)\n\tf3g8_19 := int64(f3) * int64(g8_19)\n\tf3g9_38 := int64(f3_2) * int64(g9_19)\n\tf4g0 := int64(f4) * int64(g0)\n\tf4g1 := int64(f4) * int64(g1)\n\tf4g2 := int64(f4) * int64(g2)\n\tf4g3 := int64(f4) * int64(g3)\n\tf4g4 := int64(f4) * int64(g4)\n\tf4g5 := int64(f4) * int64(g5)\n\tf4g6_19 := int64(f4) * int64(g6_19)\n\tf4g7_19 := int64(f4) * int64(g7_19)\n\tf4g8_19 := int64(f4) * int64(g8_19)\n\tf4g9_19 := int64(f4) * int64(g9_19)\n\tf5g0 := int64(f5) * int64(g0)\n\tf5g1_2 := int64(f5_2) * int64(g1)\n\tf5g2 := int64(f5) * int64(g2)\n\tf5g3_2 := int64(f5_2) * int64(g3)\n\tf5g4 := int64(f5) * int64(g4)\n\tf5g5_38 := int64(f5_2) * int64(g5_19)\n\tf5g6_19 := int64(f5) * int64(g6_19)\n\tf5g7_38 := int64(f5_2) * int64(g7_19)\n\tf5g8_19 := int64(f5) * int64(g8_19)\n\tf5g9_38 := int64(f5_2) * int64(g9_19)\n\tf6g0 := int64(f6) * int64(g0)\n\tf6g1 := int64(f6) * int64(g1)\n\tf6g2 := int64(f6) * int64(g2)\n\tf6g3 := int64(f6) * int64(g3)\n\tf6g4_19 := int64(f6) * int64(g4_19)\n\tf6g5_19 := int64(f6) * int64(g5_19)\n\tf6g6_19 := int64(f6) * int64(g6_19)\n\tf6g7_19 := int64(f6) * int64(g7_19)\n\tf6g8_19 := int64(f6) * int64(g8_19)\n\tf6g9_19 := int64(f6) * int64(g9_19)\n\tf7g0 := int64(f7) * int64(g0)\n\tf7g1_2 := int64(f7_2) * int64(g1)\n\tf7g2 := int64(f7) * int64(g2)\n\tf7g3_38 := int64(f7_2) * int64(g3_19)\n\tf7g4_19 := int64(f7) * int64(g4_19)\n\tf7g5_38 := int64(f7_2) * int64(g5_19)\n\tf7g6_19 := int64(f7) * int64(g6_19)\n\tf7g7_38 := int64(f7_2) * int64(g7_19)\n\tf7g8_19 := int64(f7) * int64(g8_19)\n\tf7g9_38 := int64(f7_2) * int64(g9_19)\n\tf8g0 := int64(f8) * int64(g0)\n\tf8g1 := int64(f8) * int64(g1)\n\tf8g2_19 := int64(f8) * int64(g2_19)\n\tf8g3_19 := int64(f8) * int64(g3_19)\n\tf8g4_19 := int64(f8) * int64(g4_19)\n\tf8g5_19 := int64(f8) * int64(g5_19)\n\tf8g6_19 := int64(f8) * int64(g6_19)\n\tf8g7_19 := int64(f8) * int64(g7_19)\n\tf8g8_19 := int64(f8) * int64(g8_19)\n\tf8g9_19 := int64(f8) * int64(g9_19)\n\tf9g0 := int64(f9) * int64(g0)\n\tf9g1_38 := int64(f9_2) * int64(g1_19)\n\tf9g2_19 := int64(f9) * int64(g2_19)\n\tf9g3_38 := int64(f9_2) * int64(g3_19)\n\tf9g4_19 := int64(f9) * int64(g4_19)\n\tf9g5_38 := int64(f9_2) * int64(g5_19)\n\tf9g6_19 := int64(f9) * int64(g6_19)\n\tf9g7_38 := int64(f9_2) * int64(g7_19)\n\tf9g8_19 := int64(f9) * int64(g8_19)\n\tf9g9_38 := int64(f9_2) * int64(g9_19)\n\th0 := f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38\n\th1 := f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19\n\th2 := f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38\n\th3 := f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19\n\th4 := f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38\n\th5 := f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19\n\th6 := f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38\n\th7 := f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19\n\th8 := f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38\n\th9 := f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0\n\tvar carry [10]int64\n\n\t// |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38))\n\t//   i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8\n\t// |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19))\n\t//   i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9\n\n\tcarry[0] = (h0 + (1 << 25)) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\tcarry[4] = (h4 + (1 << 25)) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\t// |h0| <= 2^25\n\t// |h4| <= 2^25\n\t// |h1| <= 1.51*2^58\n\t// |h5| <= 1.51*2^58\n\n\tcarry[1] = (h1 + (1 << 24)) >> 25\n\th2 += carry[1]\n\th1 -= carry[1] << 25\n\tcarry[5] = (h5 + (1 << 24)) >> 25\n\th6 += carry[5]\n\th5 -= carry[5] << 25\n\t// |h1| <= 2^24; from now on fits into int32\n\t// |h5| <= 2^24; from now on fits into int32\n\t// |h2| <= 1.21*2^59\n\t// |h6| <= 1.21*2^59\n\n\tcarry[2] = (h2 + (1 << 25)) >> 26\n\th3 += carry[2]\n\th2 -= carry[2] << 26\n\tcarry[6] = (h6 + (1 << 25)) >> 26\n\th7 += carry[6]\n\th6 -= carry[6] << 26\n\t// |h2| <= 2^25; from now on fits into int32 unchanged\n\t// |h6| <= 2^25; from now on fits into int32 unchanged\n\t// |h3| <= 1.51*2^58\n\t// |h7| <= 1.51*2^58\n\n\tcarry[3] = (h3 + (1 << 24)) >> 25\n\th4 += carry[3]\n\th3 -= carry[3] << 25\n\tcarry[7] = (h7 + (1 << 24)) >> 25\n\th8 += carry[7]\n\th7 -= carry[7] << 25\n\t// |h3| <= 2^24; from now on fits into int32 unchanged\n\t// |h7| <= 2^24; from now on fits into int32 unchanged\n\t// |h4| <= 1.52*2^33\n\t// |h8| <= 1.52*2^33\n\n\tcarry[4] = (h4 + (1 << 25)) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\tcarry[8] = (h8 + (1 << 25)) >> 26\n\th9 += carry[8]\n\th8 -= carry[8] << 26\n\t// |h4| <= 2^25; from now on fits into int32 unchanged\n\t// |h8| <= 2^25; from now on fits into int32 unchanged\n\t// |h5| <= 1.01*2^24\n\t// |h9| <= 1.51*2^58\n\n\tcarry[9] = (h9 + (1 << 24)) >> 25\n\th0 += carry[9] * 19\n\th9 -= carry[9] << 25\n\t// |h9| <= 2^24; from now on fits into int32 unchanged\n\t// |h0| <= 1.8*2^37\n\n\tcarry[0] = (h0 + (1 << 25)) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\t// |h0| <= 2^25; from now on fits into int32 unchanged\n\t// |h1| <= 1.01*2^24\n\n\th[0] = int32(h0)\n\th[1] = int32(h1)\n\th[2] = int32(h2)\n\th[3] = int32(h3)\n\th[4] = int32(h4)\n\th[5] = int32(h5)\n\th[6] = int32(h6)\n\th[7] = int32(h7)\n\th[8] = int32(h8)\n\th[9] = int32(h9)\n}\n\n// feSquare calculates h = f*f. Can overlap h with f.\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\nfunc feSquare(h, f *fieldElement) {\n\tf0 := f[0]\n\tf1 := f[1]\n\tf2 := f[2]\n\tf3 := f[3]\n\tf4 := f[4]\n\tf5 := f[5]\n\tf6 := f[6]\n\tf7 := f[7]\n\tf8 := f[8]\n\tf9 := f[9]\n\tf0_2 := 2 * f0\n\tf1_2 := 2 * f1\n\tf2_2 := 2 * f2\n\tf3_2 := 2 * f3\n\tf4_2 := 2 * f4\n\tf5_2 := 2 * f5\n\tf6_2 := 2 * f6\n\tf7_2 := 2 * f7\n\tf5_38 := 38 * f5 // 1.31*2^30\n\tf6_19 := 19 * f6 // 1.31*2^30\n\tf7_38 := 38 * f7 // 1.31*2^30\n\tf8_19 := 19 * f8 // 1.31*2^30\n\tf9_38 := 38 * f9 // 1.31*2^30\n\tf0f0 := int64(f0) * int64(f0)\n\tf0f1_2 := int64(f0_2) * int64(f1)\n\tf0f2_2 := int64(f0_2) * int64(f2)\n\tf0f3_2 := int64(f0_2) * int64(f3)\n\tf0f4_2 := int64(f0_2) * int64(f4)\n\tf0f5_2 := int64(f0_2) * int64(f5)\n\tf0f6_2 := int64(f0_2) * int64(f6)\n\tf0f7_2 := int64(f0_2) * int64(f7)\n\tf0f8_2 := int64(f0_2) * int64(f8)\n\tf0f9_2 := int64(f0_2) * int64(f9)\n\tf1f1_2 := int64(f1_2) * int64(f1)\n\tf1f2_2 := int64(f1_2) * int64(f2)\n\tf1f3_4 := int64(f1_2) * int64(f3_2)\n\tf1f4_2 := int64(f1_2) * int64(f4)\n\tf1f5_4 := int64(f1_2) * int64(f5_2)\n\tf1f6_2 := int64(f1_2) * int64(f6)\n\tf1f7_4 := int64(f1_2) * int64(f7_2)\n\tf1f8_2 := int64(f1_2) * int64(f8)\n\tf1f9_76 := int64(f1_2) * int64(f9_38)\n\tf2f2 := int64(f2) * int64(f2)\n\tf2f3_2 := int64(f2_2) * int64(f3)\n\tf2f4_2 := int64(f2_2) * int64(f4)\n\tf2f5_2 := int64(f2_2) * int64(f5)\n\tf2f6_2 := int64(f2_2) * int64(f6)\n\tf2f7_2 := int64(f2_2) * int64(f7)\n\tf2f8_38 := int64(f2_2) * int64(f8_19)\n\tf2f9_38 := int64(f2) * int64(f9_38)\n\tf3f3_2 := int64(f3_2) * int64(f3)\n\tf3f4_2 := int64(f3_2) * int64(f4)\n\tf3f5_4 := int64(f3_2) * int64(f5_2)\n\tf3f6_2 := int64(f3_2) * int64(f6)\n\tf3f7_76 := int64(f3_2) * int64(f7_38)\n\tf3f8_38 := int64(f3_2) * int64(f8_19)\n\tf3f9_76 := int64(f3_2) * int64(f9_38)\n\tf4f4 := int64(f4) * int64(f4)\n\tf4f5_2 := int64(f4_2) * int64(f5)\n\tf4f6_38 := int64(f4_2) * int64(f6_19)\n\tf4f7_38 := int64(f4) * int64(f7_38)\n\tf4f8_38 := int64(f4_2) * int64(f8_19)\n\tf4f9_38 := int64(f4) * int64(f9_38)\n\tf5f5_38 := int64(f5) * int64(f5_38)\n\tf5f6_38 := int64(f5_2) * int64(f6_19)\n\tf5f7_76 := int64(f5_2) * int64(f7_38)\n\tf5f8_38 := int64(f5_2) * int64(f8_19)\n\tf5f9_76 := int64(f5_2) * int64(f9_38)\n\tf6f6_19 := int64(f6) * int64(f6_19)\n\tf6f7_38 := int64(f6) * int64(f7_38)\n\tf6f8_38 := int64(f6_2) * int64(f8_19)\n\tf6f9_38 := int64(f6) * int64(f9_38)\n\tf7f7_38 := int64(f7) * int64(f7_38)\n\tf7f8_38 := int64(f7_2) * int64(f8_19)\n\tf7f9_76 := int64(f7_2) * int64(f9_38)\n\tf8f8_19 := int64(f8) * int64(f8_19)\n\tf8f9_38 := int64(f8) * int64(f9_38)\n\tf9f9_38 := int64(f9) * int64(f9_38)\n\th0 := f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38\n\th1 := f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38\n\th2 := f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19\n\th3 := f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38\n\th4 := f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38\n\th5 := f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38\n\th6 := f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19\n\th7 := f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38\n\th8 := f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38\n\th9 := f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2\n\tvar carry [10]int64\n\n\tcarry[0] = (h0 + (1 << 25)) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\tcarry[4] = (h4 + (1 << 25)) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\n\tcarry[1] = (h1 + (1 << 24)) >> 25\n\th2 += carry[1]\n\th1 -= carry[1] << 25\n\tcarry[5] = (h5 + (1 << 24)) >> 25\n\th6 += carry[5]\n\th5 -= carry[5] << 25\n\n\tcarry[2] = (h2 + (1 << 25)) >> 26\n\th3 += carry[2]\n\th2 -= carry[2] << 26\n\tcarry[6] = (h6 + (1 << 25)) >> 26\n\th7 += carry[6]\n\th6 -= carry[6] << 26\n\n\tcarry[3] = (h3 + (1 << 24)) >> 25\n\th4 += carry[3]\n\th3 -= carry[3] << 25\n\tcarry[7] = (h7 + (1 << 24)) >> 25\n\th8 += carry[7]\n\th7 -= carry[7] << 25\n\n\tcarry[4] = (h4 + (1 << 25)) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\tcarry[8] = (h8 + (1 << 25)) >> 26\n\th9 += carry[8]\n\th8 -= carry[8] << 26\n\n\tcarry[9] = (h9 + (1 << 24)) >> 25\n\th0 += carry[9] * 19\n\th9 -= carry[9] << 25\n\n\tcarry[0] = (h0 + (1 << 25)) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\n\th[0] = int32(h0)\n\th[1] = int32(h1)\n\th[2] = int32(h2)\n\th[3] = int32(h3)\n\th[4] = int32(h4)\n\th[5] = int32(h5)\n\th[6] = int32(h6)\n\th[7] = int32(h7)\n\th[8] = int32(h8)\n\th[9] = int32(h9)\n}\n\n// feMul121666 calculates h = f * 121666. Can overlap h with f.\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\nfunc feMul121666(h, f *fieldElement) {\n\th0 := int64(f[0]) * 121666\n\th1 := int64(f[1]) * 121666\n\th2 := int64(f[2]) * 121666\n\th3 := int64(f[3]) * 121666\n\th4 := int64(f[4]) * 121666\n\th5 := int64(f[5]) * 121666\n\th6 := int64(f[6]) * 121666\n\th7 := int64(f[7]) * 121666\n\th8 := int64(f[8]) * 121666\n\th9 := int64(f[9]) * 121666\n\tvar carry [10]int64\n\n\tcarry[9] = (h9 + (1 << 24)) >> 25\n\th0 += carry[9] * 19\n\th9 -= carry[9] << 25\n\tcarry[1] = (h1 + (1 << 24)) >> 25\n\th2 += carry[1]\n\th1 -= carry[1] << 25\n\tcarry[3] = (h3 + (1 << 24)) >> 25\n\th4 += carry[3]\n\th3 -= carry[3] << 25\n\tcarry[5] = (h5 + (1 << 24)) >> 25\n\th6 += carry[5]\n\th5 -= carry[5] << 25\n\tcarry[7] = (h7 + (1 << 24)) >> 25\n\th8 += carry[7]\n\th7 -= carry[7] << 25\n\n\tcarry[0] = (h0 + (1 << 25)) >> 26\n\th1 += carry[0]\n\th0 -= carry[0] << 26\n\tcarry[2] = (h2 + (1 << 25)) >> 26\n\th3 += carry[2]\n\th2 -= carry[2] << 26\n\tcarry[4] = (h4 + (1 << 25)) >> 26\n\th5 += carry[4]\n\th4 -= carry[4] << 26\n\tcarry[6] = (h6 + (1 << 25)) >> 26\n\th7 += carry[6]\n\th6 -= carry[6] << 26\n\tcarry[8] = (h8 + (1 << 25)) >> 26\n\th9 += carry[8]\n\th8 -= carry[8] << 26\n\n\th[0] = int32(h0)\n\th[1] = int32(h1)\n\th[2] = int32(h2)\n\th[3] = int32(h3)\n\th[4] = int32(h4)\n\th[5] = int32(h5)\n\th[6] = int32(h6)\n\th[7] = int32(h7)\n\th[8] = int32(h8)\n\th[9] = int32(h9)\n}\n\n// feInvert sets out = z^-1.\nfunc feInvert(out, z *fieldElement) {\n\tvar t0, t1, t2, t3 fieldElement\n\tvar i int\n\n\tfeSquare(&t0, z)\n\tfor i = 1; i < 1; i++ {\n\t\tfeSquare(&t0, &t0)\n\t}\n\tfeSquare(&t1, &t0)\n\tfor i = 1; i < 2; i++ {\n\t\tfeSquare(&t1, &t1)\n\t}\n\tfeMul(&t1, z, &t1)\n\tfeMul(&t0, &t0, &t1)\n\tfeSquare(&t2, &t0)\n\tfor i = 1; i < 1; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t1, &t1, &t2)\n\tfeSquare(&t2, &t1)\n\tfor i = 1; i < 5; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t1, &t2, &t1)\n\tfeSquare(&t2, &t1)\n\tfor i = 1; i < 10; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t2, &t2, &t1)\n\tfeSquare(&t3, &t2)\n\tfor i = 1; i < 20; i++ {\n\t\tfeSquare(&t3, &t3)\n\t}\n\tfeMul(&t2, &t3, &t2)\n\tfeSquare(&t2, &t2)\n\tfor i = 1; i < 10; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t1, &t2, &t1)\n\tfeSquare(&t2, &t1)\n\tfor i = 1; i < 50; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t2, &t2, &t1)\n\tfeSquare(&t3, &t2)\n\tfor i = 1; i < 100; i++ {\n\t\tfeSquare(&t3, &t3)\n\t}\n\tfeMul(&t2, &t3, &t2)\n\tfeSquare(&t2, &t2)\n\tfor i = 1; i < 50; i++ {\n\t\tfeSquare(&t2, &t2)\n\t}\n\tfeMul(&t1, &t2, &t1)\n\tfeSquare(&t1, &t1)\n\tfor i = 1; i < 5; i++ {\n\t\tfeSquare(&t1, &t1)\n\t}\n\tfeMul(out, &t1, &t0)\n}\n\nfunc scalarMult(out, in, base *[32]byte) {\n\tvar e [32]byte\n\n\tcopy(e[:], in[:])\n\te[0] &= 248\n\te[31] &= 127\n\te[31] |= 64\n\n\tvar x1, x2, z2, x3, z3, tmp0, tmp1 fieldElement\n\tfeFromBytes(&x1, base)\n\tfeOne(&x2)\n\tfeCopy(&x3, &x1)\n\tfeOne(&z3)\n\n\tswap := int32(0)\n\tfor pos := 254; pos >= 0; pos-- {\n\t\tb := e[pos/8] >> uint(pos&7)\n\t\tb &= 1\n\t\tswap ^= int32(b)\n\t\tfeCSwap(&x2, &x3, swap)\n\t\tfeCSwap(&z2, &z3, swap)\n\t\tswap = int32(b)\n\n\t\tfeSub(&tmp0, &x3, &z3)\n\t\tfeSub(&tmp1, &x2, &z2)\n\t\tfeAdd(&x2, &x2, &z2)\n\t\tfeAdd(&z2, &x3, &z3)\n\t\tfeMul(&z3, &tmp0, &x2)\n\t\tfeMul(&z2, &z2, &tmp1)\n\t\tfeSquare(&tmp0, &tmp1)\n\t\tfeSquare(&tmp1, &x2)\n\t\tfeAdd(&x3, &z3, &z2)\n\t\tfeSub(&z2, &z3, &z2)\n\t\tfeMul(&x2, &tmp1, &tmp0)\n\t\tfeSub(&tmp1, &tmp1, &tmp0)\n\t\tfeSquare(&z2, &z2)\n\t\tfeMul121666(&z3, &tmp1)\n\t\tfeSquare(&x3, &x3)\n\t\tfeAdd(&tmp0, &tmp0, &z3)\n\t\tfeMul(&z3, &x1, &z2)\n\t\tfeMul(&z2, &tmp1, &tmp0)\n\t}\n\n\tfeCSwap(&x2, &x3, swap)\n\tfeCSwap(&z2, &z3, swap)\n\n\tfeInvert(&z2, &z2)\n\tfeMul(&x2, &x2, &z2)\n\tfeToBytes(out, &x2)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/doc.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// Package curve25519 provides an implementation of scalar multiplication on\n// the elliptic curve known as curve25519. See http://cr.yp.to/ecdh.html\npackage curve25519 // import \"golang.org/x/crypto/curve25519\"\n\n// basePoint is the x coordinate of the generator of the curve.\nvar basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}\n\n// ScalarMult sets dst to the product in*base where dst and base are the x\n// coordinates of group points and all values are in little-endian form.\nfunc ScalarMult(dst, in, base *[32]byte) {\n\tscalarMult(dst, in, base)\n}\n\n// ScalarBaseMult sets dst to the product in*base where dst and base are the x\n// coordinates of group points, base is the standard generator and all values\n// are in little-endian form.\nfunc ScalarBaseMult(dst, in *[32]byte) {\n\tScalarMult(dst, in, &basePoint)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/freeze_amd64.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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n// +build amd64,!gccgo,!appengine\n\n#include \"const_amd64.h\"\n\n// func freeze(inout *[5]uint64)\nTEXT ·freeze(SB),7,$0-8\n\tMOVQ inout+0(FP), DI\n\n\tMOVQ 0(DI),SI\n\tMOVQ 8(DI),DX\n\tMOVQ 16(DI),CX\n\tMOVQ 24(DI),R8\n\tMOVQ 32(DI),R9\n\tMOVQ $REDMASK51,AX\n\tMOVQ AX,R10\n\tSUBQ $18,R10\n\tMOVQ $3,R11\nREDUCELOOP:\n\tMOVQ SI,R12\n\tSHRQ $51,R12\n\tANDQ AX,SI\n\tADDQ R12,DX\n\tMOVQ DX,R12\n\tSHRQ $51,R12\n\tANDQ AX,DX\n\tADDQ R12,CX\n\tMOVQ CX,R12\n\tSHRQ $51,R12\n\tANDQ AX,CX\n\tADDQ R12,R8\n\tMOVQ R8,R12\n\tSHRQ $51,R12\n\tANDQ AX,R8\n\tADDQ R12,R9\n\tMOVQ R9,R12\n\tSHRQ $51,R12\n\tANDQ AX,R9\n\tIMUL3Q $19,R12,R12\n\tADDQ R12,SI\n\tSUBQ $1,R11\n\tJA REDUCELOOP\n\tMOVQ $1,R12\n\tCMPQ R10,SI\n\tCMOVQLT R11,R12\n\tCMPQ AX,DX\n\tCMOVQNE R11,R12\n\tCMPQ AX,CX\n\tCMOVQNE R11,R12\n\tCMPQ AX,R8\n\tCMOVQNE R11,R12\n\tCMPQ AX,R9\n\tCMOVQNE R11,R12\n\tNEGQ R12\n\tANDQ R12,AX\n\tANDQ R12,R10\n\tSUBQ R10,SI\n\tSUBQ AX,DX\n\tSUBQ AX,CX\n\tSUBQ AX,R8\n\tSUBQ AX,R9\n\tMOVQ SI,0(DI)\n\tMOVQ DX,8(DI)\n\tMOVQ CX,16(DI)\n\tMOVQ R8,24(DI)\n\tMOVQ R9,32(DI)\n\tRET\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n// +build amd64,!gccgo,!appengine\n\n#include \"const_amd64.h\"\n\n// func ladderstep(inout *[5][5]uint64)\nTEXT ·ladderstep(SB),0,$296-8\n\tMOVQ inout+0(FP),DI\n\n\tMOVQ 40(DI),SI\n\tMOVQ 48(DI),DX\n\tMOVQ 56(DI),CX\n\tMOVQ 64(DI),R8\n\tMOVQ 72(DI),R9\n\tMOVQ SI,AX\n\tMOVQ DX,R10\n\tMOVQ CX,R11\n\tMOVQ R8,R12\n\tMOVQ R9,R13\n\tADDQ ·_2P0(SB),AX\n\tADDQ ·_2P1234(SB),R10\n\tADDQ ·_2P1234(SB),R11\n\tADDQ ·_2P1234(SB),R12\n\tADDQ ·_2P1234(SB),R13\n\tADDQ 80(DI),SI\n\tADDQ 88(DI),DX\n\tADDQ 96(DI),CX\n\tADDQ 104(DI),R8\n\tADDQ 112(DI),R9\n\tSUBQ 80(DI),AX\n\tSUBQ 88(DI),R10\n\tSUBQ 96(DI),R11\n\tSUBQ 104(DI),R12\n\tSUBQ 112(DI),R13\n\tMOVQ SI,0(SP)\n\tMOVQ DX,8(SP)\n\tMOVQ CX,16(SP)\n\tMOVQ R8,24(SP)\n\tMOVQ R9,32(SP)\n\tMOVQ AX,40(SP)\n\tMOVQ R10,48(SP)\n\tMOVQ R11,56(SP)\n\tMOVQ R12,64(SP)\n\tMOVQ R13,72(SP)\n\tMOVQ 40(SP),AX\n\tMULQ 40(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 40(SP),AX\n\tSHLQ $1,AX\n\tMULQ 48(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 40(SP),AX\n\tSHLQ $1,AX\n\tMULQ 56(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 40(SP),AX\n\tSHLQ $1,AX\n\tMULQ 64(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 40(SP),AX\n\tSHLQ $1,AX\n\tMULQ 72(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 48(SP),AX\n\tMULQ 48(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 48(SP),AX\n\tSHLQ $1,AX\n\tMULQ 56(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 48(SP),AX\n\tSHLQ $1,AX\n\tMULQ 64(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 48(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 56(SP),AX\n\tMULQ 56(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 56(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 64(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 56(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 64(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 64(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 64(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 72(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tANDQ DX,SI\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tADDQ R10,CX\n\tANDQ DX,R8\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tADDQ R12,CX\n\tANDQ DX,R9\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tADDQ R14,CX\n\tANDQ DX,AX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,80(SP)\n\tMOVQ R8,88(SP)\n\tMOVQ R9,96(SP)\n\tMOVQ AX,104(SP)\n\tMOVQ R10,112(SP)\n\tMOVQ 0(SP),AX\n\tMULQ 0(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 0(SP),AX\n\tSHLQ $1,AX\n\tMULQ 8(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 0(SP),AX\n\tSHLQ $1,AX\n\tMULQ 16(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 0(SP),AX\n\tSHLQ $1,AX\n\tMULQ 24(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 0(SP),AX\n\tSHLQ $1,AX\n\tMULQ 32(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 8(SP),AX\n\tMULQ 8(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SP),AX\n\tSHLQ $1,AX\n\tMULQ 16(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 8(SP),AX\n\tSHLQ $1,AX\n\tMULQ 24(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 8(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 16(SP),AX\n\tMULQ 16(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 16(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 24(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 16(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 24(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 24(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 24(SP),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 32(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tANDQ DX,SI\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tADDQ R10,CX\n\tANDQ DX,R8\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tADDQ R12,CX\n\tANDQ DX,R9\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tADDQ R14,CX\n\tANDQ DX,AX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,120(SP)\n\tMOVQ R8,128(SP)\n\tMOVQ R9,136(SP)\n\tMOVQ AX,144(SP)\n\tMOVQ R10,152(SP)\n\tMOVQ SI,SI\n\tMOVQ R8,DX\n\tMOVQ R9,CX\n\tMOVQ AX,R8\n\tMOVQ R10,R9\n\tADDQ ·_2P0(SB),SI\n\tADDQ ·_2P1234(SB),DX\n\tADDQ ·_2P1234(SB),CX\n\tADDQ ·_2P1234(SB),R8\n\tADDQ ·_2P1234(SB),R9\n\tSUBQ 80(SP),SI\n\tSUBQ 88(SP),DX\n\tSUBQ 96(SP),CX\n\tSUBQ 104(SP),R8\n\tSUBQ 112(SP),R9\n\tMOVQ SI,160(SP)\n\tMOVQ DX,168(SP)\n\tMOVQ CX,176(SP)\n\tMOVQ R8,184(SP)\n\tMOVQ R9,192(SP)\n\tMOVQ 120(DI),SI\n\tMOVQ 128(DI),DX\n\tMOVQ 136(DI),CX\n\tMOVQ 144(DI),R8\n\tMOVQ 152(DI),R9\n\tMOVQ SI,AX\n\tMOVQ DX,R10\n\tMOVQ CX,R11\n\tMOVQ R8,R12\n\tMOVQ R9,R13\n\tADDQ ·_2P0(SB),AX\n\tADDQ ·_2P1234(SB),R10\n\tADDQ ·_2P1234(SB),R11\n\tADDQ ·_2P1234(SB),R12\n\tADDQ ·_2P1234(SB),R13\n\tADDQ 160(DI),SI\n\tADDQ 168(DI),DX\n\tADDQ 176(DI),CX\n\tADDQ 184(DI),R8\n\tADDQ 192(DI),R9\n\tSUBQ 160(DI),AX\n\tSUBQ 168(DI),R10\n\tSUBQ 176(DI),R11\n\tSUBQ 184(DI),R12\n\tSUBQ 192(DI),R13\n\tMOVQ SI,200(SP)\n\tMOVQ DX,208(SP)\n\tMOVQ CX,216(SP)\n\tMOVQ R8,224(SP)\n\tMOVQ R9,232(SP)\n\tMOVQ AX,240(SP)\n\tMOVQ R10,248(SP)\n\tMOVQ R11,256(SP)\n\tMOVQ R12,264(SP)\n\tMOVQ R13,272(SP)\n\tMOVQ 224(SP),SI\n\tIMUL3Q $19,SI,AX\n\tMOVQ AX,280(SP)\n\tMULQ 56(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 232(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,288(SP)\n\tMULQ 48(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 200(SP),AX\n\tMULQ 40(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 200(SP),AX\n\tMULQ 48(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 200(SP),AX\n\tMULQ 56(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 200(SP),AX\n\tMULQ 64(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 200(SP),AX\n\tMULQ 72(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 208(SP),AX\n\tMULQ 40(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 208(SP),AX\n\tMULQ 48(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 208(SP),AX\n\tMULQ 56(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 208(SP),AX\n\tMULQ 64(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 208(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 216(SP),AX\n\tMULQ 40(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 216(SP),AX\n\tMULQ 48(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 216(SP),AX\n\tMULQ 56(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 216(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 64(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 216(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 72(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 224(SP),AX\n\tMULQ 40(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 224(SP),AX\n\tMULQ 48(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 280(SP),AX\n\tMULQ 64(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 280(SP),AX\n\tMULQ 72(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 232(SP),AX\n\tMULQ 40(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 288(SP),AX\n\tMULQ 56(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 288(SP),AX\n\tMULQ 64(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 288(SP),AX\n\tMULQ 72(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tANDQ DX,SI\n\tADDQ R10,CX\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tANDQ DX,R8\n\tADDQ R12,CX\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tANDQ DX,R9\n\tADDQ R14,CX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tANDQ DX,AX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,40(SP)\n\tMOVQ R8,48(SP)\n\tMOVQ R9,56(SP)\n\tMOVQ AX,64(SP)\n\tMOVQ R10,72(SP)\n\tMOVQ 264(SP),SI\n\tIMUL3Q $19,SI,AX\n\tMOVQ AX,200(SP)\n\tMULQ 16(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 272(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,208(SP)\n\tMULQ 8(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 240(SP),AX\n\tMULQ 0(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 240(SP),AX\n\tMULQ 8(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 240(SP),AX\n\tMULQ 16(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 240(SP),AX\n\tMULQ 24(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 240(SP),AX\n\tMULQ 32(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 248(SP),AX\n\tMULQ 0(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 248(SP),AX\n\tMULQ 8(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 248(SP),AX\n\tMULQ 16(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 248(SP),AX\n\tMULQ 24(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 248(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 256(SP),AX\n\tMULQ 0(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 256(SP),AX\n\tMULQ 8(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 256(SP),AX\n\tMULQ 16(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 256(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 24(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 256(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 264(SP),AX\n\tMULQ 0(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 264(SP),AX\n\tMULQ 8(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 200(SP),AX\n\tMULQ 24(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 200(SP),AX\n\tMULQ 32(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 272(SP),AX\n\tMULQ 0(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 208(SP),AX\n\tMULQ 16(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 208(SP),AX\n\tMULQ 24(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 208(SP),AX\n\tMULQ 32(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tANDQ DX,SI\n\tADDQ R10,CX\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tANDQ DX,R8\n\tADDQ R12,CX\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tANDQ DX,R9\n\tADDQ R14,CX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tANDQ DX,AX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,DX\n\tMOVQ R8,CX\n\tMOVQ R9,R11\n\tMOVQ AX,R12\n\tMOVQ R10,R13\n\tADDQ ·_2P0(SB),DX\n\tADDQ ·_2P1234(SB),CX\n\tADDQ ·_2P1234(SB),R11\n\tADDQ ·_2P1234(SB),R12\n\tADDQ ·_2P1234(SB),R13\n\tADDQ 40(SP),SI\n\tADDQ 48(SP),R8\n\tADDQ 56(SP),R9\n\tADDQ 64(SP),AX\n\tADDQ 72(SP),R10\n\tSUBQ 40(SP),DX\n\tSUBQ 48(SP),CX\n\tSUBQ 56(SP),R11\n\tSUBQ 64(SP),R12\n\tSUBQ 72(SP),R13\n\tMOVQ SI,120(DI)\n\tMOVQ R8,128(DI)\n\tMOVQ R9,136(DI)\n\tMOVQ AX,144(DI)\n\tMOVQ R10,152(DI)\n\tMOVQ DX,160(DI)\n\tMOVQ CX,168(DI)\n\tMOVQ R11,176(DI)\n\tMOVQ R12,184(DI)\n\tMOVQ R13,192(DI)\n\tMOVQ 120(DI),AX\n\tMULQ 120(DI)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 120(DI),AX\n\tSHLQ $1,AX\n\tMULQ 128(DI)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 120(DI),AX\n\tSHLQ $1,AX\n\tMULQ 136(DI)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 120(DI),AX\n\tSHLQ $1,AX\n\tMULQ 144(DI)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 120(DI),AX\n\tSHLQ $1,AX\n\tMULQ 152(DI)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 128(DI),AX\n\tMULQ 128(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 128(DI),AX\n\tSHLQ $1,AX\n\tMULQ 136(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 128(DI),AX\n\tSHLQ $1,AX\n\tMULQ 144(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 128(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 152(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 136(DI),AX\n\tMULQ 136(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 136(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 144(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 136(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 152(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 144(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 144(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 144(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 152(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 152(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 152(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tANDQ DX,SI\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tADDQ R10,CX\n\tANDQ DX,R8\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tADDQ R12,CX\n\tANDQ DX,R9\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tADDQ R14,CX\n\tANDQ DX,AX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,120(DI)\n\tMOVQ R8,128(DI)\n\tMOVQ R9,136(DI)\n\tMOVQ AX,144(DI)\n\tMOVQ R10,152(DI)\n\tMOVQ 160(DI),AX\n\tMULQ 160(DI)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 160(DI),AX\n\tSHLQ $1,AX\n\tMULQ 168(DI)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 160(DI),AX\n\tSHLQ $1,AX\n\tMULQ 176(DI)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 160(DI),AX\n\tSHLQ $1,AX\n\tMULQ 184(DI)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 160(DI),AX\n\tSHLQ $1,AX\n\tMULQ 192(DI)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 168(DI),AX\n\tMULQ 168(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 168(DI),AX\n\tSHLQ $1,AX\n\tMULQ 176(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 168(DI),AX\n\tSHLQ $1,AX\n\tMULQ 184(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 168(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 192(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 176(DI),AX\n\tMULQ 176(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 176(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 184(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 176(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 192(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 184(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 184(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 184(DI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 192(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 192(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 192(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tANDQ DX,SI\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tADDQ R10,CX\n\tANDQ DX,R8\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tADDQ R12,CX\n\tANDQ DX,R9\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tADDQ R14,CX\n\tANDQ DX,AX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,160(DI)\n\tMOVQ R8,168(DI)\n\tMOVQ R9,176(DI)\n\tMOVQ AX,184(DI)\n\tMOVQ R10,192(DI)\n\tMOVQ 184(DI),SI\n\tIMUL3Q $19,SI,AX\n\tMOVQ AX,0(SP)\n\tMULQ 16(DI)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 192(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,8(SP)\n\tMULQ 8(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 160(DI),AX\n\tMULQ 0(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 160(DI),AX\n\tMULQ 8(DI)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 160(DI),AX\n\tMULQ 16(DI)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 160(DI),AX\n\tMULQ 24(DI)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 160(DI),AX\n\tMULQ 32(DI)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 168(DI),AX\n\tMULQ 0(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 168(DI),AX\n\tMULQ 8(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 168(DI),AX\n\tMULQ 16(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 168(DI),AX\n\tMULQ 24(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 168(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 176(DI),AX\n\tMULQ 0(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 176(DI),AX\n\tMULQ 8(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 176(DI),AX\n\tMULQ 16(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 176(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 24(DI)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 176(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 184(DI),AX\n\tMULQ 0(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 184(DI),AX\n\tMULQ 8(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 0(SP),AX\n\tMULQ 24(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 0(SP),AX\n\tMULQ 32(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 192(DI),AX\n\tMULQ 0(DI)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 8(SP),AX\n\tMULQ 16(DI)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 8(SP),AX\n\tMULQ 24(DI)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SP),AX\n\tMULQ 32(DI)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tANDQ DX,SI\n\tADDQ R10,CX\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tANDQ DX,R8\n\tADDQ R12,CX\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tANDQ DX,R9\n\tADDQ R14,CX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tANDQ DX,AX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,160(DI)\n\tMOVQ R8,168(DI)\n\tMOVQ R9,176(DI)\n\tMOVQ AX,184(DI)\n\tMOVQ R10,192(DI)\n\tMOVQ 144(SP),SI\n\tIMUL3Q $19,SI,AX\n\tMOVQ AX,0(SP)\n\tMULQ 96(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 152(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,8(SP)\n\tMULQ 88(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 120(SP),AX\n\tMULQ 80(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 120(SP),AX\n\tMULQ 88(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 120(SP),AX\n\tMULQ 96(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 120(SP),AX\n\tMULQ 104(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 120(SP),AX\n\tMULQ 112(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 128(SP),AX\n\tMULQ 80(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 128(SP),AX\n\tMULQ 88(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 128(SP),AX\n\tMULQ 96(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 128(SP),AX\n\tMULQ 104(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 128(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 112(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 136(SP),AX\n\tMULQ 80(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 136(SP),AX\n\tMULQ 88(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 136(SP),AX\n\tMULQ 96(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 136(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 104(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 136(SP),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 112(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 144(SP),AX\n\tMULQ 80(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 144(SP),AX\n\tMULQ 88(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 0(SP),AX\n\tMULQ 104(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 0(SP),AX\n\tMULQ 112(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 152(SP),AX\n\tMULQ 80(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 8(SP),AX\n\tMULQ 96(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 8(SP),AX\n\tMULQ 104(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SP),AX\n\tMULQ 112(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tANDQ DX,SI\n\tADDQ R10,CX\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tANDQ DX,R8\n\tADDQ R12,CX\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tANDQ DX,R9\n\tADDQ R14,CX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tANDQ DX,AX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,40(DI)\n\tMOVQ R8,48(DI)\n\tMOVQ R9,56(DI)\n\tMOVQ AX,64(DI)\n\tMOVQ R10,72(DI)\n\tMOVQ 160(SP),AX\n\tMULQ ·_121666_213(SB)\n\tSHRQ $13,AX\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 168(SP),AX\n\tMULQ ·_121666_213(SB)\n\tSHRQ $13,AX\n\tADDQ AX,CX\n\tMOVQ DX,R8\n\tMOVQ 176(SP),AX\n\tMULQ ·_121666_213(SB)\n\tSHRQ $13,AX\n\tADDQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 184(SP),AX\n\tMULQ ·_121666_213(SB)\n\tSHRQ $13,AX\n\tADDQ AX,R9\n\tMOVQ DX,R10\n\tMOVQ 192(SP),AX\n\tMULQ ·_121666_213(SB)\n\tSHRQ $13,AX\n\tADDQ AX,R10\n\tIMUL3Q $19,DX,DX\n\tADDQ DX,SI\n\tADDQ 80(SP),SI\n\tADDQ 88(SP),CX\n\tADDQ 96(SP),R8\n\tADDQ 104(SP),R9\n\tADDQ 112(SP),R10\n\tMOVQ SI,80(DI)\n\tMOVQ CX,88(DI)\n\tMOVQ R8,96(DI)\n\tMOVQ R9,104(DI)\n\tMOVQ R10,112(DI)\n\tMOVQ 104(DI),SI\n\tIMUL3Q $19,SI,AX\n\tMOVQ AX,0(SP)\n\tMULQ 176(SP)\n\tMOVQ AX,SI\n\tMOVQ DX,CX\n\tMOVQ 112(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,8(SP)\n\tMULQ 168(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 80(DI),AX\n\tMULQ 160(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 80(DI),AX\n\tMULQ 168(SP)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 80(DI),AX\n\tMULQ 176(SP)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 80(DI),AX\n\tMULQ 184(SP)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 80(DI),AX\n\tMULQ 192(SP)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 88(DI),AX\n\tMULQ 160(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 88(DI),AX\n\tMULQ 168(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 88(DI),AX\n\tMULQ 176(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 88(DI),AX\n\tMULQ 184(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 88(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 192(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 96(DI),AX\n\tMULQ 160(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 96(DI),AX\n\tMULQ 168(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 96(DI),AX\n\tMULQ 176(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 96(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 184(SP)\n\tADDQ AX,SI\n\tADCQ DX,CX\n\tMOVQ 96(DI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 192(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 104(DI),AX\n\tMULQ 160(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 104(DI),AX\n\tMULQ 168(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 0(SP),AX\n\tMULQ 184(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 0(SP),AX\n\tMULQ 192(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 112(DI),AX\n\tMULQ 160(SP)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 8(SP),AX\n\tMULQ 176(SP)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 8(SP),AX\n\tMULQ 184(SP)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SP),AX\n\tMULQ 192(SP)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ $REDMASK51,DX\n\tSHLQ $13,CX:SI\n\tANDQ DX,SI\n\tSHLQ $13,R9:R8\n\tANDQ DX,R8\n\tADDQ CX,R8\n\tSHLQ $13,R11:R10\n\tANDQ DX,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ DX,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ DX,R14\n\tADDQ R13,R14\n\tIMUL3Q $19,R15,CX\n\tADDQ CX,SI\n\tMOVQ SI,CX\n\tSHRQ $51,CX\n\tADDQ R8,CX\n\tMOVQ CX,R8\n\tSHRQ $51,CX\n\tANDQ DX,SI\n\tADDQ R10,CX\n\tMOVQ CX,R9\n\tSHRQ $51,CX\n\tANDQ DX,R8\n\tADDQ R12,CX\n\tMOVQ CX,AX\n\tSHRQ $51,CX\n\tANDQ DX,R9\n\tADDQ R14,CX\n\tMOVQ CX,R10\n\tSHRQ $51,CX\n\tANDQ DX,AX\n\tIMUL3Q $19,CX,CX\n\tADDQ CX,SI\n\tANDQ DX,R10\n\tMOVQ SI,80(DI)\n\tMOVQ R8,88(DI)\n\tMOVQ R9,96(DI)\n\tMOVQ AX,104(DI)\n\tMOVQ R10,112(DI)\n\tRET\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.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 amd64,!gccgo,!appengine\n\npackage curve25519\n\n// These functions are implemented in the .s files. The names of the functions\n// in the rest of the file are also taken from the SUPERCOP sources to help\n// people following along.\n\n//go:noescape\n\nfunc cswap(inout *[5]uint64, v uint64)\n\n//go:noescape\n\nfunc ladderstep(inout *[5][5]uint64)\n\n//go:noescape\n\nfunc freeze(inout *[5]uint64)\n\n//go:noescape\n\nfunc mul(dest, a, b *[5]uint64)\n\n//go:noescape\n\nfunc square(out, in *[5]uint64)\n\n// mladder uses a Montgomery ladder to calculate (xr/zr) *= s.\nfunc mladder(xr, zr *[5]uint64, s *[32]byte) {\n\tvar work [5][5]uint64\n\n\twork[0] = *xr\n\tsetint(&work[1], 1)\n\tsetint(&work[2], 0)\n\twork[3] = *xr\n\tsetint(&work[4], 1)\n\n\tj := uint(6)\n\tvar prevbit byte\n\n\tfor i := 31; i >= 0; i-- {\n\t\tfor j < 8 {\n\t\t\tbit := ((*s)[i] >> j) & 1\n\t\t\tswap := bit ^ prevbit\n\t\t\tprevbit = bit\n\t\t\tcswap(&work[1], uint64(swap))\n\t\t\tladderstep(&work)\n\t\t\tj--\n\t\t}\n\t\tj = 7\n\t}\n\n\t*xr = work[1]\n\t*zr = work[2]\n}\n\nfunc scalarMult(out, in, base *[32]byte) {\n\tvar e [32]byte\n\tcopy(e[:], (*in)[:])\n\te[0] &= 248\n\te[31] &= 127\n\te[31] |= 64\n\n\tvar t, z [5]uint64\n\tunpack(&t, base)\n\tmladder(&t, &z, &e)\n\tinvert(&z, &z)\n\tmul(&t, &t, &z)\n\tpack(out, &t)\n}\n\nfunc setint(r *[5]uint64, v uint64) {\n\tr[0] = v\n\tr[1] = 0\n\tr[2] = 0\n\tr[3] = 0\n\tr[4] = 0\n}\n\n// unpack sets r = x where r consists of 5, 51-bit limbs in little-endian\n// order.\nfunc unpack(r *[5]uint64, x *[32]byte) {\n\tr[0] = uint64(x[0]) |\n\t\tuint64(x[1])<<8 |\n\t\tuint64(x[2])<<16 |\n\t\tuint64(x[3])<<24 |\n\t\tuint64(x[4])<<32 |\n\t\tuint64(x[5])<<40 |\n\t\tuint64(x[6]&7)<<48\n\n\tr[1] = uint64(x[6])>>3 |\n\t\tuint64(x[7])<<5 |\n\t\tuint64(x[8])<<13 |\n\t\tuint64(x[9])<<21 |\n\t\tuint64(x[10])<<29 |\n\t\tuint64(x[11])<<37 |\n\t\tuint64(x[12]&63)<<45\n\n\tr[2] = uint64(x[12])>>6 |\n\t\tuint64(x[13])<<2 |\n\t\tuint64(x[14])<<10 |\n\t\tuint64(x[15])<<18 |\n\t\tuint64(x[16])<<26 |\n\t\tuint64(x[17])<<34 |\n\t\tuint64(x[18])<<42 |\n\t\tuint64(x[19]&1)<<50\n\n\tr[3] = uint64(x[19])>>1 |\n\t\tuint64(x[20])<<7 |\n\t\tuint64(x[21])<<15 |\n\t\tuint64(x[22])<<23 |\n\t\tuint64(x[23])<<31 |\n\t\tuint64(x[24])<<39 |\n\t\tuint64(x[25]&15)<<47\n\n\tr[4] = uint64(x[25])>>4 |\n\t\tuint64(x[26])<<4 |\n\t\tuint64(x[27])<<12 |\n\t\tuint64(x[28])<<20 |\n\t\tuint64(x[29])<<28 |\n\t\tuint64(x[30])<<36 |\n\t\tuint64(x[31]&127)<<44\n}\n\n// pack sets out = x where out is the usual, little-endian form of the 5,\n// 51-bit limbs in x.\nfunc pack(out *[32]byte, x *[5]uint64) {\n\tt := *x\n\tfreeze(&t)\n\n\tout[0] = byte(t[0])\n\tout[1] = byte(t[0] >> 8)\n\tout[2] = byte(t[0] >> 16)\n\tout[3] = byte(t[0] >> 24)\n\tout[4] = byte(t[0] >> 32)\n\tout[5] = byte(t[0] >> 40)\n\tout[6] = byte(t[0] >> 48)\n\n\tout[6] ^= byte(t[1]<<3) & 0xf8\n\tout[7] = byte(t[1] >> 5)\n\tout[8] = byte(t[1] >> 13)\n\tout[9] = byte(t[1] >> 21)\n\tout[10] = byte(t[1] >> 29)\n\tout[11] = byte(t[1] >> 37)\n\tout[12] = byte(t[1] >> 45)\n\n\tout[12] ^= byte(t[2]<<6) & 0xc0\n\tout[13] = byte(t[2] >> 2)\n\tout[14] = byte(t[2] >> 10)\n\tout[15] = byte(t[2] >> 18)\n\tout[16] = byte(t[2] >> 26)\n\tout[17] = byte(t[2] >> 34)\n\tout[18] = byte(t[2] >> 42)\n\tout[19] = byte(t[2] >> 50)\n\n\tout[19] ^= byte(t[3]<<1) & 0xfe\n\tout[20] = byte(t[3] >> 7)\n\tout[21] = byte(t[3] >> 15)\n\tout[22] = byte(t[3] >> 23)\n\tout[23] = byte(t[3] >> 31)\n\tout[24] = byte(t[3] >> 39)\n\tout[25] = byte(t[3] >> 47)\n\n\tout[25] ^= byte(t[4]<<4) & 0xf0\n\tout[26] = byte(t[4] >> 4)\n\tout[27] = byte(t[4] >> 12)\n\tout[28] = byte(t[4] >> 20)\n\tout[29] = byte(t[4] >> 28)\n\tout[30] = byte(t[4] >> 36)\n\tout[31] = byte(t[4] >> 44)\n}\n\n// invert calculates r = x^-1 mod p using Fermat's little theorem.\nfunc invert(r *[5]uint64, x *[5]uint64) {\n\tvar z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t [5]uint64\n\n\tsquare(&z2, x)        /* 2 */\n\tsquare(&t, &z2)       /* 4 */\n\tsquare(&t, &t)        /* 8 */\n\tmul(&z9, &t, x)       /* 9 */\n\tmul(&z11, &z9, &z2)   /* 11 */\n\tsquare(&t, &z11)      /* 22 */\n\tmul(&z2_5_0, &t, &z9) /* 2^5 - 2^0 = 31 */\n\n\tsquare(&t, &z2_5_0)      /* 2^6 - 2^1 */\n\tfor i := 1; i < 5; i++ { /* 2^20 - 2^10 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&z2_10_0, &t, &z2_5_0) /* 2^10 - 2^0 */\n\n\tsquare(&t, &z2_10_0)      /* 2^11 - 2^1 */\n\tfor i := 1; i < 10; i++ { /* 2^20 - 2^10 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&z2_20_0, &t, &z2_10_0) /* 2^20 - 2^0 */\n\n\tsquare(&t, &z2_20_0)      /* 2^21 - 2^1 */\n\tfor i := 1; i < 20; i++ { /* 2^40 - 2^20 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&t, &t, &z2_20_0) /* 2^40 - 2^0 */\n\n\tsquare(&t, &t)            /* 2^41 - 2^1 */\n\tfor i := 1; i < 10; i++ { /* 2^50 - 2^10 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&z2_50_0, &t, &z2_10_0) /* 2^50 - 2^0 */\n\n\tsquare(&t, &z2_50_0)      /* 2^51 - 2^1 */\n\tfor i := 1; i < 50; i++ { /* 2^100 - 2^50 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&z2_100_0, &t, &z2_50_0) /* 2^100 - 2^0 */\n\n\tsquare(&t, &z2_100_0)      /* 2^101 - 2^1 */\n\tfor i := 1; i < 100; i++ { /* 2^200 - 2^100 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&t, &t, &z2_100_0) /* 2^200 - 2^0 */\n\n\tsquare(&t, &t)            /* 2^201 - 2^1 */\n\tfor i := 1; i < 50; i++ { /* 2^250 - 2^50 */\n\t\tsquare(&t, &t)\n\t}\n\tmul(&t, &t, &z2_50_0) /* 2^250 - 2^0 */\n\n\tsquare(&t, &t) /* 2^251 - 2^1 */\n\tsquare(&t, &t) /* 2^252 - 2^2 */\n\tsquare(&t, &t) /* 2^253 - 2^3 */\n\n\tsquare(&t, &t) /* 2^254 - 2^4 */\n\n\tsquare(&t, &t)   /* 2^255 - 2^5 */\n\tmul(r, &t, &z11) /* 2^255 - 21 */\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/mul_amd64.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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n// +build amd64,!gccgo,!appengine\n\n#include \"const_amd64.h\"\n\n// func mul(dest, a, b *[5]uint64)\nTEXT ·mul(SB),0,$16-24\n\tMOVQ dest+0(FP), DI\n\tMOVQ a+8(FP), SI\n\tMOVQ b+16(FP), DX\n\n\tMOVQ DX,CX\n\tMOVQ 24(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,0(SP)\n\tMULQ 16(CX)\n\tMOVQ AX,R8\n\tMOVQ DX,R9\n\tMOVQ 32(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMOVQ AX,8(SP)\n\tMULQ 8(CX)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 0(SI),AX\n\tMULQ 0(CX)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 0(SI),AX\n\tMULQ 8(CX)\n\tMOVQ AX,R10\n\tMOVQ DX,R11\n\tMOVQ 0(SI),AX\n\tMULQ 16(CX)\n\tMOVQ AX,R12\n\tMOVQ DX,R13\n\tMOVQ 0(SI),AX\n\tMULQ 24(CX)\n\tMOVQ AX,R14\n\tMOVQ DX,R15\n\tMOVQ 0(SI),AX\n\tMULQ 32(CX)\n\tMOVQ AX,BX\n\tMOVQ DX,BP\n\tMOVQ 8(SI),AX\n\tMULQ 0(CX)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SI),AX\n\tMULQ 8(CX)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 8(SI),AX\n\tMULQ 16(CX)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 8(SI),AX\n\tMULQ 24(CX)\n\tADDQ AX,BX\n\tADCQ DX,BP\n\tMOVQ 8(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(CX)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 16(SI),AX\n\tMULQ 0(CX)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 16(SI),AX\n\tMULQ 8(CX)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 16(SI),AX\n\tMULQ 16(CX)\n\tADDQ AX,BX\n\tADCQ DX,BP\n\tMOVQ 16(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 24(CX)\n\tADDQ AX,R8\n\tADCQ DX,R9\n\tMOVQ 16(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(CX)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 24(SI),AX\n\tMULQ 0(CX)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ 24(SI),AX\n\tMULQ 8(CX)\n\tADDQ AX,BX\n\tADCQ DX,BP\n\tMOVQ 0(SP),AX\n\tMULQ 24(CX)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 0(SP),AX\n\tMULQ 32(CX)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 32(SI),AX\n\tMULQ 0(CX)\n\tADDQ AX,BX\n\tADCQ DX,BP\n\tMOVQ 8(SP),AX\n\tMULQ 16(CX)\n\tADDQ AX,R10\n\tADCQ DX,R11\n\tMOVQ 8(SP),AX\n\tMULQ 24(CX)\n\tADDQ AX,R12\n\tADCQ DX,R13\n\tMOVQ 8(SP),AX\n\tMULQ 32(CX)\n\tADDQ AX,R14\n\tADCQ DX,R15\n\tMOVQ $REDMASK51,SI\n\tSHLQ $13,R9:R8\n\tANDQ SI,R8\n\tSHLQ $13,R11:R10\n\tANDQ SI,R10\n\tADDQ R9,R10\n\tSHLQ $13,R13:R12\n\tANDQ SI,R12\n\tADDQ R11,R12\n\tSHLQ $13,R15:R14\n\tANDQ SI,R14\n\tADDQ R13,R14\n\tSHLQ $13,BP:BX\n\tANDQ SI,BX\n\tADDQ R15,BX\n\tIMUL3Q $19,BP,DX\n\tADDQ DX,R8\n\tMOVQ R8,DX\n\tSHRQ $51,DX\n\tADDQ R10,DX\n\tMOVQ DX,CX\n\tSHRQ $51,DX\n\tANDQ SI,R8\n\tADDQ R12,DX\n\tMOVQ DX,R9\n\tSHRQ $51,DX\n\tANDQ SI,CX\n\tADDQ R14,DX\n\tMOVQ DX,AX\n\tSHRQ $51,DX\n\tANDQ SI,R9\n\tADDQ BX,DX\n\tMOVQ DX,R10\n\tSHRQ $51,DX\n\tANDQ SI,AX\n\tIMUL3Q $19,DX,DX\n\tADDQ DX,R8\n\tANDQ SI,R10\n\tMOVQ R8,0(DI)\n\tMOVQ CX,8(DI)\n\tMOVQ R9,16(DI)\n\tMOVQ AX,24(DI)\n\tMOVQ R10,32(DI)\n\tRET\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/curve25519/square_amd64.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// This code was translated into a form compatible with 6a from the public\n// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html\n\n// +build amd64,!gccgo,!appengine\n\n#include \"const_amd64.h\"\n\n// func square(out, in *[5]uint64)\nTEXT ·square(SB),7,$0-16\n\tMOVQ out+0(FP), DI\n\tMOVQ in+8(FP), SI\n\n\tMOVQ 0(SI),AX\n\tMULQ 0(SI)\n\tMOVQ AX,CX\n\tMOVQ DX,R8\n\tMOVQ 0(SI),AX\n\tSHLQ $1,AX\n\tMULQ 8(SI)\n\tMOVQ AX,R9\n\tMOVQ DX,R10\n\tMOVQ 0(SI),AX\n\tSHLQ $1,AX\n\tMULQ 16(SI)\n\tMOVQ AX,R11\n\tMOVQ DX,R12\n\tMOVQ 0(SI),AX\n\tSHLQ $1,AX\n\tMULQ 24(SI)\n\tMOVQ AX,R13\n\tMOVQ DX,R14\n\tMOVQ 0(SI),AX\n\tSHLQ $1,AX\n\tMULQ 32(SI)\n\tMOVQ AX,R15\n\tMOVQ DX,BX\n\tMOVQ 8(SI),AX\n\tMULQ 8(SI)\n\tADDQ AX,R11\n\tADCQ DX,R12\n\tMOVQ 8(SI),AX\n\tSHLQ $1,AX\n\tMULQ 16(SI)\n\tADDQ AX,R13\n\tADCQ DX,R14\n\tMOVQ 8(SI),AX\n\tSHLQ $1,AX\n\tMULQ 24(SI)\n\tADDQ AX,R15\n\tADCQ DX,BX\n\tMOVQ 8(SI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SI)\n\tADDQ AX,CX\n\tADCQ DX,R8\n\tMOVQ 16(SI),AX\n\tMULQ 16(SI)\n\tADDQ AX,R15\n\tADCQ DX,BX\n\tMOVQ 16(SI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 24(SI)\n\tADDQ AX,CX\n\tADCQ DX,R8\n\tMOVQ 16(SI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SI)\n\tADDQ AX,R9\n\tADCQ DX,R10\n\tMOVQ 24(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 24(SI)\n\tADDQ AX,R9\n\tADCQ DX,R10\n\tMOVQ 24(SI),DX\n\tIMUL3Q $38,DX,AX\n\tMULQ 32(SI)\n\tADDQ AX,R11\n\tADCQ DX,R12\n\tMOVQ 32(SI),DX\n\tIMUL3Q $19,DX,AX\n\tMULQ 32(SI)\n\tADDQ AX,R13\n\tADCQ DX,R14\n\tMOVQ $REDMASK51,SI\n\tSHLQ $13,R8:CX\n\tANDQ SI,CX\n\tSHLQ $13,R10:R9\n\tANDQ SI,R9\n\tADDQ R8,R9\n\tSHLQ $13,R12:R11\n\tANDQ SI,R11\n\tADDQ R10,R11\n\tSHLQ $13,R14:R13\n\tANDQ SI,R13\n\tADDQ R12,R13\n\tSHLQ $13,BX:R15\n\tANDQ SI,R15\n\tADDQ R14,R15\n\tIMUL3Q $19,BX,DX\n\tADDQ DX,CX\n\tMOVQ CX,DX\n\tSHRQ $51,DX\n\tADDQ R9,DX\n\tANDQ SI,CX\n\tMOVQ DX,R8\n\tSHRQ $51,DX\n\tADDQ R11,DX\n\tANDQ SI,R8\n\tMOVQ DX,R9\n\tSHRQ $51,DX\n\tADDQ R13,DX\n\tANDQ SI,R9\n\tMOVQ DX,AX\n\tSHRQ $51,DX\n\tADDQ R15,DX\n\tANDQ SI,AX\n\tMOVQ DX,R10\n\tSHRQ $51,DX\n\tIMUL3Q $19,DX,DX\n\tADDQ DX,CX\n\tANDQ SI,R10\n\tMOVQ CX,0(DI)\n\tMOVQ R8,8(DI)\n\tMOVQ R9,16(DI)\n\tMOVQ AX,24(DI)\n\tMOVQ R10,32(DI)\n\tRET\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ed25519/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ed25519/ed25519.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 ed25519 implements the Ed25519 signature algorithm. See\n// http://ed25519.cr.yp.to/.\n//\n// These functions are also compatible with the “Ed25519” function defined in\n// https://tools.ietf.org/html/draft-irtf-cfrg-eddsa-05.\npackage ed25519\n\n// This code is a port of the public domain, “ref10” implementation of ed25519\n// from SUPERCOP.\n\nimport (\n\t\"crypto\"\n\tcryptorand \"crypto/rand\"\n\t\"crypto/sha512\"\n\t\"crypto/subtle\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"golang.org/x/crypto/ed25519/internal/edwards25519\"\n)\n\nconst (\n\t// PublicKeySize is the size, in bytes, of public keys as used in this package.\n\tPublicKeySize = 32\n\t// PrivateKeySize is the size, in bytes, of private keys as used in this package.\n\tPrivateKeySize = 64\n\t// SignatureSize is the size, in bytes, of signatures generated and verified by this package.\n\tSignatureSize = 64\n)\n\n// PublicKey is the type of Ed25519 public keys.\ntype PublicKey []byte\n\n// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.\ntype PrivateKey []byte\n\n// Public returns the PublicKey corresponding to priv.\nfunc (priv PrivateKey) Public() crypto.PublicKey {\n\tpublicKey := make([]byte, PublicKeySize)\n\tcopy(publicKey, priv[32:])\n\treturn PublicKey(publicKey)\n}\n\n// Sign signs the given message with priv.\n// Ed25519 performs two passes over messages to be signed and therefore cannot\n// handle pre-hashed messages. Thus opts.HashFunc() must return zero to\n// indicate the message hasn't been hashed. This can be achieved by passing\n// crypto.Hash(0) as the value for opts.\nfunc (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) {\n\tif opts.HashFunc() != crypto.Hash(0) {\n\t\treturn nil, errors.New(\"ed25519: cannot sign hashed message\")\n\t}\n\n\treturn Sign(priv, message), nil\n}\n\n// GenerateKey generates a public/private key pair using entropy from rand.\n// If rand is nil, crypto/rand.Reader will be used.\nfunc GenerateKey(rand io.Reader) (publicKey PublicKey, privateKey PrivateKey, err error) {\n\tif rand == nil {\n\t\trand = cryptorand.Reader\n\t}\n\n\tprivateKey = make([]byte, PrivateKeySize)\n\tpublicKey = make([]byte, PublicKeySize)\n\t_, err = io.ReadFull(rand, privateKey[:32])\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tdigest := sha512.Sum512(privateKey[:32])\n\tdigest[0] &= 248\n\tdigest[31] &= 127\n\tdigest[31] |= 64\n\n\tvar A edwards25519.ExtendedGroupElement\n\tvar hBytes [32]byte\n\tcopy(hBytes[:], digest[:])\n\tedwards25519.GeScalarMultBase(&A, &hBytes)\n\tvar publicKeyBytes [32]byte\n\tA.ToBytes(&publicKeyBytes)\n\n\tcopy(privateKey[32:], publicKeyBytes[:])\n\tcopy(publicKey, publicKeyBytes[:])\n\n\treturn publicKey, privateKey, nil\n}\n\n// Sign signs the message with privateKey and returns a signature. It will\n// panic if len(privateKey) is not PrivateKeySize.\nfunc Sign(privateKey PrivateKey, message []byte) []byte {\n\tif l := len(privateKey); l != PrivateKeySize {\n\t\tpanic(\"ed25519: bad private key length: \" + strconv.Itoa(l))\n\t}\n\n\th := sha512.New()\n\th.Write(privateKey[:32])\n\n\tvar digest1, messageDigest, hramDigest [64]byte\n\tvar expandedSecretKey [32]byte\n\th.Sum(digest1[:0])\n\tcopy(expandedSecretKey[:], digest1[:])\n\texpandedSecretKey[0] &= 248\n\texpandedSecretKey[31] &= 63\n\texpandedSecretKey[31] |= 64\n\n\th.Reset()\n\th.Write(digest1[32:])\n\th.Write(message)\n\th.Sum(messageDigest[:0])\n\n\tvar messageDigestReduced [32]byte\n\tedwards25519.ScReduce(&messageDigestReduced, &messageDigest)\n\tvar R edwards25519.ExtendedGroupElement\n\tedwards25519.GeScalarMultBase(&R, &messageDigestReduced)\n\n\tvar encodedR [32]byte\n\tR.ToBytes(&encodedR)\n\n\th.Reset()\n\th.Write(encodedR[:])\n\th.Write(privateKey[32:])\n\th.Write(message)\n\th.Sum(hramDigest[:0])\n\tvar hramDigestReduced [32]byte\n\tedwards25519.ScReduce(&hramDigestReduced, &hramDigest)\n\n\tvar s [32]byte\n\tedwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced)\n\n\tsignature := make([]byte, SignatureSize)\n\tcopy(signature[:], encodedR[:])\n\tcopy(signature[32:], s[:])\n\n\treturn signature\n}\n\n// Verify reports whether sig is a valid signature of message by publicKey. It\n// will panic if len(publicKey) is not PublicKeySize.\nfunc Verify(publicKey PublicKey, message, sig []byte) bool {\n\tif l := len(publicKey); l != PublicKeySize {\n\t\tpanic(\"ed25519: bad public key length: \" + strconv.Itoa(l))\n\t}\n\n\tif len(sig) != SignatureSize || sig[63]&224 != 0 {\n\t\treturn false\n\t}\n\n\tvar A edwards25519.ExtendedGroupElement\n\tvar publicKeyBytes [32]byte\n\tcopy(publicKeyBytes[:], publicKey)\n\tif !A.FromBytes(&publicKeyBytes) {\n\t\treturn false\n\t}\n\tedwards25519.FeNeg(&A.X, &A.X)\n\tedwards25519.FeNeg(&A.T, &A.T)\n\n\th := sha512.New()\n\th.Write(sig[:32])\n\th.Write(publicKey[:])\n\th.Write(message)\n\tvar digest [64]byte\n\th.Sum(digest[:0])\n\n\tvar hReduced [32]byte\n\tedwards25519.ScReduce(&hReduced, &digest)\n\n\tvar R edwards25519.ProjectiveGroupElement\n\tvar b [32]byte\n\tcopy(b[:], sig[32:])\n\tedwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &b)\n\n\tvar checkR [32]byte\n\tR.ToBytes(&checkR)\n\treturn subtle.ConstantTimeCompare(sig[:32], checkR[:]) == 1\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.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 edwards25519\n\n// These values are from the public domain, “ref10” implementation of ed25519\n// from SUPERCOP.\n\n// d is a constant in the Edwards curve equation.\nvar d = FieldElement{\n\t-10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116,\n}\n\n// d2 is 2*d.\nvar d2 = FieldElement{\n\t-21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199,\n}\n\n// SqrtM1 is the square-root of -1 in the field.\nvar SqrtM1 = FieldElement{\n\t-32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482,\n}\n\n// A is a constant in the Montgomery-form of curve25519.\nvar A = FieldElement{\n\t486662, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n}\n\n// bi contains precomputed multiples of the base-point. See the Ed25519 paper\n// for a discussion about how these values are used.\nvar bi = [8]PreComputedGroupElement{\n\t{\n\t\tFieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605},\n\t\tFieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378},\n\t\tFieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546},\n\t},\n\t{\n\t\tFieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024},\n\t\tFieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574},\n\t\tFieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357},\n\t},\n\t{\n\t\tFieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380},\n\t\tFieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306},\n\t\tFieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942},\n\t},\n\t{\n\t\tFieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766},\n\t\tFieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701},\n\t\tFieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300},\n\t},\n\t{\n\t\tFieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877},\n\t\tFieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951},\n\t\tFieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784},\n\t},\n\t{\n\t\tFieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436},\n\t\tFieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918},\n\t\tFieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877},\n\t},\n\t{\n\t\tFieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800},\n\t\tFieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305},\n\t\tFieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300},\n\t},\n\t{\n\t\tFieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876},\n\t\tFieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619},\n\t\tFieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683},\n\t},\n}\n\n// base contains precomputed multiples of the base-point. See the Ed25519 paper\n// for a discussion about how these values are used.\nvar base = [32][8]PreComputedGroupElement{\n\t{\n\t\t{\n\t\t\tFieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605},\n\t\t\tFieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378},\n\t\t\tFieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303},\n\t\t\tFieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081},\n\t\t\tFieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024},\n\t\t\tFieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574},\n\t\t\tFieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540},\n\t\t\tFieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397},\n\t\t\tFieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325},\n\t\t},\n\t\t{\n\t\t\tFieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380},\n\t\t\tFieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306},\n\t\t\tFieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777},\n\t\t\tFieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737},\n\t\t\tFieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652},\n\t\t},\n\t\t{\n\t\t\tFieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766},\n\t\t\tFieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701},\n\t\t\tFieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300},\n\t\t},\n\t\t{\n\t\t\tFieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726},\n\t\t\tFieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955},\n\t\t\tFieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171},\n\t\t\tFieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510},\n\t\t\tFieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639},\n\t\t\tFieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963},\n\t\t\tFieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568},\n\t\t\tFieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335},\n\t\t\tFieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007},\n\t\t\tFieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772},\n\t\t\tFieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653},\n\t\t},\n\t\t{\n\t\t\tFieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567},\n\t\t\tFieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686},\n\t\t\tFieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887},\n\t\t\tFieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954},\n\t\t\tFieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953},\n\t\t},\n\t\t{\n\t\t\tFieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833},\n\t\t\tFieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532},\n\t\t\tFieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876},\n\t\t},\n\t\t{\n\t\t\tFieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268},\n\t\t\tFieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214},\n\t\t\tFieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800},\n\t\t\tFieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645},\n\t\t\tFieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664},\n\t\t},\n\t\t{\n\t\t\tFieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933},\n\t\t\tFieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182},\n\t\t\tFieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991},\n\t\t\tFieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880},\n\t\t\tFieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295},\n\t\t\tFieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788},\n\t\t\tFieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026},\n\t\t\tFieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347},\n\t\t\tFieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395},\n\t\t\tFieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278},\n\t\t\tFieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890},\n\t\t},\n\t\t{\n\t\t\tFieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995},\n\t\t\tFieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596},\n\t\t\tFieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060},\n\t\t\tFieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608},\n\t\t\tFieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389},\n\t\t\tFieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016},\n\t\t\tFieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505},\n\t\t\tFieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553},\n\t\t\tFieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220},\n\t\t\tFieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631},\n\t\t\tFieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099},\n\t\t},\n\t\t{\n\t\t\tFieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556},\n\t\t\tFieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749},\n\t\t\tFieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930},\n\t\t},\n\t\t{\n\t\t\tFieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391},\n\t\t\tFieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253},\n\t\t\tFieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066},\n\t\t},\n\t\t{\n\t\t\tFieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958},\n\t\t\tFieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082},\n\t\t\tFieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521},\n\t\t\tFieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807},\n\t\t\tFieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948},\n\t\t},\n\t\t{\n\t\t\tFieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134},\n\t\t\tFieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455},\n\t\t\tFieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069},\n\t\t\tFieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746},\n\t\t\tFieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919},\n\t\t},\n\t\t{\n\t\t\tFieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837},\n\t\t\tFieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906},\n\t\t\tFieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817},\n\t\t\tFieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098},\n\t\t\tFieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504},\n\t\t\tFieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727},\n\t\t\tFieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003},\n\t\t\tFieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605},\n\t\t\tFieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701},\n\t\t\tFieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683},\n\t\t\tFieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563},\n\t\t\tFieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260},\n\t\t\tFieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672},\n\t\t\tFieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686},\n\t\t\tFieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182},\n\t\t\tFieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277},\n\t\t\tFieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474},\n\t\t\tFieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539},\n\t\t\tFieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970},\n\t\t\tFieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756},\n\t\t\tFieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683},\n\t\t\tFieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655},\n\t\t\tFieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125},\n\t\t\tFieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839},\n\t\t\tFieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664},\n\t\t},\n\t\t{\n\t\t\tFieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294},\n\t\t\tFieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899},\n\t\t\tFieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070},\n\t\t},\n\t\t{\n\t\t\tFieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294},\n\t\t\tFieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949},\n\t\t\tFieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420},\n\t\t\tFieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940},\n\t\t\tFieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567},\n\t\t\tFieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127},\n\t\t\tFieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887},\n\t\t\tFieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964},\n\t\t\tFieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195},\n\t\t},\n\t\t{\n\t\t\tFieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244},\n\t\t\tFieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999},\n\t\t\tFieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274},\n\t\t\tFieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236},\n\t\t\tFieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761},\n\t\t\tFieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884},\n\t\t\tFieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638},\n\t\t\tFieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490},\n\t\t\tFieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170},\n\t\t},\n\t\t{\n\t\t\tFieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736},\n\t\t\tFieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124},\n\t\t\tFieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392},\n\t\t},\n\t\t{\n\t\t\tFieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029},\n\t\t\tFieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048},\n\t\t\tFieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593},\n\t\t\tFieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071},\n\t\t\tFieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692},\n\t\t},\n\t\t{\n\t\t\tFieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687},\n\t\t\tFieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441},\n\t\t\tFieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460},\n\t\t\tFieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007},\n\t\t\tFieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005},\n\t\t\tFieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674},\n\t\t\tFieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035},\n\t\t},\n\t\t{\n\t\t\tFieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590},\n\t\t\tFieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957},\n\t\t\tFieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812},\n\t\t},\n\t\t{\n\t\t\tFieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740},\n\t\t\tFieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122},\n\t\t\tFieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158},\n\t\t},\n\t\t{\n\t\t\tFieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885},\n\t\t\tFieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140},\n\t\t\tFieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857},\n\t\t},\n\t\t{\n\t\t\tFieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155},\n\t\t\tFieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260},\n\t\t\tFieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677},\n\t\t\tFieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815},\n\t\t\tFieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203},\n\t\t\tFieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208},\n\t\t\tFieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850},\n\t\t\tFieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389},\n\t\t\tFieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689},\n\t\t\tFieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880},\n\t\t\tFieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632},\n\t\t\tFieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412},\n\t\t\tFieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038},\n\t\t\tFieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232},\n\t\t\tFieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943},\n\t\t},\n\t\t{\n\t\t\tFieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856},\n\t\t\tFieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738},\n\t\t\tFieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718},\n\t\t\tFieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697},\n\t\t\tFieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912},\n\t\t\tFieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358},\n\t\t\tFieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849},\n\t\t},\n\t\t{\n\t\t\tFieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307},\n\t\t\tFieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977},\n\t\t\tFieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644},\n\t\t\tFieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616},\n\t\t\tFieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099},\n\t\t\tFieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341},\n\t\t\tFieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646},\n\t\t\tFieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425},\n\t\t\tFieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743},\n\t\t\tFieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822},\n\t\t\tFieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462},\n\t\t},\n\t\t{\n\t\t\tFieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985},\n\t\t\tFieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702},\n\t\t\tFieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797},\n\t\t},\n\t\t{\n\t\t\tFieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293},\n\t\t\tFieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100},\n\t\t\tFieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186},\n\t\t\tFieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610},\n\t\t\tFieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707},\n\t\t},\n\t\t{\n\t\t\tFieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220},\n\t\t\tFieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025},\n\t\t\tFieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044},\n\t\t},\n\t\t{\n\t\t\tFieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992},\n\t\t\tFieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027},\n\t\t\tFieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197},\n\t\t},\n\t\t{\n\t\t\tFieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901},\n\t\t\tFieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952},\n\t\t\tFieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390},\n\t\t\tFieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730},\n\t\t\tFieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180},\n\t\t\tFieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272},\n\t\t\tFieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970},\n\t\t\tFieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772},\n\t\t\tFieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750},\n\t\t\tFieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373},\n\t\t\tFieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144},\n\t\t\tFieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195},\n\t\t\tFieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684},\n\t\t\tFieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518},\n\t\t\tFieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793},\n\t\t\tFieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794},\n\t\t\tFieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435},\n\t\t},\n\t\t{\n\t\t\tFieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921},\n\t\t\tFieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518},\n\t\t\tFieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563},\n\t\t},\n\t\t{\n\t\t\tFieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278},\n\t\t\tFieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024},\n\t\t\tFieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030},\n\t\t},\n\t\t{\n\t\t\tFieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783},\n\t\t\tFieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717},\n\t\t\tFieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844},\n\t\t},\n\t\t{\n\t\t\tFieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333},\n\t\t\tFieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048},\n\t\t\tFieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760},\n\t\t\tFieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757},\n\t\t\tFieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468},\n\t\t\tFieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184},\n\t\t\tFieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066},\n\t\t\tFieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882},\n\t\t\tFieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101},\n\t\t\tFieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279},\n\t\t\tFieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811},\n\t\t},\n\t\t{\n\t\t\tFieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709},\n\t\t\tFieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714},\n\t\t\tFieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121},\n\t\t},\n\t\t{\n\t\t\tFieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464},\n\t\t\tFieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847},\n\t\t\tFieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400},\n\t\t},\n\t\t{\n\t\t\tFieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414},\n\t\t\tFieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158},\n\t\t\tFieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415},\n\t\t\tFieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459},\n\t\t\tFieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079},\n\t\t},\n\t\t{\n\t\t\tFieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412},\n\t\t\tFieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743},\n\t\t\tFieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022},\n\t\t\tFieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429},\n\t\t\tFieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861},\n\t\t\tFieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000},\n\t\t\tFieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101},\n\t\t},\n\t\t{\n\t\t\tFieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815},\n\t\t\tFieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642},\n\t\t\tFieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966},\n\t\t},\n\t\t{\n\t\t\tFieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574},\n\t\t\tFieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742},\n\t\t\tFieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689},\n\t\t},\n\t\t{\n\t\t\tFieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020},\n\t\t\tFieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772},\n\t\t\tFieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953},\n\t\t\tFieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218},\n\t\t\tFieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265},\n\t\t},\n\t\t{\n\t\t\tFieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073},\n\t\t\tFieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325},\n\t\t\tFieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870},\n\t\t\tFieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863},\n\t\t\tFieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267},\n\t\t\tFieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663},\n\t\t\tFieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673},\n\t\t\tFieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943},\n\t\t\tFieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238},\n\t\t\tFieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064},\n\t\t\tFieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052},\n\t\t\tFieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904},\n\t\t\tFieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979},\n\t\t\tFieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841},\n\t\t\tFieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431},\n\t\t},\n\t\t{\n\t\t\tFieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324},\n\t\t\tFieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940},\n\t\t\tFieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184},\n\t\t\tFieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114},\n\t\t\tFieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878},\n\t\t},\n\t\t{\n\t\t\tFieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784},\n\t\t\tFieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091},\n\t\t\tFieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208},\n\t\t\tFieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864},\n\t\t\tFieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661},\n\t\t},\n\t\t{\n\t\t\tFieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233},\n\t\t\tFieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212},\n\t\t\tFieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068},\n\t\t\tFieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397},\n\t\t\tFieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988},\n\t\t},\n\t\t{\n\t\t\tFieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889},\n\t\t\tFieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038},\n\t\t\tFieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697},\n\t\t},\n\t\t{\n\t\t\tFieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875},\n\t\t\tFieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905},\n\t\t\tFieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656},\n\t\t},\n\t\t{\n\t\t\tFieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818},\n\t\t\tFieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714},\n\t\t\tFieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203},\n\t\t},\n\t\t{\n\t\t\tFieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931},\n\t\t\tFieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024},\n\t\t\tFieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204},\n\t\t\tFieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817},\n\t\t\tFieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504},\n\t\t\tFieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768},\n\t\t\tFieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255},\n\t\t},\n\t\t{\n\t\t\tFieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790},\n\t\t\tFieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438},\n\t\t\tFieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333},\n\t\t},\n\t\t{\n\t\t\tFieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971},\n\t\t\tFieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905},\n\t\t\tFieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409},\n\t\t},\n\t\t{\n\t\t\tFieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409},\n\t\t\tFieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499},\n\t\t\tFieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363},\n\t\t},\n\t\t{\n\t\t\tFieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664},\n\t\t\tFieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324},\n\t\t\tFieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940},\n\t\t},\n\t\t{\n\t\t\tFieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990},\n\t\t\tFieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914},\n\t\t\tFieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290},\n\t\t},\n\t\t{\n\t\t\tFieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257},\n\t\t\tFieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433},\n\t\t\tFieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045},\n\t\t\tFieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093},\n\t\t\tFieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191},\n\t\t\tFieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507},\n\t\t\tFieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906},\n\t\t},\n\t\t{\n\t\t\tFieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018},\n\t\t\tFieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109},\n\t\t\tFieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528},\n\t\t\tFieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625},\n\t\t\tFieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286},\n\t\t},\n\t\t{\n\t\t\tFieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033},\n\t\t\tFieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866},\n\t\t\tFieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075},\n\t\t\tFieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347},\n\t\t\tFieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165},\n\t\t\tFieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588},\n\t\t\tFieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017},\n\t\t\tFieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883},\n\t\t\tFieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961},\n\t\t},\n\t\t{\n\t\t\tFieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043},\n\t\t\tFieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663},\n\t\t\tFieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860},\n\t\t\tFieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466},\n\t\t\tFieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997},\n\t\t\tFieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295},\n\t\t\tFieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369},\n\t\t},\n\t\t{\n\t\t\tFieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385},\n\t\t\tFieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109},\n\t\t\tFieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906},\n\t\t},\n\t\t{\n\t\t\tFieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424},\n\t\t\tFieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185},\n\t\t\tFieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325},\n\t\t\tFieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593},\n\t\t\tFieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644},\n\t\t\tFieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801},\n\t\t\tFieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884},\n\t\t\tFieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577},\n\t\t\tFieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849},\n\t\t},\n\t\t{\n\t\t\tFieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473},\n\t\t\tFieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644},\n\t\t\tFieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599},\n\t\t\tFieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768},\n\t\t\tFieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328},\n\t\t\tFieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369},\n\t\t\tFieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920},\n\t\t},\n\t\t{\n\t\t\tFieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815},\n\t\t\tFieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025},\n\t\t\tFieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448},\n\t\t\tFieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981},\n\t\t\tFieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165},\n\t\t},\n\t\t{\n\t\t\tFieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501},\n\t\t\tFieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073},\n\t\t\tFieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861},\n\t\t},\n\t\t{\n\t\t\tFieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845},\n\t\t\tFieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211},\n\t\t\tFieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870},\n\t\t},\n\t\t{\n\t\t\tFieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096},\n\t\t\tFieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803},\n\t\t\tFieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965},\n\t\t\tFieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505},\n\t\t\tFieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782},\n\t\t\tFieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900},\n\t\t\tFieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208},\n\t\t\tFieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232},\n\t\t\tFieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271},\n\t\t\tFieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326},\n\t\t\tFieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132},\n\t\t},\n\t\t{\n\t\t\tFieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300},\n\t\t\tFieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570},\n\t\t\tFieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994},\n\t\t\tFieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913},\n\t\t\tFieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730},\n\t\t\tFieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096},\n\t\t\tFieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411},\n\t\t\tFieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905},\n\t\t\tFieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870},\n\t\t\tFieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498},\n\t\t\tFieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677},\n\t\t\tFieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647},\n\t\t\tFieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468},\n\t\t\tFieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375},\n\t\t\tFieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155},\n\t\t},\n\t\t{\n\t\t\tFieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725},\n\t\t\tFieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612},\n\t\t\tFieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944},\n\t\t\tFieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928},\n\t\t\tFieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406},\n\t\t},\n\t\t{\n\t\t\tFieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139},\n\t\t\tFieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963},\n\t\t\tFieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693},\n\t\t},\n\t\t{\n\t\t\tFieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734},\n\t\t\tFieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680},\n\t\t\tFieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931},\n\t\t\tFieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654},\n\t\t\tFieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710},\n\t\t},\n\t\t{\n\t\t\tFieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180},\n\t\t\tFieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684},\n\t\t\tFieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501},\n\t\t\tFieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413},\n\t\t\tFieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874},\n\t\t\tFieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962},\n\t\t\tFieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899},\n\t\t},\n\t\t{\n\t\t\tFieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152},\n\t\t\tFieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063},\n\t\t\tFieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146},\n\t\t\tFieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183},\n\t\t\tFieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421},\n\t\t\tFieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622},\n\t\t\tFieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197},\n\t\t},\n\t\t{\n\t\t\tFieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663},\n\t\t\tFieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753},\n\t\t\tFieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862},\n\t\t\tFieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118},\n\t\t\tFieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380},\n\t\t\tFieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824},\n\t\t\tFieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438},\n\t\t\tFieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584},\n\t\t\tFieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471},\n\t\t\tFieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610},\n\t\t\tFieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650},\n\t\t\tFieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369},\n\t\t\tFieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462},\n\t\t\tFieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793},\n\t\t\tFieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226},\n\t\t\tFieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019},\n\t\t\tFieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171},\n\t\t\tFieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132},\n\t\t\tFieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841},\n\t\t},\n\t\t{\n\t\t\tFieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181},\n\t\t\tFieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210},\n\t\t\tFieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040},\n\t\t},\n\t\t{\n\t\t\tFieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935},\n\t\t\tFieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105},\n\t\t\tFieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852},\n\t\t\tFieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581},\n\t\t\tFieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646},\n\t\t},\n\t\t{\n\t\t\tFieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844},\n\t\t\tFieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025},\n\t\t\tFieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068},\n\t\t\tFieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192},\n\t\t\tFieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259},\n\t\t\tFieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426},\n\t\t\tFieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305},\n\t\t\tFieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832},\n\t\t\tFieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011},\n\t\t\tFieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447},\n\t\t\tFieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245},\n\t\t\tFieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859},\n\t\t\tFieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707},\n\t\t\tFieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848},\n\t\t\tFieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391},\n\t\t\tFieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215},\n\t\t\tFieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101},\n\t\t},\n\t\t{\n\t\t\tFieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713},\n\t\t\tFieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849},\n\t\t\tFieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940},\n\t\t\tFieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031},\n\t\t\tFieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243},\n\t\t\tFieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116},\n\t\t\tFieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509},\n\t\t\tFieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883},\n\t\t\tFieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660},\n\t\t\tFieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273},\n\t\t\tFieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560},\n\t\t\tFieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135},\n\t\t\tFieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739},\n\t\t\tFieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756},\n\t\t\tFieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347},\n\t\t\tFieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028},\n\t\t\tFieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799},\n\t\t\tFieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609},\n\t\t\tFieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989},\n\t\t\tFieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523},\n\t\t\tFieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045},\n\t\t\tFieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377},\n\t\t\tFieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480},\n\t\t},\n\t\t{\n\t\t\tFieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016},\n\t\t\tFieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426},\n\t\t\tFieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525},\n\t\t},\n\t\t{\n\t\t\tFieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396},\n\t\t\tFieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080},\n\t\t\tFieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892},\n\t\t},\n\t\t{\n\t\t\tFieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275},\n\t\t\tFieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074},\n\t\t\tFieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717},\n\t\t\tFieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101},\n\t\t\tFieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632},\n\t\t\tFieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415},\n\t\t\tFieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876},\n\t\t\tFieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625},\n\t\t\tFieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478},\n\t\t},\n\t\t{\n\t\t\tFieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164},\n\t\t\tFieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595},\n\t\t\tFieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858},\n\t\t\tFieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193},\n\t\t\tFieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942},\n\t\t\tFieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635},\n\t\t\tFieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948},\n\t\t},\n\t\t{\n\t\t\tFieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935},\n\t\t\tFieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415},\n\t\t\tFieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018},\n\t\t\tFieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778},\n\t\t\tFieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385},\n\t\t\tFieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503},\n\t\t\tFieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056},\n\t\t\tFieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838},\n\t\t\tFieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691},\n\t\t\tFieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118},\n\t\t\tFieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269},\n\t\t\tFieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904},\n\t\t\tFieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193},\n\t\t\tFieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910},\n\t\t\tFieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667},\n\t\t\tFieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481},\n\t\t\tFieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876},\n\t\t},\n\t\t{\n\t\t\tFieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640},\n\t\t\tFieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278},\n\t\t\tFieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112},\n\t\t},\n\t\t{\n\t\t\tFieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272},\n\t\t\tFieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012},\n\t\t\tFieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046},\n\t\t\tFieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345},\n\t\t\tFieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937},\n\t\t\tFieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636},\n\t\t\tFieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429},\n\t\t\tFieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576},\n\t\t\tFieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490},\n\t\t\tFieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104},\n\t\t\tFieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053},\n\t\t},\n\t\t{\n\t\t\tFieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275},\n\t\t\tFieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511},\n\t\t\tFieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439},\n\t\t\tFieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939},\n\t\t\tFieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424},\n\t\t},\n\t\t{\n\t\t\tFieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310},\n\t\t\tFieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608},\n\t\t\tFieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101},\n\t\t\tFieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418},\n\t\t\tFieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356},\n\t\t\tFieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996},\n\t\t\tFieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728},\n\t\t\tFieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658},\n\t\t\tFieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001},\n\t\t\tFieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766},\n\t\t\tFieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373},\n\t\t},\n\t\t{\n\t\t\tFieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458},\n\t\t\tFieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628},\n\t\t\tFieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062},\n\t\t\tFieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616},\n\t\t\tFieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014},\n\t\t},\n\t\t{\n\t\t\tFieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383},\n\t\t\tFieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814},\n\t\t\tFieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718},\n\t\t},\n\t\t{\n\t\t\tFieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417},\n\t\t\tFieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222},\n\t\t\tFieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597},\n\t\t\tFieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970},\n\t\t\tFieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647},\n\t\t\tFieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511},\n\t\t\tFieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032},\n\t\t},\n\t},\n\t{\n\t\t{\n\t\t\tFieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834},\n\t\t\tFieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461},\n\t\t\tFieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516},\n\t\t\tFieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547},\n\t\t\tFieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038},\n\t\t\tFieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741},\n\t\t\tFieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747},\n\t\t\tFieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323},\n\t\t\tFieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373},\n\t\t\tFieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228},\n\t\t\tFieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141},\n\t\t},\n\t\t{\n\t\t\tFieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399},\n\t\t\tFieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831},\n\t\t\tFieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313},\n\t\t\tFieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958},\n\t\t\tFieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577},\n\t\t},\n\t\t{\n\t\t\tFieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743},\n\t\t\tFieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684},\n\t\t\tFieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.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 edwards25519\n\n// This code is a port of the public domain, “ref10” implementation of ed25519\n// from SUPERCOP.\n\n// FieldElement represents an element of the field GF(2^255 - 19).  An element\n// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77\n// t[3]+2^102 t[4]+...+2^230 t[9].  Bounds on each t[i] vary depending on\n// context.\ntype FieldElement [10]int32\n\nvar zero FieldElement\n\nfunc FeZero(fe *FieldElement) {\n\tcopy(fe[:], zero[:])\n}\n\nfunc FeOne(fe *FieldElement) {\n\tFeZero(fe)\n\tfe[0] = 1\n}\n\nfunc FeAdd(dst, a, b *FieldElement) {\n\tdst[0] = a[0] + b[0]\n\tdst[1] = a[1] + b[1]\n\tdst[2] = a[2] + b[2]\n\tdst[3] = a[3] + b[3]\n\tdst[4] = a[4] + b[4]\n\tdst[5] = a[5] + b[5]\n\tdst[6] = a[6] + b[6]\n\tdst[7] = a[7] + b[7]\n\tdst[8] = a[8] + b[8]\n\tdst[9] = a[9] + b[9]\n}\n\nfunc FeSub(dst, a, b *FieldElement) {\n\tdst[0] = a[0] - b[0]\n\tdst[1] = a[1] - b[1]\n\tdst[2] = a[2] - b[2]\n\tdst[3] = a[3] - b[3]\n\tdst[4] = a[4] - b[4]\n\tdst[5] = a[5] - b[5]\n\tdst[6] = a[6] - b[6]\n\tdst[7] = a[7] - b[7]\n\tdst[8] = a[8] - b[8]\n\tdst[9] = a[9] - b[9]\n}\n\nfunc FeCopy(dst, src *FieldElement) {\n\tcopy(dst[:], src[:])\n}\n\n// Replace (f,g) with (g,g) if b == 1;\n// replace (f,g) with (f,g) if b == 0.\n//\n// Preconditions: b in {0,1}.\nfunc FeCMove(f, g *FieldElement, b int32) {\n\tb = -b\n\tf[0] ^= b & (f[0] ^ g[0])\n\tf[1] ^= b & (f[1] ^ g[1])\n\tf[2] ^= b & (f[2] ^ g[2])\n\tf[3] ^= b & (f[3] ^ g[3])\n\tf[4] ^= b & (f[4] ^ g[4])\n\tf[5] ^= b & (f[5] ^ g[5])\n\tf[6] ^= b & (f[6] ^ g[6])\n\tf[7] ^= b & (f[7] ^ g[7])\n\tf[8] ^= b & (f[8] ^ g[8])\n\tf[9] ^= b & (f[9] ^ g[9])\n}\n\nfunc load3(in []byte) int64 {\n\tvar r int64\n\tr = int64(in[0])\n\tr |= int64(in[1]) << 8\n\tr |= int64(in[2]) << 16\n\treturn r\n}\n\nfunc load4(in []byte) int64 {\n\tvar r int64\n\tr = int64(in[0])\n\tr |= int64(in[1]) << 8\n\tr |= int64(in[2]) << 16\n\tr |= int64(in[3]) << 24\n\treturn r\n}\n\nfunc FeFromBytes(dst *FieldElement, src *[32]byte) {\n\th0 := load4(src[:])\n\th1 := load3(src[4:]) << 6\n\th2 := load3(src[7:]) << 5\n\th3 := load3(src[10:]) << 3\n\th4 := load3(src[13:]) << 2\n\th5 := load4(src[16:])\n\th6 := load3(src[20:]) << 7\n\th7 := load3(src[23:]) << 5\n\th8 := load3(src[26:]) << 4\n\th9 := (load3(src[29:]) & 8388607) << 2\n\n\tFeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9)\n}\n\n// FeToBytes marshals h to s.\n// Preconditions:\n//   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n//\n// Write p=2^255-19; q=floor(h/p).\n// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).\n//\n// Proof:\n//   Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.\n//   Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4.\n//\n//   Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).\n//   Then 0<y<1.\n//\n//   Write r=h-pq.\n//   Have 0<=r<=p-1=2^255-20.\n//   Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.\n//\n//   Write x=r+19(2^-255)r+y.\n//   Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.\n//\n//   Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))\n//   so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.\nfunc FeToBytes(s *[32]byte, h *FieldElement) {\n\tvar carry [10]int32\n\n\tq := (19*h[9] + (1 << 24)) >> 25\n\tq = (h[0] + q) >> 26\n\tq = (h[1] + q) >> 25\n\tq = (h[2] + q) >> 26\n\tq = (h[3] + q) >> 25\n\tq = (h[4] + q) >> 26\n\tq = (h[5] + q) >> 25\n\tq = (h[6] + q) >> 26\n\tq = (h[7] + q) >> 25\n\tq = (h[8] + q) >> 26\n\tq = (h[9] + q) >> 25\n\n\t// Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20.\n\th[0] += 19 * q\n\t// Goal: Output h-2^255 q, which is between 0 and 2^255-20.\n\n\tcarry[0] = h[0] >> 26\n\th[1] += carry[0]\n\th[0] -= carry[0] << 26\n\tcarry[1] = h[1] >> 25\n\th[2] += carry[1]\n\th[1] -= carry[1] << 25\n\tcarry[2] = h[2] >> 26\n\th[3] += carry[2]\n\th[2] -= carry[2] << 26\n\tcarry[3] = h[3] >> 25\n\th[4] += carry[3]\n\th[3] -= carry[3] << 25\n\tcarry[4] = h[4] >> 26\n\th[5] += carry[4]\n\th[4] -= carry[4] << 26\n\tcarry[5] = h[5] >> 25\n\th[6] += carry[5]\n\th[5] -= carry[5] << 25\n\tcarry[6] = h[6] >> 26\n\th[7] += carry[6]\n\th[6] -= carry[6] << 26\n\tcarry[7] = h[7] >> 25\n\th[8] += carry[7]\n\th[7] -= carry[7] << 25\n\tcarry[8] = h[8] >> 26\n\th[9] += carry[8]\n\th[8] -= carry[8] << 26\n\tcarry[9] = h[9] >> 25\n\th[9] -= carry[9] << 25\n\t// h10 = carry9\n\n\t// Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.\n\t// Have h[0]+...+2^230 h[9] between 0 and 2^255-1;\n\t// evidently 2^255 h10-2^255 q = 0.\n\t// Goal: Output h[0]+...+2^230 h[9].\n\n\ts[0] = byte(h[0] >> 0)\n\ts[1] = byte(h[0] >> 8)\n\ts[2] = byte(h[0] >> 16)\n\ts[3] = byte((h[0] >> 24) | (h[1] << 2))\n\ts[4] = byte(h[1] >> 6)\n\ts[5] = byte(h[1] >> 14)\n\ts[6] = byte((h[1] >> 22) | (h[2] << 3))\n\ts[7] = byte(h[2] >> 5)\n\ts[8] = byte(h[2] >> 13)\n\ts[9] = byte((h[2] >> 21) | (h[3] << 5))\n\ts[10] = byte(h[3] >> 3)\n\ts[11] = byte(h[3] >> 11)\n\ts[12] = byte((h[3] >> 19) | (h[4] << 6))\n\ts[13] = byte(h[4] >> 2)\n\ts[14] = byte(h[4] >> 10)\n\ts[15] = byte(h[4] >> 18)\n\ts[16] = byte(h[5] >> 0)\n\ts[17] = byte(h[5] >> 8)\n\ts[18] = byte(h[5] >> 16)\n\ts[19] = byte((h[5] >> 24) | (h[6] << 1))\n\ts[20] = byte(h[6] >> 7)\n\ts[21] = byte(h[6] >> 15)\n\ts[22] = byte((h[6] >> 23) | (h[7] << 3))\n\ts[23] = byte(h[7] >> 5)\n\ts[24] = byte(h[7] >> 13)\n\ts[25] = byte((h[7] >> 21) | (h[8] << 4))\n\ts[26] = byte(h[8] >> 4)\n\ts[27] = byte(h[8] >> 12)\n\ts[28] = byte((h[8] >> 20) | (h[9] << 6))\n\ts[29] = byte(h[9] >> 2)\n\ts[30] = byte(h[9] >> 10)\n\ts[31] = byte(h[9] >> 18)\n}\n\nfunc FeIsNegative(f *FieldElement) byte {\n\tvar s [32]byte\n\tFeToBytes(&s, f)\n\treturn s[0] & 1\n}\n\nfunc FeIsNonZero(f *FieldElement) int32 {\n\tvar s [32]byte\n\tFeToBytes(&s, f)\n\tvar x uint8\n\tfor _, b := range s {\n\t\tx |= b\n\t}\n\tx |= x >> 4\n\tx |= x >> 2\n\tx |= x >> 1\n\treturn int32(x & 1)\n}\n\n// FeNeg sets h = -f\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\nfunc FeNeg(h, f *FieldElement) {\n\th[0] = -f[0]\n\th[1] = -f[1]\n\th[2] = -f[2]\n\th[3] = -f[3]\n\th[4] = -f[4]\n\th[5] = -f[5]\n\th[6] = -f[6]\n\th[7] = -f[7]\n\th[8] = -f[8]\n\th[9] = -f[9]\n}\n\nfunc FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) {\n\tvar c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64\n\n\t/*\n\t  |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38))\n\t    i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8\n\t  |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19))\n\t    i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9\n\t*/\n\n\tc0 = (h0 + (1 << 25)) >> 26\n\th1 += c0\n\th0 -= c0 << 26\n\tc4 = (h4 + (1 << 25)) >> 26\n\th5 += c4\n\th4 -= c4 << 26\n\t/* |h0| <= 2^25 */\n\t/* |h4| <= 2^25 */\n\t/* |h1| <= 1.51*2^58 */\n\t/* |h5| <= 1.51*2^58 */\n\n\tc1 = (h1 + (1 << 24)) >> 25\n\th2 += c1\n\th1 -= c1 << 25\n\tc5 = (h5 + (1 << 24)) >> 25\n\th6 += c5\n\th5 -= c5 << 25\n\t/* |h1| <= 2^24; from now on fits into int32 */\n\t/* |h5| <= 2^24; from now on fits into int32 */\n\t/* |h2| <= 1.21*2^59 */\n\t/* |h6| <= 1.21*2^59 */\n\n\tc2 = (h2 + (1 << 25)) >> 26\n\th3 += c2\n\th2 -= c2 << 26\n\tc6 = (h6 + (1 << 25)) >> 26\n\th7 += c6\n\th6 -= c6 << 26\n\t/* |h2| <= 2^25; from now on fits into int32 unchanged */\n\t/* |h6| <= 2^25; from now on fits into int32 unchanged */\n\t/* |h3| <= 1.51*2^58 */\n\t/* |h7| <= 1.51*2^58 */\n\n\tc3 = (h3 + (1 << 24)) >> 25\n\th4 += c3\n\th3 -= c3 << 25\n\tc7 = (h7 + (1 << 24)) >> 25\n\th8 += c7\n\th7 -= c7 << 25\n\t/* |h3| <= 2^24; from now on fits into int32 unchanged */\n\t/* |h7| <= 2^24; from now on fits into int32 unchanged */\n\t/* |h4| <= 1.52*2^33 */\n\t/* |h8| <= 1.52*2^33 */\n\n\tc4 = (h4 + (1 << 25)) >> 26\n\th5 += c4\n\th4 -= c4 << 26\n\tc8 = (h8 + (1 << 25)) >> 26\n\th9 += c8\n\th8 -= c8 << 26\n\t/* |h4| <= 2^25; from now on fits into int32 unchanged */\n\t/* |h8| <= 2^25; from now on fits into int32 unchanged */\n\t/* |h5| <= 1.01*2^24 */\n\t/* |h9| <= 1.51*2^58 */\n\n\tc9 = (h9 + (1 << 24)) >> 25\n\th0 += c9 * 19\n\th9 -= c9 << 25\n\t/* |h9| <= 2^24; from now on fits into int32 unchanged */\n\t/* |h0| <= 1.8*2^37 */\n\n\tc0 = (h0 + (1 << 25)) >> 26\n\th1 += c0\n\th0 -= c0 << 26\n\t/* |h0| <= 2^25; from now on fits into int32 unchanged */\n\t/* |h1| <= 1.01*2^24 */\n\n\th[0] = int32(h0)\n\th[1] = int32(h1)\n\th[2] = int32(h2)\n\th[3] = int32(h3)\n\th[4] = int32(h4)\n\th[5] = int32(h5)\n\th[6] = int32(h6)\n\th[7] = int32(h7)\n\th[8] = int32(h8)\n\th[9] = int32(h9)\n}\n\n// FeMul calculates h = f * g\n// Can overlap h with f or g.\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//    |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n//\n// Notes on implementation strategy:\n//\n// Using schoolbook multiplication.\n// Karatsuba would save a little in some cost models.\n//\n// Most multiplications by 2 and 19 are 32-bit precomputations;\n// cheaper than 64-bit postcomputations.\n//\n// There is one remaining multiplication by 19 in the carry chain;\n// one *19 precomputation can be merged into this,\n// but the resulting data flow is considerably less clean.\n//\n// There are 12 carries below.\n// 10 of them are 2-way parallelizable and vectorizable.\n// Can get away with 11 carries, but then data flow is much deeper.\n//\n// With tighter constraints on inputs, can squeeze carries into int32.\nfunc FeMul(h, f, g *FieldElement) {\n\tf0 := int64(f[0])\n\tf1 := int64(f[1])\n\tf2 := int64(f[2])\n\tf3 := int64(f[3])\n\tf4 := int64(f[4])\n\tf5 := int64(f[5])\n\tf6 := int64(f[6])\n\tf7 := int64(f[7])\n\tf8 := int64(f[8])\n\tf9 := int64(f[9])\n\n\tf1_2 := int64(2 * f[1])\n\tf3_2 := int64(2 * f[3])\n\tf5_2 := int64(2 * f[5])\n\tf7_2 := int64(2 * f[7])\n\tf9_2 := int64(2 * f[9])\n\n\tg0 := int64(g[0])\n\tg1 := int64(g[1])\n\tg2 := int64(g[2])\n\tg3 := int64(g[3])\n\tg4 := int64(g[4])\n\tg5 := int64(g[5])\n\tg6 := int64(g[6])\n\tg7 := int64(g[7])\n\tg8 := int64(g[8])\n\tg9 := int64(g[9])\n\n\tg1_19 := int64(19 * g[1]) /* 1.4*2^29 */\n\tg2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */\n\tg3_19 := int64(19 * g[3])\n\tg4_19 := int64(19 * g[4])\n\tg5_19 := int64(19 * g[5])\n\tg6_19 := int64(19 * g[6])\n\tg7_19 := int64(19 * g[7])\n\tg8_19 := int64(19 * g[8])\n\tg9_19 := int64(19 * g[9])\n\n\th0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19\n\th1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19\n\th2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19\n\th3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19\n\th4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19\n\th5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19\n\th6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19\n\th7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19\n\th8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19\n\th9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0\n\n\tFeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9)\n}\n\nfunc feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) {\n\tf0 := int64(f[0])\n\tf1 := int64(f[1])\n\tf2 := int64(f[2])\n\tf3 := int64(f[3])\n\tf4 := int64(f[4])\n\tf5 := int64(f[5])\n\tf6 := int64(f[6])\n\tf7 := int64(f[7])\n\tf8 := int64(f[8])\n\tf9 := int64(f[9])\n\tf0_2 := int64(2 * f[0])\n\tf1_2 := int64(2 * f[1])\n\tf2_2 := int64(2 * f[2])\n\tf3_2 := int64(2 * f[3])\n\tf4_2 := int64(2 * f[4])\n\tf5_2 := int64(2 * f[5])\n\tf6_2 := int64(2 * f[6])\n\tf7_2 := int64(2 * f[7])\n\tf5_38 := 38 * f5 // 1.31*2^30\n\tf6_19 := 19 * f6 // 1.31*2^30\n\tf7_38 := 38 * f7 // 1.31*2^30\n\tf8_19 := 19 * f8 // 1.31*2^30\n\tf9_38 := 38 * f9 // 1.31*2^30\n\n\th0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38\n\th1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19\n\th2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19\n\th3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38\n\th4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38\n\th5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19\n\th6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19\n\th7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38\n\th8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38\n\th9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5\n\n\treturn\n}\n\n// FeSquare calculates h = f*f. Can overlap h with f.\n//\n// Preconditions:\n//    |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\nfunc FeSquare(h, f *FieldElement) {\n\th0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f)\n\tFeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9)\n}\n\n// FeSquare2 sets h = 2 * f * f\n//\n// Can overlap h with f.\n//\n// Preconditions:\n//    |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.\n//\n// Postconditions:\n//    |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.\n// See fe_mul.c for discussion of implementation strategy.\nfunc FeSquare2(h, f *FieldElement) {\n\th0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f)\n\n\th0 += h0\n\th1 += h1\n\th2 += h2\n\th3 += h3\n\th4 += h4\n\th5 += h5\n\th6 += h6\n\th7 += h7\n\th8 += h8\n\th9 += h9\n\n\tFeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9)\n}\n\nfunc FeInvert(out, z *FieldElement) {\n\tvar t0, t1, t2, t3 FieldElement\n\tvar i int\n\n\tFeSquare(&t0, z)        // 2^1\n\tFeSquare(&t1, &t0)      // 2^2\n\tfor i = 1; i < 2; i++ { // 2^3\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t1, z, &t1)      // 2^3 + 2^0\n\tFeMul(&t0, &t0, &t1)    // 2^3 + 2^1 + 2^0\n\tFeSquare(&t2, &t0)      // 2^4 + 2^2 + 2^1\n\tFeMul(&t1, &t1, &t2)    // 2^4 + 2^3 + 2^2 + 2^1 + 2^0\n\tFeSquare(&t2, &t1)      // 5,4,3,2,1\n\tfor i = 1; i < 5; i++ { // 9,8,7,6,5\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t1, &t2, &t1)     // 9,8,7,6,5,4,3,2,1,0\n\tFeSquare(&t2, &t1)       // 10..1\n\tfor i = 1; i < 10; i++ { // 19..10\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t2, &t2, &t1)     // 19..0\n\tFeSquare(&t3, &t2)       // 20..1\n\tfor i = 1; i < 20; i++ { // 39..20\n\t\tFeSquare(&t3, &t3)\n\t}\n\tFeMul(&t2, &t3, &t2)     // 39..0\n\tFeSquare(&t2, &t2)       // 40..1\n\tfor i = 1; i < 10; i++ { // 49..10\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t1, &t2, &t1)     // 49..0\n\tFeSquare(&t2, &t1)       // 50..1\n\tfor i = 1; i < 50; i++ { // 99..50\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t2, &t2, &t1)      // 99..0\n\tFeSquare(&t3, &t2)        // 100..1\n\tfor i = 1; i < 100; i++ { // 199..100\n\t\tFeSquare(&t3, &t3)\n\t}\n\tFeMul(&t2, &t3, &t2)     // 199..0\n\tFeSquare(&t2, &t2)       // 200..1\n\tfor i = 1; i < 50; i++ { // 249..50\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t1, &t2, &t1)    // 249..0\n\tFeSquare(&t1, &t1)      // 250..1\n\tfor i = 1; i < 5; i++ { // 254..5\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(out, &t1, &t0) // 254..5,3,1,0\n}\n\nfunc fePow22523(out, z *FieldElement) {\n\tvar t0, t1, t2 FieldElement\n\tvar i int\n\n\tFeSquare(&t0, z)\n\tfor i = 1; i < 1; i++ {\n\t\tFeSquare(&t0, &t0)\n\t}\n\tFeSquare(&t1, &t0)\n\tfor i = 1; i < 2; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t1, z, &t1)\n\tFeMul(&t0, &t0, &t1)\n\tFeSquare(&t0, &t0)\n\tfor i = 1; i < 1; i++ {\n\t\tFeSquare(&t0, &t0)\n\t}\n\tFeMul(&t0, &t1, &t0)\n\tFeSquare(&t1, &t0)\n\tfor i = 1; i < 5; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t0, &t1, &t0)\n\tFeSquare(&t1, &t0)\n\tfor i = 1; i < 10; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t1, &t1, &t0)\n\tFeSquare(&t2, &t1)\n\tfor i = 1; i < 20; i++ {\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t1, &t2, &t1)\n\tFeSquare(&t1, &t1)\n\tfor i = 1; i < 10; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t0, &t1, &t0)\n\tFeSquare(&t1, &t0)\n\tfor i = 1; i < 50; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t1, &t1, &t0)\n\tFeSquare(&t2, &t1)\n\tfor i = 1; i < 100; i++ {\n\t\tFeSquare(&t2, &t2)\n\t}\n\tFeMul(&t1, &t2, &t1)\n\tFeSquare(&t1, &t1)\n\tfor i = 1; i < 50; i++ {\n\t\tFeSquare(&t1, &t1)\n\t}\n\tFeMul(&t0, &t1, &t0)\n\tFeSquare(&t0, &t0)\n\tfor i = 1; i < 2; i++ {\n\t\tFeSquare(&t0, &t0)\n\t}\n\tFeMul(out, &t0, z)\n}\n\n// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 *\n// y^2 where d = -121665/121666.\n//\n// Several representations are used:\n//   ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z\n//   ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT\n//   CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T\n//   PreComputedGroupElement: (y+x,y-x,2dxy)\n\ntype ProjectiveGroupElement struct {\n\tX, Y, Z FieldElement\n}\n\ntype ExtendedGroupElement struct {\n\tX, Y, Z, T FieldElement\n}\n\ntype CompletedGroupElement struct {\n\tX, Y, Z, T FieldElement\n}\n\ntype PreComputedGroupElement struct {\n\tyPlusX, yMinusX, xy2d FieldElement\n}\n\ntype CachedGroupElement struct {\n\tyPlusX, yMinusX, Z, T2d FieldElement\n}\n\nfunc (p *ProjectiveGroupElement) Zero() {\n\tFeZero(&p.X)\n\tFeOne(&p.Y)\n\tFeOne(&p.Z)\n}\n\nfunc (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) {\n\tvar t0 FieldElement\n\n\tFeSquare(&r.X, &p.X)\n\tFeSquare(&r.Z, &p.Y)\n\tFeSquare2(&r.T, &p.Z)\n\tFeAdd(&r.Y, &p.X, &p.Y)\n\tFeSquare(&t0, &r.Y)\n\tFeAdd(&r.Y, &r.Z, &r.X)\n\tFeSub(&r.Z, &r.Z, &r.X)\n\tFeSub(&r.X, &t0, &r.Y)\n\tFeSub(&r.T, &r.T, &r.Z)\n}\n\nfunc (p *ProjectiveGroupElement) ToBytes(s *[32]byte) {\n\tvar recip, x, y FieldElement\n\n\tFeInvert(&recip, &p.Z)\n\tFeMul(&x, &p.X, &recip)\n\tFeMul(&y, &p.Y, &recip)\n\tFeToBytes(s, &y)\n\ts[31] ^= FeIsNegative(&x) << 7\n}\n\nfunc (p *ExtendedGroupElement) Zero() {\n\tFeZero(&p.X)\n\tFeOne(&p.Y)\n\tFeOne(&p.Z)\n\tFeZero(&p.T)\n}\n\nfunc (p *ExtendedGroupElement) Double(r *CompletedGroupElement) {\n\tvar q ProjectiveGroupElement\n\tp.ToProjective(&q)\n\tq.Double(r)\n}\n\nfunc (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) {\n\tFeAdd(&r.yPlusX, &p.Y, &p.X)\n\tFeSub(&r.yMinusX, &p.Y, &p.X)\n\tFeCopy(&r.Z, &p.Z)\n\tFeMul(&r.T2d, &p.T, &d2)\n}\n\nfunc (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) {\n\tFeCopy(&r.X, &p.X)\n\tFeCopy(&r.Y, &p.Y)\n\tFeCopy(&r.Z, &p.Z)\n}\n\nfunc (p *ExtendedGroupElement) ToBytes(s *[32]byte) {\n\tvar recip, x, y FieldElement\n\n\tFeInvert(&recip, &p.Z)\n\tFeMul(&x, &p.X, &recip)\n\tFeMul(&y, &p.Y, &recip)\n\tFeToBytes(s, &y)\n\ts[31] ^= FeIsNegative(&x) << 7\n}\n\nfunc (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool {\n\tvar u, v, v3, vxx, check FieldElement\n\n\tFeFromBytes(&p.Y, s)\n\tFeOne(&p.Z)\n\tFeSquare(&u, &p.Y)\n\tFeMul(&v, &u, &d)\n\tFeSub(&u, &u, &p.Z) // y = y^2-1\n\tFeAdd(&v, &v, &p.Z) // v = dy^2+1\n\n\tFeSquare(&v3, &v)\n\tFeMul(&v3, &v3, &v) // v3 = v^3\n\tFeSquare(&p.X, &v3)\n\tFeMul(&p.X, &p.X, &v)\n\tFeMul(&p.X, &p.X, &u) // x = uv^7\n\n\tfePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8)\n\tFeMul(&p.X, &p.X, &v3)\n\tFeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8)\n\n\tvar tmpX, tmp2 [32]byte\n\n\tFeSquare(&vxx, &p.X)\n\tFeMul(&vxx, &vxx, &v)\n\tFeSub(&check, &vxx, &u) // vx^2-u\n\tif FeIsNonZero(&check) == 1 {\n\t\tFeAdd(&check, &vxx, &u) // vx^2+u\n\t\tif FeIsNonZero(&check) == 1 {\n\t\t\treturn false\n\t\t}\n\t\tFeMul(&p.X, &p.X, &SqrtM1)\n\n\t\tFeToBytes(&tmpX, &p.X)\n\t\tfor i, v := range tmpX {\n\t\t\ttmp2[31-i] = v\n\t\t}\n\t}\n\n\tif FeIsNegative(&p.X) != (s[31] >> 7) {\n\t\tFeNeg(&p.X, &p.X)\n\t}\n\n\tFeMul(&p.T, &p.X, &p.Y)\n\treturn true\n}\n\nfunc (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) {\n\tFeMul(&r.X, &p.X, &p.T)\n\tFeMul(&r.Y, &p.Y, &p.Z)\n\tFeMul(&r.Z, &p.Z, &p.T)\n}\n\nfunc (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) {\n\tFeMul(&r.X, &p.X, &p.T)\n\tFeMul(&r.Y, &p.Y, &p.Z)\n\tFeMul(&r.Z, &p.Z, &p.T)\n\tFeMul(&r.T, &p.X, &p.Y)\n}\n\nfunc (p *PreComputedGroupElement) Zero() {\n\tFeOne(&p.yPlusX)\n\tFeOne(&p.yMinusX)\n\tFeZero(&p.xy2d)\n}\n\nfunc geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) {\n\tvar t0 FieldElement\n\n\tFeAdd(&r.X, &p.Y, &p.X)\n\tFeSub(&r.Y, &p.Y, &p.X)\n\tFeMul(&r.Z, &r.X, &q.yPlusX)\n\tFeMul(&r.Y, &r.Y, &q.yMinusX)\n\tFeMul(&r.T, &q.T2d, &p.T)\n\tFeMul(&r.X, &p.Z, &q.Z)\n\tFeAdd(&t0, &r.X, &r.X)\n\tFeSub(&r.X, &r.Z, &r.Y)\n\tFeAdd(&r.Y, &r.Z, &r.Y)\n\tFeAdd(&r.Z, &t0, &r.T)\n\tFeSub(&r.T, &t0, &r.T)\n}\n\nfunc geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) {\n\tvar t0 FieldElement\n\n\tFeAdd(&r.X, &p.Y, &p.X)\n\tFeSub(&r.Y, &p.Y, &p.X)\n\tFeMul(&r.Z, &r.X, &q.yMinusX)\n\tFeMul(&r.Y, &r.Y, &q.yPlusX)\n\tFeMul(&r.T, &q.T2d, &p.T)\n\tFeMul(&r.X, &p.Z, &q.Z)\n\tFeAdd(&t0, &r.X, &r.X)\n\tFeSub(&r.X, &r.Z, &r.Y)\n\tFeAdd(&r.Y, &r.Z, &r.Y)\n\tFeSub(&r.Z, &t0, &r.T)\n\tFeAdd(&r.T, &t0, &r.T)\n}\n\nfunc geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) {\n\tvar t0 FieldElement\n\n\tFeAdd(&r.X, &p.Y, &p.X)\n\tFeSub(&r.Y, &p.Y, &p.X)\n\tFeMul(&r.Z, &r.X, &q.yPlusX)\n\tFeMul(&r.Y, &r.Y, &q.yMinusX)\n\tFeMul(&r.T, &q.xy2d, &p.T)\n\tFeAdd(&t0, &p.Z, &p.Z)\n\tFeSub(&r.X, &r.Z, &r.Y)\n\tFeAdd(&r.Y, &r.Z, &r.Y)\n\tFeAdd(&r.Z, &t0, &r.T)\n\tFeSub(&r.T, &t0, &r.T)\n}\n\nfunc geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) {\n\tvar t0 FieldElement\n\n\tFeAdd(&r.X, &p.Y, &p.X)\n\tFeSub(&r.Y, &p.Y, &p.X)\n\tFeMul(&r.Z, &r.X, &q.yMinusX)\n\tFeMul(&r.Y, &r.Y, &q.yPlusX)\n\tFeMul(&r.T, &q.xy2d, &p.T)\n\tFeAdd(&t0, &p.Z, &p.Z)\n\tFeSub(&r.X, &r.Z, &r.Y)\n\tFeAdd(&r.Y, &r.Z, &r.Y)\n\tFeSub(&r.Z, &t0, &r.T)\n\tFeAdd(&r.T, &t0, &r.T)\n}\n\nfunc slide(r *[256]int8, a *[32]byte) {\n\tfor i := range r {\n\t\tr[i] = int8(1 & (a[i>>3] >> uint(i&7)))\n\t}\n\n\tfor i := range r {\n\t\tif r[i] != 0 {\n\t\t\tfor b := 1; b <= 6 && i+b < 256; b++ {\n\t\t\t\tif r[i+b] != 0 {\n\t\t\t\t\tif r[i]+(r[i+b]<<uint(b)) <= 15 {\n\t\t\t\t\t\tr[i] += r[i+b] << uint(b)\n\t\t\t\t\t\tr[i+b] = 0\n\t\t\t\t\t} else if r[i]-(r[i+b]<<uint(b)) >= -15 {\n\t\t\t\t\t\tr[i] -= r[i+b] << uint(b)\n\t\t\t\t\t\tfor k := i + b; k < 256; k++ {\n\t\t\t\t\t\t\tif r[k] == 0 {\n\t\t\t\t\t\t\t\tr[k] = 1\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tr[k] = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\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}\n\t}\n}\n\n// GeDoubleScalarMultVartime sets r = a*A + b*B\n// where a = a[0]+256*a[1]+...+256^31 a[31].\n// and b = b[0]+256*b[1]+...+256^31 b[31].\n// B is the Ed25519 base point (x,4/5) with x positive.\nfunc GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) {\n\tvar aSlide, bSlide [256]int8\n\tvar Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A\n\tvar t CompletedGroupElement\n\tvar u, A2 ExtendedGroupElement\n\tvar i int\n\n\tslide(&aSlide, a)\n\tslide(&bSlide, b)\n\n\tA.ToCached(&Ai[0])\n\tA.Double(&t)\n\tt.ToExtended(&A2)\n\n\tfor i := 0; i < 7; i++ {\n\t\tgeAdd(&t, &A2, &Ai[i])\n\t\tt.ToExtended(&u)\n\t\tu.ToCached(&Ai[i+1])\n\t}\n\n\tr.Zero()\n\n\tfor i = 255; i >= 0; i-- {\n\t\tif aSlide[i] != 0 || bSlide[i] != 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfor ; i >= 0; i-- {\n\t\tr.Double(&t)\n\n\t\tif aSlide[i] > 0 {\n\t\t\tt.ToExtended(&u)\n\t\t\tgeAdd(&t, &u, &Ai[aSlide[i]/2])\n\t\t} else if aSlide[i] < 0 {\n\t\t\tt.ToExtended(&u)\n\t\t\tgeSub(&t, &u, &Ai[(-aSlide[i])/2])\n\t\t}\n\n\t\tif bSlide[i] > 0 {\n\t\t\tt.ToExtended(&u)\n\t\t\tgeMixedAdd(&t, &u, &bi[bSlide[i]/2])\n\t\t} else if bSlide[i] < 0 {\n\t\t\tt.ToExtended(&u)\n\t\t\tgeMixedSub(&t, &u, &bi[(-bSlide[i])/2])\n\t\t}\n\n\t\tt.ToProjective(r)\n\t}\n}\n\n// equal returns 1 if b == c and 0 otherwise, assuming that b and c are\n// non-negative.\nfunc equal(b, c int32) int32 {\n\tx := uint32(b ^ c)\n\tx--\n\treturn int32(x >> 31)\n}\n\n// negative returns 1 if b < 0 and 0 otherwise.\nfunc negative(b int32) int32 {\n\treturn (b >> 31) & 1\n}\n\nfunc PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) {\n\tFeCMove(&t.yPlusX, &u.yPlusX, b)\n\tFeCMove(&t.yMinusX, &u.yMinusX, b)\n\tFeCMove(&t.xy2d, &u.xy2d, b)\n}\n\nfunc selectPoint(t *PreComputedGroupElement, pos int32, b int32) {\n\tvar minusT PreComputedGroupElement\n\tbNegative := negative(b)\n\tbAbs := b - (((-bNegative) & b) << 1)\n\n\tt.Zero()\n\tfor i := int32(0); i < 8; i++ {\n\t\tPreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1))\n\t}\n\tFeCopy(&minusT.yPlusX, &t.yMinusX)\n\tFeCopy(&minusT.yMinusX, &t.yPlusX)\n\tFeNeg(&minusT.xy2d, &t.xy2d)\n\tPreComputedGroupElementCMove(t, &minusT, bNegative)\n}\n\n// GeScalarMultBase computes h = a*B, where\n//   a = a[0]+256*a[1]+...+256^31 a[31]\n//   B is the Ed25519 base point (x,4/5) with x positive.\n//\n// Preconditions:\n//   a[31] <= 127\nfunc GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) {\n\tvar e [64]int8\n\n\tfor i, v := range a {\n\t\te[2*i] = int8(v & 15)\n\t\te[2*i+1] = int8((v >> 4) & 15)\n\t}\n\n\t// each e[i] is between 0 and 15 and e[63] is between 0 and 7.\n\n\tcarry := int8(0)\n\tfor i := 0; i < 63; i++ {\n\t\te[i] += carry\n\t\tcarry = (e[i] + 8) >> 4\n\t\te[i] -= carry << 4\n\t}\n\te[63] += carry\n\t// each e[i] is between -8 and 8.\n\n\th.Zero()\n\tvar t PreComputedGroupElement\n\tvar r CompletedGroupElement\n\tfor i := int32(1); i < 64; i += 2 {\n\t\tselectPoint(&t, i/2, int32(e[i]))\n\t\tgeMixedAdd(&r, h, &t)\n\t\tr.ToExtended(h)\n\t}\n\n\tvar s ProjectiveGroupElement\n\n\th.Double(&r)\n\tr.ToProjective(&s)\n\ts.Double(&r)\n\tr.ToProjective(&s)\n\ts.Double(&r)\n\tr.ToProjective(&s)\n\ts.Double(&r)\n\tr.ToExtended(h)\n\n\tfor i := int32(0); i < 64; i += 2 {\n\t\tselectPoint(&t, i/2, int32(e[i]))\n\t\tgeMixedAdd(&r, h, &t)\n\t\tr.ToExtended(h)\n\t}\n}\n\n// The scalars are GF(2^252 + 27742317777372353535851937790883648493).\n\n// Input:\n//   a[0]+256*a[1]+...+256^31*a[31] = a\n//   b[0]+256*b[1]+...+256^31*b[31] = b\n//   c[0]+256*c[1]+...+256^31*c[31] = c\n//\n// Output:\n//   s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l\n//   where l = 2^252 + 27742317777372353535851937790883648493.\nfunc ScMulAdd(s, a, b, c *[32]byte) {\n\ta0 := 2097151 & load3(a[:])\n\ta1 := 2097151 & (load4(a[2:]) >> 5)\n\ta2 := 2097151 & (load3(a[5:]) >> 2)\n\ta3 := 2097151 & (load4(a[7:]) >> 7)\n\ta4 := 2097151 & (load4(a[10:]) >> 4)\n\ta5 := 2097151 & (load3(a[13:]) >> 1)\n\ta6 := 2097151 & (load4(a[15:]) >> 6)\n\ta7 := 2097151 & (load3(a[18:]) >> 3)\n\ta8 := 2097151 & load3(a[21:])\n\ta9 := 2097151 & (load4(a[23:]) >> 5)\n\ta10 := 2097151 & (load3(a[26:]) >> 2)\n\ta11 := (load4(a[28:]) >> 7)\n\tb0 := 2097151 & load3(b[:])\n\tb1 := 2097151 & (load4(b[2:]) >> 5)\n\tb2 := 2097151 & (load3(b[5:]) >> 2)\n\tb3 := 2097151 & (load4(b[7:]) >> 7)\n\tb4 := 2097151 & (load4(b[10:]) >> 4)\n\tb5 := 2097151 & (load3(b[13:]) >> 1)\n\tb6 := 2097151 & (load4(b[15:]) >> 6)\n\tb7 := 2097151 & (load3(b[18:]) >> 3)\n\tb8 := 2097151 & load3(b[21:])\n\tb9 := 2097151 & (load4(b[23:]) >> 5)\n\tb10 := 2097151 & (load3(b[26:]) >> 2)\n\tb11 := (load4(b[28:]) >> 7)\n\tc0 := 2097151 & load3(c[:])\n\tc1 := 2097151 & (load4(c[2:]) >> 5)\n\tc2 := 2097151 & (load3(c[5:]) >> 2)\n\tc3 := 2097151 & (load4(c[7:]) >> 7)\n\tc4 := 2097151 & (load4(c[10:]) >> 4)\n\tc5 := 2097151 & (load3(c[13:]) >> 1)\n\tc6 := 2097151 & (load4(c[15:]) >> 6)\n\tc7 := 2097151 & (load3(c[18:]) >> 3)\n\tc8 := 2097151 & load3(c[21:])\n\tc9 := 2097151 & (load4(c[23:]) >> 5)\n\tc10 := 2097151 & (load3(c[26:]) >> 2)\n\tc11 := (load4(c[28:]) >> 7)\n\tvar carry [23]int64\n\n\ts0 := c0 + a0*b0\n\ts1 := c1 + a0*b1 + a1*b0\n\ts2 := c2 + a0*b2 + a1*b1 + a2*b0\n\ts3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0\n\ts4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0\n\ts5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0\n\ts6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0\n\ts7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0\n\ts8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0\n\ts9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0\n\ts10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0\n\ts11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0\n\ts12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1\n\ts13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2\n\ts14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3\n\ts15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4\n\ts16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5\n\ts17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6\n\ts18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7\n\ts19 := a8*b11 + a9*b10 + a10*b9 + a11*b8\n\ts20 := a9*b11 + a10*b10 + a11*b9\n\ts21 := a10*b11 + a11*b10\n\ts22 := a11 * b11\n\ts23 := int64(0)\n\n\tcarry[0] = (s0 + (1 << 20)) >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[2] = (s2 + (1 << 20)) >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[4] = (s4 + (1 << 20)) >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[6] = (s6 + (1 << 20)) >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[8] = (s8 + (1 << 20)) >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[10] = (s10 + (1 << 20)) >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\tcarry[12] = (s12 + (1 << 20)) >> 21\n\ts13 += carry[12]\n\ts12 -= carry[12] << 21\n\tcarry[14] = (s14 + (1 << 20)) >> 21\n\ts15 += carry[14]\n\ts14 -= carry[14] << 21\n\tcarry[16] = (s16 + (1 << 20)) >> 21\n\ts17 += carry[16]\n\ts16 -= carry[16] << 21\n\tcarry[18] = (s18 + (1 << 20)) >> 21\n\ts19 += carry[18]\n\ts18 -= carry[18] << 21\n\tcarry[20] = (s20 + (1 << 20)) >> 21\n\ts21 += carry[20]\n\ts20 -= carry[20] << 21\n\tcarry[22] = (s22 + (1 << 20)) >> 21\n\ts23 += carry[22]\n\ts22 -= carry[22] << 21\n\n\tcarry[1] = (s1 + (1 << 20)) >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[3] = (s3 + (1 << 20)) >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[5] = (s5 + (1 << 20)) >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[7] = (s7 + (1 << 20)) >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[9] = (s9 + (1 << 20)) >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[11] = (s11 + (1 << 20)) >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\tcarry[13] = (s13 + (1 << 20)) >> 21\n\ts14 += carry[13]\n\ts13 -= carry[13] << 21\n\tcarry[15] = (s15 + (1 << 20)) >> 21\n\ts16 += carry[15]\n\ts15 -= carry[15] << 21\n\tcarry[17] = (s17 + (1 << 20)) >> 21\n\ts18 += carry[17]\n\ts17 -= carry[17] << 21\n\tcarry[19] = (s19 + (1 << 20)) >> 21\n\ts20 += carry[19]\n\ts19 -= carry[19] << 21\n\tcarry[21] = (s21 + (1 << 20)) >> 21\n\ts22 += carry[21]\n\ts21 -= carry[21] << 21\n\n\ts11 += s23 * 666643\n\ts12 += s23 * 470296\n\ts13 += s23 * 654183\n\ts14 -= s23 * 997805\n\ts15 += s23 * 136657\n\ts16 -= s23 * 683901\n\ts23 = 0\n\n\ts10 += s22 * 666643\n\ts11 += s22 * 470296\n\ts12 += s22 * 654183\n\ts13 -= s22 * 997805\n\ts14 += s22 * 136657\n\ts15 -= s22 * 683901\n\ts22 = 0\n\n\ts9 += s21 * 666643\n\ts10 += s21 * 470296\n\ts11 += s21 * 654183\n\ts12 -= s21 * 997805\n\ts13 += s21 * 136657\n\ts14 -= s21 * 683901\n\ts21 = 0\n\n\ts8 += s20 * 666643\n\ts9 += s20 * 470296\n\ts10 += s20 * 654183\n\ts11 -= s20 * 997805\n\ts12 += s20 * 136657\n\ts13 -= s20 * 683901\n\ts20 = 0\n\n\ts7 += s19 * 666643\n\ts8 += s19 * 470296\n\ts9 += s19 * 654183\n\ts10 -= s19 * 997805\n\ts11 += s19 * 136657\n\ts12 -= s19 * 683901\n\ts19 = 0\n\n\ts6 += s18 * 666643\n\ts7 += s18 * 470296\n\ts8 += s18 * 654183\n\ts9 -= s18 * 997805\n\ts10 += s18 * 136657\n\ts11 -= s18 * 683901\n\ts18 = 0\n\n\tcarry[6] = (s6 + (1 << 20)) >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[8] = (s8 + (1 << 20)) >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[10] = (s10 + (1 << 20)) >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\tcarry[12] = (s12 + (1 << 20)) >> 21\n\ts13 += carry[12]\n\ts12 -= carry[12] << 21\n\tcarry[14] = (s14 + (1 << 20)) >> 21\n\ts15 += carry[14]\n\ts14 -= carry[14] << 21\n\tcarry[16] = (s16 + (1 << 20)) >> 21\n\ts17 += carry[16]\n\ts16 -= carry[16] << 21\n\n\tcarry[7] = (s7 + (1 << 20)) >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[9] = (s9 + (1 << 20)) >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[11] = (s11 + (1 << 20)) >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\tcarry[13] = (s13 + (1 << 20)) >> 21\n\ts14 += carry[13]\n\ts13 -= carry[13] << 21\n\tcarry[15] = (s15 + (1 << 20)) >> 21\n\ts16 += carry[15]\n\ts15 -= carry[15] << 21\n\n\ts5 += s17 * 666643\n\ts6 += s17 * 470296\n\ts7 += s17 * 654183\n\ts8 -= s17 * 997805\n\ts9 += s17 * 136657\n\ts10 -= s17 * 683901\n\ts17 = 0\n\n\ts4 += s16 * 666643\n\ts5 += s16 * 470296\n\ts6 += s16 * 654183\n\ts7 -= s16 * 997805\n\ts8 += s16 * 136657\n\ts9 -= s16 * 683901\n\ts16 = 0\n\n\ts3 += s15 * 666643\n\ts4 += s15 * 470296\n\ts5 += s15 * 654183\n\ts6 -= s15 * 997805\n\ts7 += s15 * 136657\n\ts8 -= s15 * 683901\n\ts15 = 0\n\n\ts2 += s14 * 666643\n\ts3 += s14 * 470296\n\ts4 += s14 * 654183\n\ts5 -= s14 * 997805\n\ts6 += s14 * 136657\n\ts7 -= s14 * 683901\n\ts14 = 0\n\n\ts1 += s13 * 666643\n\ts2 += s13 * 470296\n\ts3 += s13 * 654183\n\ts4 -= s13 * 997805\n\ts5 += s13 * 136657\n\ts6 -= s13 * 683901\n\ts13 = 0\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = (s0 + (1 << 20)) >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[2] = (s2 + (1 << 20)) >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[4] = (s4 + (1 << 20)) >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[6] = (s6 + (1 << 20)) >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[8] = (s8 + (1 << 20)) >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[10] = (s10 + (1 << 20)) >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\n\tcarry[1] = (s1 + (1 << 20)) >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[3] = (s3 + (1 << 20)) >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[5] = (s5 + (1 << 20)) >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[7] = (s7 + (1 << 20)) >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[9] = (s9 + (1 << 20)) >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[11] = (s11 + (1 << 20)) >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = s0 >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[1] = s1 >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[2] = s2 >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[3] = s3 >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[4] = s4 >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[5] = s5 >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[6] = s6 >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[7] = s7 >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[8] = s8 >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[9] = s9 >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[10] = s10 >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\tcarry[11] = s11 >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = s0 >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[1] = s1 >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[2] = s2 >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[3] = s3 >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[4] = s4 >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[5] = s5 >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[6] = s6 >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[7] = s7 >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[8] = s8 >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[9] = s9 >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[10] = s10 >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\n\ts[0] = byte(s0 >> 0)\n\ts[1] = byte(s0 >> 8)\n\ts[2] = byte((s0 >> 16) | (s1 << 5))\n\ts[3] = byte(s1 >> 3)\n\ts[4] = byte(s1 >> 11)\n\ts[5] = byte((s1 >> 19) | (s2 << 2))\n\ts[6] = byte(s2 >> 6)\n\ts[7] = byte((s2 >> 14) | (s3 << 7))\n\ts[8] = byte(s3 >> 1)\n\ts[9] = byte(s3 >> 9)\n\ts[10] = byte((s3 >> 17) | (s4 << 4))\n\ts[11] = byte(s4 >> 4)\n\ts[12] = byte(s4 >> 12)\n\ts[13] = byte((s4 >> 20) | (s5 << 1))\n\ts[14] = byte(s5 >> 7)\n\ts[15] = byte((s5 >> 15) | (s6 << 6))\n\ts[16] = byte(s6 >> 2)\n\ts[17] = byte(s6 >> 10)\n\ts[18] = byte((s6 >> 18) | (s7 << 3))\n\ts[19] = byte(s7 >> 5)\n\ts[20] = byte(s7 >> 13)\n\ts[21] = byte(s8 >> 0)\n\ts[22] = byte(s8 >> 8)\n\ts[23] = byte((s8 >> 16) | (s9 << 5))\n\ts[24] = byte(s9 >> 3)\n\ts[25] = byte(s9 >> 11)\n\ts[26] = byte((s9 >> 19) | (s10 << 2))\n\ts[27] = byte(s10 >> 6)\n\ts[28] = byte((s10 >> 14) | (s11 << 7))\n\ts[29] = byte(s11 >> 1)\n\ts[30] = byte(s11 >> 9)\n\ts[31] = byte(s11 >> 17)\n}\n\n// Input:\n//   s[0]+256*s[1]+...+256^63*s[63] = s\n//\n// Output:\n//   s[0]+256*s[1]+...+256^31*s[31] = s mod l\n//   where l = 2^252 + 27742317777372353535851937790883648493.\nfunc ScReduce(out *[32]byte, s *[64]byte) {\n\ts0 := 2097151 & load3(s[:])\n\ts1 := 2097151 & (load4(s[2:]) >> 5)\n\ts2 := 2097151 & (load3(s[5:]) >> 2)\n\ts3 := 2097151 & (load4(s[7:]) >> 7)\n\ts4 := 2097151 & (load4(s[10:]) >> 4)\n\ts5 := 2097151 & (load3(s[13:]) >> 1)\n\ts6 := 2097151 & (load4(s[15:]) >> 6)\n\ts7 := 2097151 & (load3(s[18:]) >> 3)\n\ts8 := 2097151 & load3(s[21:])\n\ts9 := 2097151 & (load4(s[23:]) >> 5)\n\ts10 := 2097151 & (load3(s[26:]) >> 2)\n\ts11 := 2097151 & (load4(s[28:]) >> 7)\n\ts12 := 2097151 & (load4(s[31:]) >> 4)\n\ts13 := 2097151 & (load3(s[34:]) >> 1)\n\ts14 := 2097151 & (load4(s[36:]) >> 6)\n\ts15 := 2097151 & (load3(s[39:]) >> 3)\n\ts16 := 2097151 & load3(s[42:])\n\ts17 := 2097151 & (load4(s[44:]) >> 5)\n\ts18 := 2097151 & (load3(s[47:]) >> 2)\n\ts19 := 2097151 & (load4(s[49:]) >> 7)\n\ts20 := 2097151 & (load4(s[52:]) >> 4)\n\ts21 := 2097151 & (load3(s[55:]) >> 1)\n\ts22 := 2097151 & (load4(s[57:]) >> 6)\n\ts23 := (load4(s[60:]) >> 3)\n\n\ts11 += s23 * 666643\n\ts12 += s23 * 470296\n\ts13 += s23 * 654183\n\ts14 -= s23 * 997805\n\ts15 += s23 * 136657\n\ts16 -= s23 * 683901\n\ts23 = 0\n\n\ts10 += s22 * 666643\n\ts11 += s22 * 470296\n\ts12 += s22 * 654183\n\ts13 -= s22 * 997805\n\ts14 += s22 * 136657\n\ts15 -= s22 * 683901\n\ts22 = 0\n\n\ts9 += s21 * 666643\n\ts10 += s21 * 470296\n\ts11 += s21 * 654183\n\ts12 -= s21 * 997805\n\ts13 += s21 * 136657\n\ts14 -= s21 * 683901\n\ts21 = 0\n\n\ts8 += s20 * 666643\n\ts9 += s20 * 470296\n\ts10 += s20 * 654183\n\ts11 -= s20 * 997805\n\ts12 += s20 * 136657\n\ts13 -= s20 * 683901\n\ts20 = 0\n\n\ts7 += s19 * 666643\n\ts8 += s19 * 470296\n\ts9 += s19 * 654183\n\ts10 -= s19 * 997805\n\ts11 += s19 * 136657\n\ts12 -= s19 * 683901\n\ts19 = 0\n\n\ts6 += s18 * 666643\n\ts7 += s18 * 470296\n\ts8 += s18 * 654183\n\ts9 -= s18 * 997805\n\ts10 += s18 * 136657\n\ts11 -= s18 * 683901\n\ts18 = 0\n\n\tvar carry [17]int64\n\n\tcarry[6] = (s6 + (1 << 20)) >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[8] = (s8 + (1 << 20)) >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[10] = (s10 + (1 << 20)) >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\tcarry[12] = (s12 + (1 << 20)) >> 21\n\ts13 += carry[12]\n\ts12 -= carry[12] << 21\n\tcarry[14] = (s14 + (1 << 20)) >> 21\n\ts15 += carry[14]\n\ts14 -= carry[14] << 21\n\tcarry[16] = (s16 + (1 << 20)) >> 21\n\ts17 += carry[16]\n\ts16 -= carry[16] << 21\n\n\tcarry[7] = (s7 + (1 << 20)) >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[9] = (s9 + (1 << 20)) >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[11] = (s11 + (1 << 20)) >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\tcarry[13] = (s13 + (1 << 20)) >> 21\n\ts14 += carry[13]\n\ts13 -= carry[13] << 21\n\tcarry[15] = (s15 + (1 << 20)) >> 21\n\ts16 += carry[15]\n\ts15 -= carry[15] << 21\n\n\ts5 += s17 * 666643\n\ts6 += s17 * 470296\n\ts7 += s17 * 654183\n\ts8 -= s17 * 997805\n\ts9 += s17 * 136657\n\ts10 -= s17 * 683901\n\ts17 = 0\n\n\ts4 += s16 * 666643\n\ts5 += s16 * 470296\n\ts6 += s16 * 654183\n\ts7 -= s16 * 997805\n\ts8 += s16 * 136657\n\ts9 -= s16 * 683901\n\ts16 = 0\n\n\ts3 += s15 * 666643\n\ts4 += s15 * 470296\n\ts5 += s15 * 654183\n\ts6 -= s15 * 997805\n\ts7 += s15 * 136657\n\ts8 -= s15 * 683901\n\ts15 = 0\n\n\ts2 += s14 * 666643\n\ts3 += s14 * 470296\n\ts4 += s14 * 654183\n\ts5 -= s14 * 997805\n\ts6 += s14 * 136657\n\ts7 -= s14 * 683901\n\ts14 = 0\n\n\ts1 += s13 * 666643\n\ts2 += s13 * 470296\n\ts3 += s13 * 654183\n\ts4 -= s13 * 997805\n\ts5 += s13 * 136657\n\ts6 -= s13 * 683901\n\ts13 = 0\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = (s0 + (1 << 20)) >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[2] = (s2 + (1 << 20)) >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[4] = (s4 + (1 << 20)) >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[6] = (s6 + (1 << 20)) >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[8] = (s8 + (1 << 20)) >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[10] = (s10 + (1 << 20)) >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\n\tcarry[1] = (s1 + (1 << 20)) >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[3] = (s3 + (1 << 20)) >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[5] = (s5 + (1 << 20)) >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[7] = (s7 + (1 << 20)) >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[9] = (s9 + (1 << 20)) >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[11] = (s11 + (1 << 20)) >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = s0 >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[1] = s1 >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[2] = s2 >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[3] = s3 >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[4] = s4 >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[5] = s5 >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[6] = s6 >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[7] = s7 >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[8] = s8 >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[9] = s9 >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[10] = s10 >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\tcarry[11] = s11 >> 21\n\ts12 += carry[11]\n\ts11 -= carry[11] << 21\n\n\ts0 += s12 * 666643\n\ts1 += s12 * 470296\n\ts2 += s12 * 654183\n\ts3 -= s12 * 997805\n\ts4 += s12 * 136657\n\ts5 -= s12 * 683901\n\ts12 = 0\n\n\tcarry[0] = s0 >> 21\n\ts1 += carry[0]\n\ts0 -= carry[0] << 21\n\tcarry[1] = s1 >> 21\n\ts2 += carry[1]\n\ts1 -= carry[1] << 21\n\tcarry[2] = s2 >> 21\n\ts3 += carry[2]\n\ts2 -= carry[2] << 21\n\tcarry[3] = s3 >> 21\n\ts4 += carry[3]\n\ts3 -= carry[3] << 21\n\tcarry[4] = s4 >> 21\n\ts5 += carry[4]\n\ts4 -= carry[4] << 21\n\tcarry[5] = s5 >> 21\n\ts6 += carry[5]\n\ts5 -= carry[5] << 21\n\tcarry[6] = s6 >> 21\n\ts7 += carry[6]\n\ts6 -= carry[6] << 21\n\tcarry[7] = s7 >> 21\n\ts8 += carry[7]\n\ts7 -= carry[7] << 21\n\tcarry[8] = s8 >> 21\n\ts9 += carry[8]\n\ts8 -= carry[8] << 21\n\tcarry[9] = s9 >> 21\n\ts10 += carry[9]\n\ts9 -= carry[9] << 21\n\tcarry[10] = s10 >> 21\n\ts11 += carry[10]\n\ts10 -= carry[10] << 21\n\n\tout[0] = byte(s0 >> 0)\n\tout[1] = byte(s0 >> 8)\n\tout[2] = byte((s0 >> 16) | (s1 << 5))\n\tout[3] = byte(s1 >> 3)\n\tout[4] = byte(s1 >> 11)\n\tout[5] = byte((s1 >> 19) | (s2 << 2))\n\tout[6] = byte(s2 >> 6)\n\tout[7] = byte((s2 >> 14) | (s3 << 7))\n\tout[8] = byte(s3 >> 1)\n\tout[9] = byte(s3 >> 9)\n\tout[10] = byte((s3 >> 17) | (s4 << 4))\n\tout[11] = byte(s4 >> 4)\n\tout[12] = byte(s4 >> 12)\n\tout[13] = byte((s4 >> 20) | (s5 << 1))\n\tout[14] = byte(s5 >> 7)\n\tout[15] = byte((s5 >> 15) | (s6 << 6))\n\tout[16] = byte(s6 >> 2)\n\tout[17] = byte(s6 >> 10)\n\tout[18] = byte((s6 >> 18) | (s7 << 3))\n\tout[19] = byte(s7 >> 5)\n\tout[20] = byte(s7 >> 13)\n\tout[21] = byte(s8 >> 0)\n\tout[22] = byte(s8 >> 8)\n\tout[23] = byte((s8 >> 16) | (s9 << 5))\n\tout[24] = byte(s9 >> 3)\n\tout[25] = byte(s9 >> 11)\n\tout[26] = byte((s9 >> 19) | (s10 << 2))\n\tout[27] = byte(s10 >> 6)\n\tout[28] = byte((s10 >> 14) | (s11 << 7))\n\tout[29] = byte(s11 >> 1)\n\tout[30] = byte(s11 >> 9)\n\tout[31] = byte(s11 >> 17)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/openpgp/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.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// Package clearsign generates and processes OpenPGP, clear-signed data. See\n// RFC 4880, section 7.\n//\n// Clearsigned messages are cryptographically signed, but the contents of the\n// message are kept in plaintext so that it can be read without special tools.\npackage clearsign // import \"golang.org/x/crypto/openpgp/clearsign\"\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto\"\n\t\"hash\"\n\t\"io\"\n\t\"net/textproto\"\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// A Block represents a clearsigned message. A signature on a Block can\n// be checked by passing Bytes into openpgp.CheckDetachedSignature.\ntype Block struct {\n\tHeaders          textproto.MIMEHeader // Optional message headers\n\tPlaintext        []byte               // The original message text\n\tBytes            []byte               // The signed message\n\tArmoredSignature *armor.Block         // The signature block\n}\n\n// start is the marker which denotes the beginning of a clearsigned message.\nvar start = []byte(\"\\n-----BEGIN PGP SIGNED MESSAGE-----\")\n\n// dashEscape is prefixed to any lines that begin with a hyphen so that they\n// can't be confused with endText.\nvar dashEscape = []byte(\"- \")\n\n// endText is a marker which denotes the end of the message and the start of\n// an armored signature.\nvar endText = []byte(\"-----BEGIN PGP SIGNATURE-----\")\n\n// end is a marker which denotes the end of the armored signature.\nvar end = []byte(\"\\n-----END PGP SIGNATURE-----\")\n\nvar crlf = []byte(\"\\r\\n\")\nvar lf = byte('\\n')\n\n// getLine returns the first \\r\\n or \\n delineated line from the given byte\n// array. The line does not include the \\r\\n or \\n. The remainder of the byte\n// array (also not including the new line bytes) is also returned and this will\n// always be smaller than the original argument.\nfunc getLine(data []byte) (line, rest []byte) {\n\ti := bytes.Index(data, []byte{'\\n'})\n\tvar j int\n\tif i < 0 {\n\t\ti = len(data)\n\t\tj = i\n\t} else {\n\t\tj = i + 1\n\t\tif i > 0 && data[i-1] == '\\r' {\n\t\t\ti--\n\t\t}\n\t}\n\treturn data[0:i], data[j:]\n}\n\n// Decode finds the first clearsigned message in data and returns it, as well\n// as the suffix of data which remains after the message.\nfunc Decode(data []byte) (b *Block, rest []byte) {\n\t// start begins with a newline. However, at the very beginning of\n\t// the byte array, we'll accept the start string without it.\n\trest = data\n\tif bytes.HasPrefix(data, start[1:]) {\n\t\trest = rest[len(start)-1:]\n\t} else if i := bytes.Index(data, start); i >= 0 {\n\t\trest = rest[i+len(start):]\n\t} else {\n\t\treturn nil, data\n\t}\n\n\t// Consume the start line.\n\t_, rest = getLine(rest)\n\n\tvar line []byte\n\tb = &Block{\n\t\tHeaders: make(textproto.MIMEHeader),\n\t}\n\n\t// Next come a series of header lines.\n\tfor {\n\t\t// This loop terminates because getLine's second result is\n\t\t// always smaller than its argument.\n\t\tif len(rest) == 0 {\n\t\t\treturn nil, data\n\t\t}\n\t\t// An empty line marks the end of the headers.\n\t\tif line, rest = getLine(rest); 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\treturn nil, data\n\t\t}\n\n\t\tkey, val := line[0:i], line[i+1:]\n\t\tkey = bytes.TrimSpace(key)\n\t\tval = bytes.TrimSpace(val)\n\t\tb.Headers.Add(string(key), string(val))\n\t}\n\n\tfirstLine := true\n\tfor {\n\t\tstart := rest\n\n\t\tline, rest = getLine(rest)\n\t\tif len(line) == 0 && len(rest) == 0 {\n\t\t\t// No armored data was found, so this isn't a complete message.\n\t\t\treturn nil, data\n\t\t}\n\t\tif bytes.Equal(line, endText) {\n\t\t\t// Back up to the start of the line because armor expects to see the\n\t\t\t// header line.\n\t\t\trest = start\n\t\t\tbreak\n\t\t}\n\n\t\t// The final CRLF isn't included in the hash so we don't write it until\n\t\t// we've seen the next line.\n\t\tif firstLine {\n\t\t\tfirstLine = false\n\t\t} else {\n\t\t\tb.Bytes = append(b.Bytes, crlf...)\n\t\t}\n\n\t\tif bytes.HasPrefix(line, dashEscape) {\n\t\t\tline = line[2:]\n\t\t}\n\t\tline = bytes.TrimRight(line, \" \\t\")\n\t\tb.Bytes = append(b.Bytes, line...)\n\n\t\tb.Plaintext = append(b.Plaintext, line...)\n\t\tb.Plaintext = append(b.Plaintext, lf)\n\t}\n\n\t// We want to find the extent of the armored data (including any newlines at\n\t// the end).\n\ti := bytes.Index(rest, end)\n\tif i == -1 {\n\t\treturn nil, data\n\t}\n\ti += len(end)\n\tfor i < len(rest) && (rest[i] == '\\r' || rest[i] == '\\n') {\n\t\ti++\n\t}\n\tarmored := rest[:i]\n\trest = rest[i:]\n\n\tvar err error\n\tb.ArmoredSignature, err = armor.Decode(bytes.NewBuffer(armored))\n\tif err != nil {\n\t\treturn nil, data\n\t}\n\n\treturn b, rest\n}\n\n// A dashEscaper is an io.WriteCloser which processes the body of a clear-signed\n// message. The clear-signed message is written to buffered and a hash, suitable\n// for signing, is maintained in h.\n//\n// When closed, an armored signature is created and written to complete the\n// message.\ntype dashEscaper struct {\n\tbuffered *bufio.Writer\n\th        hash.Hash\n\thashType crypto.Hash\n\n\tatBeginningOfLine bool\n\tisFirstLine       bool\n\n\twhitespace []byte\n\tbyteBuf    []byte // a one byte buffer to save allocations\n\n\tprivateKey *packet.PrivateKey\n\tconfig     *packet.Config\n}\n\nfunc (d *dashEscaper) Write(data []byte) (n int, err error) {\n\tfor _, b := range data {\n\t\td.byteBuf[0] = b\n\n\t\tif d.atBeginningOfLine {\n\t\t\t// The final CRLF isn't included in the hash so we have to wait\n\t\t\t// until this point (the start of the next line) before writing it.\n\t\t\tif !d.isFirstLine {\n\t\t\t\td.h.Write(crlf)\n\t\t\t}\n\t\t\td.isFirstLine = false\n\t\t}\n\n\t\t// Any whitespace at the end of the line has to be removed so we\n\t\t// buffer it until we find out whether there's more on this line.\n\t\tif b == ' ' || b == '\\t' || b == '\\r' {\n\t\t\td.whitespace = append(d.whitespace, b)\n\t\t\td.atBeginningOfLine = false\n\t\t\tcontinue\n\t\t}\n\n\t\tif d.atBeginningOfLine {\n\t\t\t// At the beginning of a line, hyphens have to be escaped.\n\t\t\tif b == '-' {\n\t\t\t\t// The signature isn't calculated over the dash-escaped text so\n\t\t\t\t// the escape is only written to buffered.\n\t\t\t\tif _, err = d.buffered.Write(dashEscape); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\td.h.Write(d.byteBuf)\n\t\t\t\td.atBeginningOfLine = false\n\t\t\t} else if b == '\\n' {\n\t\t\t\t// Nothing to do because we delay writing CRLF to the hash.\n\t\t\t} else {\n\t\t\t\td.h.Write(d.byteBuf)\n\t\t\t\td.atBeginningOfLine = false\n\t\t\t}\n\t\t\tif err = d.buffered.WriteByte(b); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t} else {\n\t\t\tif b == '\\n' {\n\t\t\t\t// We got a raw \\n. Drop any trailing whitespace and write a\n\t\t\t\t// CRLF.\n\t\t\t\td.whitespace = d.whitespace[:0]\n\t\t\t\t// We delay writing CRLF to the hash until the start of the\n\t\t\t\t// next line.\n\t\t\t\tif err = d.buffered.WriteByte(b); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\td.atBeginningOfLine = true\n\t\t\t} else {\n\t\t\t\t// Any buffered whitespace wasn't at the end of the line so\n\t\t\t\t// we need to write it out.\n\t\t\t\tif len(d.whitespace) > 0 {\n\t\t\t\t\td.h.Write(d.whitespace)\n\t\t\t\t\tif _, err = d.buffered.Write(d.whitespace); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\td.whitespace = d.whitespace[:0]\n\t\t\t\t}\n\t\t\t\td.h.Write(d.byteBuf)\n\t\t\t\tif err = d.buffered.WriteByte(b); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tn = len(data)\n\treturn\n}\n\nfunc (d *dashEscaper) Close() (err error) {\n\tif !d.atBeginningOfLine {\n\t\tif err = d.buffered.WriteByte(lf); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tsig := new(packet.Signature)\n\tsig.SigType = packet.SigTypeText\n\tsig.PubKeyAlgo = d.privateKey.PubKeyAlgo\n\tsig.Hash = d.hashType\n\tsig.CreationTime = d.config.Now()\n\tsig.IssuerKeyId = &d.privateKey.KeyId\n\n\tif err = sig.Sign(d.h, d.privateKey, d.config); err != nil {\n\t\treturn\n\t}\n\n\tout, err := armor.Encode(d.buffered, \"PGP SIGNATURE\", nil)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif err = sig.Serialize(out); err != nil {\n\t\treturn\n\t}\n\tif err = out.Close(); err != nil {\n\t\treturn\n\t}\n\tif err = d.buffered.Flush(); err != nil {\n\t\treturn\n\t}\n\treturn\n}\n\n// Encode returns a WriteCloser which will clear-sign a message with privateKey\n// and write it to w. If config is nil, sensible defaults are used.\nfunc Encode(w io.Writer, privateKey *packet.PrivateKey, config *packet.Config) (plaintext io.WriteCloser, err error) {\n\tif privateKey.Encrypted {\n\t\treturn nil, errors.InvalidArgumentError(\"signing key is encrypted\")\n\t}\n\n\thashType := config.Hash()\n\tname := nameOfHash(hashType)\n\tif len(name) == 0 {\n\t\treturn nil, errors.UnsupportedError(\"unknown hash type: \" + strconv.Itoa(int(hashType)))\n\t}\n\n\tif !hashType.Available() {\n\t\treturn nil, errors.UnsupportedError(\"unsupported hash type: \" + strconv.Itoa(int(hashType)))\n\t}\n\th := hashType.New()\n\n\tbuffered := bufio.NewWriter(w)\n\t// start has a \\n at the beginning that we don't want here.\n\tif _, err = buffered.Write(start[1:]); err != nil {\n\t\treturn\n\t}\n\tif err = buffered.WriteByte(lf); err != nil {\n\t\treturn\n\t}\n\tif _, err = buffered.WriteString(\"Hash: \"); err != nil {\n\t\treturn\n\t}\n\tif _, err = buffered.WriteString(name); err != nil {\n\t\treturn\n\t}\n\tif err = buffered.WriteByte(lf); err != nil {\n\t\treturn\n\t}\n\tif err = buffered.WriteByte(lf); err != nil {\n\t\treturn\n\t}\n\n\tplaintext = &dashEscaper{\n\t\tbuffered: buffered,\n\t\th:        h,\n\t\thashType: hashType,\n\n\t\tatBeginningOfLine: true,\n\t\tisFirstLine:       true,\n\n\t\tbyteBuf: make([]byte, 1),\n\n\t\tprivateKey: privateKey,\n\t\tconfig:     config,\n\t}\n\n\treturn\n}\n\n// nameOfHash returns the OpenPGP name for the given hash, or the empty string\n// if the name isn't known. See RFC 4880, section 9.4.\nfunc nameOfHash(h crypto.Hash) string {\n\tswitch h {\n\tcase crypto.MD5:\n\t\treturn \"MD5\"\n\tcase crypto.SHA1:\n\t\treturn \"SHA1\"\n\tcase crypto.RIPEMD160:\n\t\treturn \"RIPEMD160\"\n\tcase crypto.SHA224:\n\t\treturn \"SHA224\"\n\tcase crypto.SHA256:\n\t\treturn \"SHA256\"\n\tcase crypto.SHA384:\n\t\treturn \"SHA384\"\n\tcase crypto.SHA512:\n\t\treturn \"SHA512\"\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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\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\t// If the user passes in a DefaultHash via packet.Config,\n\t// set the PreferredHash for the SelfSignature.\n\tif config != nil && config.DefaultHash != 0 {\n\t\te.Identities[uid.Id].SelfSignature.PreferredHash = []uint8{hashToHashId(config.DefaultHash)}\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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\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": "12fa-docker-golang/chapter3/viper/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\"\n\t\"crypto/cipher\"\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"io\"\n\t\"io/ioutil\"\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\t\"golang.org/x/crypto/openpgp/s2k\"\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|dsa|ecdsa}.PrivateKey or a crypto.Signer.\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 NewECDSAPrivateKey(currentTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey {\n\tpk := new(PrivateKey)\n\tpk.PublicKey = *NewECDSAPublicKey(currentTime, &priv.PublicKey)\n\tpk.PrivateKey = priv\n\treturn pk\n}\n\n// NewSignerPrivateKey creates a sign-only PrivateKey from a crypto.Signer that\n// implements RSA or ECDSA.\nfunc NewSignerPrivateKey(currentTime time.Time, signer crypto.Signer) *PrivateKey {\n\tpk := new(PrivateKey)\n\tswitch pubkey := signer.Public().(type) {\n\tcase rsa.PublicKey:\n\t\tpk.PublicKey = *NewRSAPublicKey(currentTime, &pubkey)\n\t\tpk.PubKeyAlgo = PubKeyAlgoRSASignOnly\n\tcase ecdsa.PublicKey:\n\t\tpk.PublicKey = *NewECDSAPublicKey(currentTime, &pubkey)\n\tdefault:\n\t\tpanic(\"openpgp: unknown crypto.Signer type in NewSignerPrivateKey\")\n\t}\n\tpk.PrivateKey = signer\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\tcase *ecdsa.PrivateKey:\n\t\terr = serializeECDSAPrivateKey(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\nfunc serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error {\n\treturn writeBig(w, priv.D)\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\tcase PubKeyAlgoECDSA:\n\t\treturn pk.parseECDSAPrivateKey(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\nfunc (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) {\n\tecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey)\n\n\tbuf := bytes.NewBuffer(data)\n\td, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tpk.PrivateKey = &ecdsa.PrivateKey{\n\t\tPublicKey: *ecdsaPub,\n\t\tD:         new(big.Int).SetBytes(d),\n\t}\n\tpk.Encrypted = false\n\tpk.encryptedData = nil\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey {\n\tpk := &PublicKey{\n\t\tCreationTime: creationTime,\n\t\tPubKeyAlgo:   PubKeyAlgoECDSA,\n\t\tPublicKey:    pub,\n\t\tec:           new(ecdsaKey),\n\t}\n\n\tswitch pub.Curve {\n\tcase elliptic.P256():\n\t\tpk.ec.oid = oidCurveP256\n\tcase elliptic.P384():\n\t\tpk.ec.oid = oidCurveP384\n\tcase elliptic.P521():\n\t\tpk.ec.oid = oidCurveP521\n\tdefault:\n\t\tpanic(\"unknown elliptic curve\")\n\t}\n\n\tpk.ec.p.bytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y)\n\tpk.ec.p.bitLength = uint16(8 * len(pk.ec.p.bytes))\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}\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}\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": "12fa-docker-golang/chapter3/viper/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}\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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/ecdsa\"\n\t\"encoding/asn1\"\n\t\"encoding/binary\"\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\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\t// supports both *rsa.PrivateKey and crypto.Signer\n\t\tsig.RSASignature.bytes, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash)\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\tcase PubKeyAlgoECDSA:\n\t\tvar r, s *big.Int\n\t\tif pk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok {\n\t\t\t// direct support, avoid asn1 wrapping/unwrapping\n\t\t\tr, s, err = ecdsa.Sign(config.Random(), pk, digest)\n\t\t} else {\n\t\t\tvar b []byte\n\t\t\tb, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, nil)\n\t\t\tif err == nil {\n\t\t\t\tr, s, err = unwrapECDSASig(b)\n\t\t\t}\n\t\t}\n\t\tif err == nil {\n\t\t\tsig.ECDSASigR = fromBig(r)\n\t\t\tsig.ECDSASigS = fromBig(s)\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// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA\n// signature.\nfunc unwrapECDSASig(b []byte) (r, s *big.Int, err error) {\n\tvar ecsdaSig struct {\n\t\tR, S *big.Int\n\t}\n\t_, err = asn1.Unmarshal(b, &ecsdaSig)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn ecsdaSig.R, ecsdaSig.S, nil\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 err\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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 be 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, if v4 (default)\n\tSignatureV3    *packet.SignatureV3 // the signature packet if it is a v2 or v3 signature\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 = scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature)\n\t\t} else if scr.md.SignatureV3, ok = p.(*packet.SignatureV3); ok {\n\t\t\tscr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignatureV3(scr.h, scr.md.SignatureV3)\n\t\t} else {\n\t\t\tscr.md.SignatureError = errors.StructuralError(\"LiteralData not followed by Signature\")\n\t\t\treturn\n\t\t}\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": "12fa-docker-golang/chapter3/viper/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.\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": "12fa-docker-golang/chapter3/viper/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 specified 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/agent/client.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// Package agent implements the ssh-agent protocol, and provides both\n// a client and a server. The client can talk to a standard ssh-agent\n// that uses UNIX sockets, and one could implement an alternative\n// ssh-agent process using the sample server.\n//\n// References:\n//  [PROTOCOL.agent]:    http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.agent?rev=HEAD\npackage agent // import \"golang.org/x/crypto/ssh/agent\"\n\nimport (\n\t\"bytes\"\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rsa\"\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"sync\"\n\n\t\"golang.org/x/crypto/ed25519\"\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// Agent represents the capabilities of an ssh-agent.\ntype Agent interface {\n\t// List returns the identities known to the agent.\n\tList() ([]*Key, error)\n\n\t// Sign has the agent sign the data using a protocol 2 key as defined\n\t// in [PROTOCOL.agent] section 2.6.2.\n\tSign(key ssh.PublicKey, data []byte) (*ssh.Signature, error)\n\n\t// Add adds a private key to the agent.\n\tAdd(key AddedKey) error\n\n\t// Remove removes all identities with the given public key.\n\tRemove(key ssh.PublicKey) error\n\n\t// RemoveAll removes all identities.\n\tRemoveAll() error\n\n\t// Lock locks the agent. Sign and Remove will fail, and List will empty an empty list.\n\tLock(passphrase []byte) error\n\n\t// Unlock undoes the effect of Lock\n\tUnlock(passphrase []byte) error\n\n\t// Signers returns signers for all the known keys.\n\tSigners() ([]ssh.Signer, error)\n}\n\n// AddedKey describes an SSH key to be added to an Agent.\ntype AddedKey struct {\n\t// PrivateKey must be a *rsa.PrivateKey, *dsa.PrivateKey or\n\t// *ecdsa.PrivateKey, which will be inserted into the agent.\n\tPrivateKey interface{}\n\t// Certificate, if not nil, is communicated to the agent and will be\n\t// stored with the key.\n\tCertificate *ssh.Certificate\n\t// Comment is an optional, free-form string.\n\tComment string\n\t// LifetimeSecs, if not zero, is the number of seconds that the\n\t// agent will store the key for.\n\tLifetimeSecs uint32\n\t// ConfirmBeforeUse, if true, requests that the agent confirm with the\n\t// user before each use of this key.\n\tConfirmBeforeUse bool\n}\n\n// See [PROTOCOL.agent], section 3.\nconst (\n\tagentRequestV1Identities   = 1\n\tagentRemoveAllV1Identities = 9\n\n\t// 3.2 Requests from client to agent for protocol 2 key operations\n\tagentAddIdentity         = 17\n\tagentRemoveIdentity      = 18\n\tagentRemoveAllIdentities = 19\n\tagentAddIdConstrained    = 25\n\n\t// 3.3 Key-type independent requests from client to agent\n\tagentAddSmartcardKey            = 20\n\tagentRemoveSmartcardKey         = 21\n\tagentLock                       = 22\n\tagentUnlock                     = 23\n\tagentAddSmartcardKeyConstrained = 26\n\n\t// 3.7 Key constraint identifiers\n\tagentConstrainLifetime = 1\n\tagentConstrainConfirm  = 2\n)\n\n// maxAgentResponseBytes is the maximum agent reply size that is accepted. This\n// is a sanity check, not a limit in the spec.\nconst maxAgentResponseBytes = 16 << 20\n\n// Agent messages:\n// These structures mirror the wire format of the corresponding ssh agent\n// messages found in [PROTOCOL.agent].\n\n// 3.4 Generic replies from agent to client\nconst agentFailure = 5\n\ntype failureAgentMsg struct{}\n\nconst agentSuccess = 6\n\ntype successAgentMsg struct{}\n\n// See [PROTOCOL.agent], section 2.5.2.\nconst agentRequestIdentities = 11\n\ntype requestIdentitiesAgentMsg struct{}\n\n// See [PROTOCOL.agent], section 2.5.2.\nconst agentIdentitiesAnswer = 12\n\ntype identitiesAnswerAgentMsg struct {\n\tNumKeys uint32 `sshtype:\"12\"`\n\tKeys    []byte `ssh:\"rest\"`\n}\n\n// See [PROTOCOL.agent], section 2.6.2.\nconst agentSignRequest = 13\n\ntype signRequestAgentMsg struct {\n\tKeyBlob []byte `sshtype:\"13\"`\n\tData    []byte\n\tFlags   uint32\n}\n\n// See [PROTOCOL.agent], section 2.6.2.\n\n// 3.6 Replies from agent to client for protocol 2 key operations\nconst agentSignResponse = 14\n\ntype signResponseAgentMsg struct {\n\tSigBlob []byte `sshtype:\"14\"`\n}\n\ntype publicKey struct {\n\tFormat string\n\tRest   []byte `ssh:\"rest\"`\n}\n\n// Key represents a protocol 2 public key as defined in\n// [PROTOCOL.agent], section 2.5.2.\ntype Key struct {\n\tFormat  string\n\tBlob    []byte\n\tComment string\n}\n\nfunc clientErr(err error) error {\n\treturn fmt.Errorf(\"agent: client error: %v\", err)\n}\n\n// String returns the storage form of an agent key with the format, base64\n// encoded serialized key, and the comment if it is not empty.\nfunc (k *Key) String() string {\n\ts := string(k.Format) + \" \" + base64.StdEncoding.EncodeToString(k.Blob)\n\n\tif k.Comment != \"\" {\n\t\ts += \" \" + k.Comment\n\t}\n\n\treturn s\n}\n\n// Type returns the public key type.\nfunc (k *Key) Type() string {\n\treturn k.Format\n}\n\n// Marshal returns key blob to satisfy the ssh.PublicKey interface.\nfunc (k *Key) Marshal() []byte {\n\treturn k.Blob\n}\n\n// Verify satisfies the ssh.PublicKey interface.\nfunc (k *Key) Verify(data []byte, sig *ssh.Signature) error {\n\tpubKey, err := ssh.ParsePublicKey(k.Blob)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"agent: bad public key: %v\", err)\n\t}\n\treturn pubKey.Verify(data, sig)\n}\n\ntype wireKey struct {\n\tFormat string\n\tRest   []byte `ssh:\"rest\"`\n}\n\nfunc parseKey(in []byte) (out *Key, rest []byte, err error) {\n\tvar record struct {\n\t\tBlob    []byte\n\t\tComment string\n\t\tRest    []byte `ssh:\"rest\"`\n\t}\n\n\tif err := ssh.Unmarshal(in, &record); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tvar wk wireKey\n\tif err := ssh.Unmarshal(record.Blob, &wk); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn &Key{\n\t\tFormat:  wk.Format,\n\t\tBlob:    record.Blob,\n\t\tComment: record.Comment,\n\t}, record.Rest, nil\n}\n\n// client is a client for an ssh-agent process.\ntype client struct {\n\t// conn is typically a *net.UnixConn\n\tconn io.ReadWriter\n\t// mu is used to prevent concurrent access to the agent\n\tmu sync.Mutex\n}\n\n// NewClient returns an Agent that talks to an ssh-agent process over\n// the given connection.\nfunc NewClient(rw io.ReadWriter) Agent {\n\treturn &client{conn: rw}\n}\n\n// call sends an RPC to the agent. On success, the reply is\n// unmarshaled into reply and replyType is set to the first byte of\n// the reply, which contains the type of the message.\nfunc (c *client) call(req []byte) (reply interface{}, err error) {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tmsg := make([]byte, 4+len(req))\n\tbinary.BigEndian.PutUint32(msg, uint32(len(req)))\n\tcopy(msg[4:], req)\n\tif _, err = c.conn.Write(msg); err != nil {\n\t\treturn nil, clientErr(err)\n\t}\n\n\tvar respSizeBuf [4]byte\n\tif _, err = io.ReadFull(c.conn, respSizeBuf[:]); err != nil {\n\t\treturn nil, clientErr(err)\n\t}\n\trespSize := binary.BigEndian.Uint32(respSizeBuf[:])\n\tif respSize > maxAgentResponseBytes {\n\t\treturn nil, clientErr(err)\n\t}\n\n\tbuf := make([]byte, respSize)\n\tif _, err = io.ReadFull(c.conn, buf); err != nil {\n\t\treturn nil, clientErr(err)\n\t}\n\treply, err = unmarshal(buf)\n\tif err != nil {\n\t\treturn nil, clientErr(err)\n\t}\n\treturn reply, err\n}\n\nfunc (c *client) simpleCall(req []byte) error {\n\tresp, err := c.call(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, ok := resp.(*successAgentMsg); ok {\n\t\treturn nil\n\t}\n\treturn errors.New(\"agent: failure\")\n}\n\nfunc (c *client) RemoveAll() error {\n\treturn c.simpleCall([]byte{agentRemoveAllIdentities})\n}\n\nfunc (c *client) Remove(key ssh.PublicKey) error {\n\treq := ssh.Marshal(&agentRemoveIdentityMsg{\n\t\tKeyBlob: key.Marshal(),\n\t})\n\treturn c.simpleCall(req)\n}\n\nfunc (c *client) Lock(passphrase []byte) error {\n\treq := ssh.Marshal(&agentLockMsg{\n\t\tPassphrase: passphrase,\n\t})\n\treturn c.simpleCall(req)\n}\n\nfunc (c *client) Unlock(passphrase []byte) error {\n\treq := ssh.Marshal(&agentUnlockMsg{\n\t\tPassphrase: passphrase,\n\t})\n\treturn c.simpleCall(req)\n}\n\n// List returns the identities known to the agent.\nfunc (c *client) List() ([]*Key, error) {\n\t// see [PROTOCOL.agent] section 2.5.2.\n\treq := []byte{agentRequestIdentities}\n\n\tmsg, err := c.call(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch msg := msg.(type) {\n\tcase *identitiesAnswerAgentMsg:\n\t\tif msg.NumKeys > maxAgentResponseBytes/8 {\n\t\t\treturn nil, errors.New(\"agent: too many keys in agent reply\")\n\t\t}\n\t\tkeys := make([]*Key, msg.NumKeys)\n\t\tdata := msg.Keys\n\t\tfor i := uint32(0); i < msg.NumKeys; i++ {\n\t\t\tvar key *Key\n\t\t\tvar err error\n\t\t\tif key, data, err = parseKey(data); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tkeys[i] = key\n\t\t}\n\t\treturn keys, nil\n\tcase *failureAgentMsg:\n\t\treturn nil, errors.New(\"agent: failed to list keys\")\n\t}\n\tpanic(\"unreachable\")\n}\n\n// Sign has the agent sign the data using a protocol 2 key as defined\n// in [PROTOCOL.agent] section 2.6.2.\nfunc (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {\n\treq := ssh.Marshal(signRequestAgentMsg{\n\t\tKeyBlob: key.Marshal(),\n\t\tData:    data,\n\t})\n\n\tmsg, err := c.call(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch msg := msg.(type) {\n\tcase *signResponseAgentMsg:\n\t\tvar sig ssh.Signature\n\t\tif err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn &sig, nil\n\tcase *failureAgentMsg:\n\t\treturn nil, errors.New(\"agent: failed to sign challenge\")\n\t}\n\tpanic(\"unreachable\")\n}\n\n// unmarshal parses an agent message in packet, returning the parsed\n// form and the message type of packet.\nfunc unmarshal(packet []byte) (interface{}, error) {\n\tif len(packet) < 1 {\n\t\treturn nil, errors.New(\"agent: empty packet\")\n\t}\n\tvar msg interface{}\n\tswitch packet[0] {\n\tcase agentFailure:\n\t\treturn new(failureAgentMsg), nil\n\tcase agentSuccess:\n\t\treturn new(successAgentMsg), nil\n\tcase agentIdentitiesAnswer:\n\t\tmsg = new(identitiesAnswerAgentMsg)\n\tcase agentSignResponse:\n\t\tmsg = new(signResponseAgentMsg)\n\tcase agentV1IdentitiesAnswer:\n\t\tmsg = new(agentV1IdentityMsg)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"agent: unknown type tag %d\", packet[0])\n\t}\n\tif err := ssh.Unmarshal(packet, msg); err != nil {\n\t\treturn nil, err\n\t}\n\treturn msg, nil\n}\n\ntype rsaKeyMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tN           *big.Int\n\tE           *big.Int\n\tD           *big.Int\n\tIqmp        *big.Int // IQMP = Inverse Q Mod P\n\tP           *big.Int\n\tQ           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype dsaKeyMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tP           *big.Int\n\tQ           *big.Int\n\tG           *big.Int\n\tY           *big.Int\n\tX           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype ecdsaKeyMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tCurve       string\n\tKeyBytes    []byte\n\tD           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype ed25519KeyMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tPub         []byte\n\tPriv        []byte\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\n// Insert adds a private key to the agent.\nfunc (c *client) insertKey(s interface{}, comment string, constraints []byte) error {\n\tvar req []byte\n\tswitch k := s.(type) {\n\tcase *rsa.PrivateKey:\n\t\tif len(k.Primes) != 2 {\n\t\t\treturn fmt.Errorf(\"agent: unsupported RSA key with %d primes\", len(k.Primes))\n\t\t}\n\t\tk.Precompute()\n\t\treq = ssh.Marshal(rsaKeyMsg{\n\t\t\tType:        ssh.KeyAlgoRSA,\n\t\t\tN:           k.N,\n\t\t\tE:           big.NewInt(int64(k.E)),\n\t\t\tD:           k.D,\n\t\t\tIqmp:        k.Precomputed.Qinv,\n\t\t\tP:           k.Primes[0],\n\t\t\tQ:           k.Primes[1],\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *dsa.PrivateKey:\n\t\treq = ssh.Marshal(dsaKeyMsg{\n\t\t\tType:        ssh.KeyAlgoDSA,\n\t\t\tP:           k.P,\n\t\t\tQ:           k.Q,\n\t\t\tG:           k.G,\n\t\t\tY:           k.Y,\n\t\t\tX:           k.X,\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *ecdsa.PrivateKey:\n\t\tnistID := fmt.Sprintf(\"nistp%d\", k.Params().BitSize)\n\t\treq = ssh.Marshal(ecdsaKeyMsg{\n\t\t\tType:        \"ecdsa-sha2-\" + nistID,\n\t\t\tCurve:       nistID,\n\t\t\tKeyBytes:    elliptic.Marshal(k.Curve, k.X, k.Y),\n\t\t\tD:           k.D,\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *ed25519.PrivateKey:\n\t\treq = ssh.Marshal(ed25519KeyMsg{\n\t\t\tType:        ssh.KeyAlgoED25519,\n\t\t\tPub:         []byte(*k)[32:],\n\t\t\tPriv:        []byte(*k),\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tdefault:\n\t\treturn fmt.Errorf(\"agent: unsupported key type %T\", s)\n\t}\n\n\t// if constraints are present then the message type needs to be changed.\n\tif len(constraints) != 0 {\n\t\treq[0] = agentAddIdConstrained\n\t}\n\n\tresp, err := c.call(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, ok := resp.(*successAgentMsg); ok {\n\t\treturn nil\n\t}\n\treturn errors.New(\"agent: failure\")\n}\n\ntype rsaCertMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tCertBytes   []byte\n\tD           *big.Int\n\tIqmp        *big.Int // IQMP = Inverse Q Mod P\n\tP           *big.Int\n\tQ           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype dsaCertMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tCertBytes   []byte\n\tX           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype ecdsaCertMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tCertBytes   []byte\n\tD           *big.Int\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\ntype ed25519CertMsg struct {\n\tType        string `sshtype:\"17|25\"`\n\tCertBytes   []byte\n\tPub         []byte\n\tPriv        []byte\n\tComments    string\n\tConstraints []byte `ssh:\"rest\"`\n}\n\n// Add adds a private key to the agent. If a certificate is given,\n// that certificate is added instead as public key.\nfunc (c *client) Add(key AddedKey) error {\n\tvar constraints []byte\n\n\tif secs := key.LifetimeSecs; secs != 0 {\n\t\tconstraints = append(constraints, agentConstrainLifetime)\n\n\t\tvar secsBytes [4]byte\n\t\tbinary.BigEndian.PutUint32(secsBytes[:], secs)\n\t\tconstraints = append(constraints, secsBytes[:]...)\n\t}\n\n\tif key.ConfirmBeforeUse {\n\t\tconstraints = append(constraints, agentConstrainConfirm)\n\t}\n\n\tif cert := key.Certificate; cert == nil {\n\t\treturn c.insertKey(key.PrivateKey, key.Comment, constraints)\n\t} else {\n\t\treturn c.insertCert(key.PrivateKey, cert, key.Comment, constraints)\n\t}\n}\n\nfunc (c *client) insertCert(s interface{}, cert *ssh.Certificate, comment string, constraints []byte) error {\n\tvar req []byte\n\tswitch k := s.(type) {\n\tcase *rsa.PrivateKey:\n\t\tif len(k.Primes) != 2 {\n\t\t\treturn fmt.Errorf(\"agent: unsupported RSA key with %d primes\", len(k.Primes))\n\t\t}\n\t\tk.Precompute()\n\t\treq = ssh.Marshal(rsaCertMsg{\n\t\t\tType:        cert.Type(),\n\t\t\tCertBytes:   cert.Marshal(),\n\t\t\tD:           k.D,\n\t\t\tIqmp:        k.Precomputed.Qinv,\n\t\t\tP:           k.Primes[0],\n\t\t\tQ:           k.Primes[1],\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *dsa.PrivateKey:\n\t\treq = ssh.Marshal(dsaCertMsg{\n\t\t\tType:        cert.Type(),\n\t\t\tCertBytes:   cert.Marshal(),\n\t\t\tX:           k.X,\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *ecdsa.PrivateKey:\n\t\treq = ssh.Marshal(ecdsaCertMsg{\n\t\t\tType:        cert.Type(),\n\t\t\tCertBytes:   cert.Marshal(),\n\t\t\tD:           k.D,\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tcase *ed25519.PrivateKey:\n\t\treq = ssh.Marshal(ed25519CertMsg{\n\t\t\tType:        cert.Type(),\n\t\t\tCertBytes:   cert.Marshal(),\n\t\t\tPub:         []byte(*k)[32:],\n\t\t\tPriv:        []byte(*k),\n\t\t\tComments:    comment,\n\t\t\tConstraints: constraints,\n\t\t})\n\tdefault:\n\t\treturn fmt.Errorf(\"agent: unsupported key type %T\", s)\n\t}\n\n\t// if constraints are present then the message type needs to be changed.\n\tif len(constraints) != 0 {\n\t\treq[0] = agentAddIdConstrained\n\t}\n\n\tsigner, err := ssh.NewSignerFromKey(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 {\n\t\treturn errors.New(\"agent: signer and cert have different public key\")\n\t}\n\n\tresp, err := c.call(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, ok := resp.(*successAgentMsg); ok {\n\t\treturn nil\n\t}\n\treturn errors.New(\"agent: failure\")\n}\n\n// Signers provides a callback for client authentication.\nfunc (c *client) Signers() ([]ssh.Signer, error) {\n\tkeys, err := c.List()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar result []ssh.Signer\n\tfor _, k := range keys {\n\t\tresult = append(result, &agentKeyringSigner{c, k})\n\t}\n\treturn result, nil\n}\n\ntype agentKeyringSigner struct {\n\tagent *client\n\tpub   ssh.PublicKey\n}\n\nfunc (s *agentKeyringSigner) PublicKey() ssh.PublicKey {\n\treturn s.pub\n}\n\nfunc (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, error) {\n\t// The agent has its own entropy source, so the rand argument is ignored.\n\treturn s.agent.Sign(s.pub, data)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/agent/forward.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 agent\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// RequestAgentForwarding sets up agent forwarding for the session.\n// ForwardToAgent or ForwardToRemote should be called to route\n// the authentication requests.\nfunc RequestAgentForwarding(session *ssh.Session) error {\n\tok, err := session.SendRequest(\"auth-agent-req@openssh.com\", true, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !ok {\n\t\treturn errors.New(\"forwarding request denied\")\n\t}\n\treturn nil\n}\n\n// ForwardToAgent routes authentication requests to the given keyring.\nfunc ForwardToAgent(client *ssh.Client, keyring Agent) error {\n\tchannels := client.HandleChannelOpen(channelType)\n\tif channels == nil {\n\t\treturn errors.New(\"agent: already have handler for \" + channelType)\n\t}\n\n\tgo func() {\n\t\tfor ch := range channels {\n\t\t\tchannel, reqs, err := ch.Accept()\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgo ssh.DiscardRequests(reqs)\n\t\t\tgo func() {\n\t\t\t\tServeAgent(keyring, channel)\n\t\t\t\tchannel.Close()\n\t\t\t}()\n\t\t}\n\t}()\n\treturn nil\n}\n\nconst channelType = \"auth-agent@openssh.com\"\n\n// ForwardToRemote routes authentication requests to the ssh-agent\n// process serving on the given unix socket.\nfunc ForwardToRemote(client *ssh.Client, addr string) error {\n\tchannels := client.HandleChannelOpen(channelType)\n\tif channels == nil {\n\t\treturn errors.New(\"agent: already have handler for \" + channelType)\n\t}\n\tconn, err := net.Dial(\"unix\", addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconn.Close()\n\n\tgo func() {\n\t\tfor ch := range channels {\n\t\t\tchannel, reqs, err := ch.Accept()\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgo ssh.DiscardRequests(reqs)\n\t\t\tgo forwardUnixSocket(channel, addr)\n\t\t}\n\t}()\n\treturn nil\n}\n\nfunc forwardUnixSocket(channel ssh.Channel, addr string) {\n\tconn, err := net.Dial(\"unix\", addr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar wg sync.WaitGroup\n\twg.Add(2)\n\tgo func() {\n\t\tio.Copy(conn, channel)\n\t\tconn.(*net.UnixConn).CloseWrite()\n\t\twg.Done()\n\t}()\n\tgo func() {\n\t\tio.Copy(channel, conn)\n\t\tchannel.CloseWrite()\n\t\twg.Done()\n\t}()\n\n\twg.Wait()\n\tconn.Close()\n\tchannel.Close()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/agent/keyring.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 agent\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"crypto/subtle\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/ssh\"\n)\n\ntype privKey struct {\n\tsigner  ssh.Signer\n\tcomment string\n\texpire  *time.Time\n}\n\ntype keyring struct {\n\tmu   sync.Mutex\n\tkeys []privKey\n\n\tlocked     bool\n\tpassphrase []byte\n}\n\nvar errLocked = errors.New(\"agent: locked\")\n\n// NewKeyring returns an Agent that holds keys in memory.  It is safe\n// for concurrent use by multiple goroutines.\nfunc NewKeyring() Agent {\n\treturn &keyring{}\n}\n\n// RemoveAll removes all identities.\nfunc (r *keyring) RemoveAll() error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn errLocked\n\t}\n\n\tr.keys = nil\n\treturn nil\n}\n\n// removeLocked does the actual key removal. The caller must already be holding the\n// keyring mutex.\nfunc (r *keyring) removeLocked(want []byte) error {\n\tfound := false\n\tfor i := 0; i < len(r.keys); {\n\t\tif bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) {\n\t\t\tfound = true\n\t\t\tr.keys[i] = r.keys[len(r.keys)-1]\n\t\t\tr.keys = r.keys[:len(r.keys)-1]\n\t\t\tcontinue\n\t\t} else {\n\t\t\ti++\n\t\t}\n\t}\n\n\tif !found {\n\t\treturn errors.New(\"agent: key not found\")\n\t}\n\treturn nil\n}\n\n// Remove removes all identities with the given public key.\nfunc (r *keyring) Remove(key ssh.PublicKey) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn errLocked\n\t}\n\n\treturn r.removeLocked(key.Marshal())\n}\n\n// Lock locks the agent. Sign and Remove will fail, and List will return an empty list.\nfunc (r *keyring) Lock(passphrase []byte) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn errLocked\n\t}\n\n\tr.locked = true\n\tr.passphrase = passphrase\n\treturn nil\n}\n\n// Unlock undoes the effect of Lock\nfunc (r *keyring) Unlock(passphrase []byte) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif !r.locked {\n\t\treturn errors.New(\"agent: not locked\")\n\t}\n\tif len(passphrase) != len(r.passphrase) || 1 != subtle.ConstantTimeCompare(passphrase, r.passphrase) {\n\t\treturn fmt.Errorf(\"agent: incorrect passphrase\")\n\t}\n\n\tr.locked = false\n\tr.passphrase = nil\n\treturn nil\n}\n\n// expireKeysLocked removes expired keys from the keyring. If a key was added\n// with a lifetimesecs contraint and seconds >= lifetimesecs seconds have\n// ellapsed, it is removed. The caller *must* be holding the keyring mutex.\nfunc (r *keyring) expireKeysLocked() {\n\tfor _, k := range r.keys {\n\t\tif k.expire != nil && time.Now().After(*k.expire) {\n\t\t\tr.removeLocked(k.signer.PublicKey().Marshal())\n\t\t}\n\t}\n}\n\n// List returns the identities known to the agent.\nfunc (r *keyring) List() ([]*Key, error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\t// section 2.7: locked agents return empty.\n\t\treturn nil, nil\n\t}\n\n\tr.expireKeysLocked()\n\tvar ids []*Key\n\tfor _, k := range r.keys {\n\t\tpub := k.signer.PublicKey()\n\t\tids = append(ids, &Key{\n\t\t\tFormat:  pub.Type(),\n\t\t\tBlob:    pub.Marshal(),\n\t\t\tComment: k.comment})\n\t}\n\treturn ids, nil\n}\n\n// Insert adds a private key to the keyring. If a certificate\n// is given, that certificate is added as public key. Note that\n// any constraints given are ignored.\nfunc (r *keyring) Add(key AddedKey) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn errLocked\n\t}\n\tsigner, err := ssh.NewSignerFromKey(key.PrivateKey)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif cert := key.Certificate; cert != nil {\n\t\tsigner, err = ssh.NewCertSigner(cert, signer)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tp := privKey{\n\t\tsigner:  signer,\n\t\tcomment: key.Comment,\n\t}\n\n\tif key.LifetimeSecs > 0 {\n\t\tt := time.Now().Add(time.Duration(key.LifetimeSecs) * time.Second)\n\t\tp.expire = &t\n\t}\n\n\tr.keys = append(r.keys, p)\n\n\treturn nil\n}\n\n// Sign returns a signature for the data.\nfunc (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn nil, errLocked\n\t}\n\n\tr.expireKeysLocked()\n\twanted := key.Marshal()\n\tfor _, k := range r.keys {\n\t\tif bytes.Equal(k.signer.PublicKey().Marshal(), wanted) {\n\t\t\treturn k.signer.Sign(rand.Reader, data)\n\t\t}\n\t}\n\treturn nil, errors.New(\"not found\")\n}\n\n// Signers returns signers for all the known keys.\nfunc (r *keyring) Signers() ([]ssh.Signer, error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.locked {\n\t\treturn nil, errLocked\n\t}\n\n\tr.expireKeysLocked()\n\ts := make([]ssh.Signer, 0, len(r.keys))\n\tfor _, k := range r.keys {\n\t\ts = append(s, k.signer)\n\t}\n\treturn s, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/agent/server.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 agent\n\nimport (\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rsa\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math/big\"\n\n\t\"golang.org/x/crypto/ed25519\"\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// Server wraps an Agent and uses it to implement the agent side of\n// the SSH-agent, wire protocol.\ntype server struct {\n\tagent Agent\n}\n\nfunc (s *server) processRequestBytes(reqData []byte) []byte {\n\trep, err := s.processRequest(reqData)\n\tif err != nil {\n\t\tif err != errLocked {\n\t\t\t// TODO(hanwen): provide better logging interface?\n\t\t\tlog.Printf(\"agent %d: %v\", reqData[0], err)\n\t\t}\n\t\treturn []byte{agentFailure}\n\t}\n\n\tif err == nil && rep == nil {\n\t\treturn []byte{agentSuccess}\n\t}\n\n\treturn ssh.Marshal(rep)\n}\n\nfunc marshalKey(k *Key) []byte {\n\tvar record struct {\n\t\tBlob    []byte\n\t\tComment string\n\t}\n\trecord.Blob = k.Marshal()\n\trecord.Comment = k.Comment\n\n\treturn ssh.Marshal(&record)\n}\n\n// See [PROTOCOL.agent], section 2.5.1.\nconst agentV1IdentitiesAnswer = 2\n\ntype agentV1IdentityMsg struct {\n\tNumkeys uint32 `sshtype:\"2\"`\n}\n\ntype agentRemoveIdentityMsg struct {\n\tKeyBlob []byte `sshtype:\"18\"`\n}\n\ntype agentLockMsg struct {\n\tPassphrase []byte `sshtype:\"22\"`\n}\n\ntype agentUnlockMsg struct {\n\tPassphrase []byte `sshtype:\"23\"`\n}\n\nfunc (s *server) processRequest(data []byte) (interface{}, error) {\n\tswitch data[0] {\n\tcase agentRequestV1Identities:\n\t\treturn &agentV1IdentityMsg{0}, nil\n\n\tcase agentRemoveAllV1Identities:\n\t\treturn nil, nil\n\n\tcase agentRemoveIdentity:\n\t\tvar req agentRemoveIdentityMsg\n\t\tif err := ssh.Unmarshal(data, &req); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar wk wireKey\n\t\tif err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn nil, s.agent.Remove(&Key{Format: wk.Format, Blob: req.KeyBlob})\n\n\tcase agentRemoveAllIdentities:\n\t\treturn nil, s.agent.RemoveAll()\n\n\tcase agentLock:\n\t\tvar req agentLockMsg\n\t\tif err := ssh.Unmarshal(data, &req); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn nil, s.agent.Lock(req.Passphrase)\n\n\tcase agentUnlock:\n\t\tvar req agentLockMsg\n\t\tif err := ssh.Unmarshal(data, &req); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, s.agent.Unlock(req.Passphrase)\n\n\tcase agentSignRequest:\n\t\tvar req signRequestAgentMsg\n\t\tif err := ssh.Unmarshal(data, &req); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar wk wireKey\n\t\tif err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tk := &Key{\n\t\t\tFormat: wk.Format,\n\t\t\tBlob:   req.KeyBlob,\n\t\t}\n\n\t\tsig, err := s.agent.Sign(k, req.Data) //  TODO(hanwen): flags.\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &signResponseAgentMsg{SigBlob: ssh.Marshal(sig)}, nil\n\n\tcase agentRequestIdentities:\n\t\tkeys, err := s.agent.List()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trep := identitiesAnswerAgentMsg{\n\t\t\tNumKeys: uint32(len(keys)),\n\t\t}\n\t\tfor _, k := range keys {\n\t\t\trep.Keys = append(rep.Keys, marshalKey(k)...)\n\t\t}\n\t\treturn rep, nil\n\n\tcase agentAddIdConstrained, agentAddIdentity:\n\t\treturn nil, s.insertIdentity(data)\n\t}\n\n\treturn nil, fmt.Errorf(\"unknown opcode %d\", data[0])\n}\n\nfunc parseRSAKey(req []byte) (*AddedKey, error) {\n\tvar k rsaKeyMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tif k.E.BitLen() > 30 {\n\t\treturn nil, errors.New(\"agent: RSA public exponent too large\")\n\t}\n\tpriv := &rsa.PrivateKey{\n\t\tPublicKey: rsa.PublicKey{\n\t\t\tE: int(k.E.Int64()),\n\t\t\tN: k.N,\n\t\t},\n\t\tD:      k.D,\n\t\tPrimes: []*big.Int{k.P, k.Q},\n\t}\n\tpriv.Precompute()\n\n\treturn &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil\n}\n\nfunc parseEd25519Key(req []byte) (*AddedKey, error) {\n\tvar k ed25519KeyMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tpriv := ed25519.PrivateKey(k.Priv)\n\treturn &AddedKey{PrivateKey: &priv, Comment: k.Comments}, nil\n}\n\nfunc parseDSAKey(req []byte) (*AddedKey, error) {\n\tvar k dsaKeyMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tpriv := &dsa.PrivateKey{\n\t\tPublicKey: dsa.PublicKey{\n\t\t\tParameters: dsa.Parameters{\n\t\t\t\tP: k.P,\n\t\t\t\tQ: k.Q,\n\t\t\t\tG: k.G,\n\t\t\t},\n\t\t\tY: k.Y,\n\t\t},\n\t\tX: k.X,\n\t}\n\n\treturn &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil\n}\n\nfunc unmarshalECDSA(curveName string, keyBytes []byte, privScalar *big.Int) (priv *ecdsa.PrivateKey, err error) {\n\tpriv = &ecdsa.PrivateKey{\n\t\tD: privScalar,\n\t}\n\n\tswitch curveName {\n\tcase \"nistp256\":\n\t\tpriv.Curve = elliptic.P256()\n\tcase \"nistp384\":\n\t\tpriv.Curve = elliptic.P384()\n\tcase \"nistp521\":\n\t\tpriv.Curve = elliptic.P521()\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"agent: unknown curve %q\", curveName)\n\t}\n\n\tpriv.X, priv.Y = elliptic.Unmarshal(priv.Curve, keyBytes)\n\tif priv.X == nil || priv.Y == nil {\n\t\treturn nil, errors.New(\"agent: point not on curve\")\n\t}\n\n\treturn priv, nil\n}\n\nfunc parseEd25519Cert(req []byte) (*AddedKey, error) {\n\tvar k ed25519CertMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tpubKey, err := ssh.ParsePublicKey(k.CertBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpriv := ed25519.PrivateKey(k.Priv)\n\tcert, ok := pubKey.(*ssh.Certificate)\n\tif !ok {\n\t\treturn nil, errors.New(\"agent: bad ED25519 certificate\")\n\t}\n\treturn &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}, nil\n}\n\nfunc parseECDSAKey(req []byte) (*AddedKey, error) {\n\tvar k ecdsaKeyMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpriv, err := unmarshalECDSA(k.Curve, k.KeyBytes, k.D)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &AddedKey{PrivateKey: priv, Comment: k.Comments}, nil\n}\n\nfunc parseRSACert(req []byte) (*AddedKey, error) {\n\tvar k rsaCertMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpubKey, err := ssh.ParsePublicKey(k.CertBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcert, ok := pubKey.(*ssh.Certificate)\n\tif !ok {\n\t\treturn nil, errors.New(\"agent: bad RSA certificate\")\n\t}\n\n\t// An RSA publickey as marshaled by rsaPublicKey.Marshal() in keys.go\n\tvar rsaPub struct {\n\t\tName string\n\t\tE    *big.Int\n\t\tN    *big.Int\n\t}\n\tif err := ssh.Unmarshal(cert.Key.Marshal(), &rsaPub); err != nil {\n\t\treturn nil, fmt.Errorf(\"agent: Unmarshal failed to parse public key: %v\", err)\n\t}\n\n\tif rsaPub.E.BitLen() > 30 {\n\t\treturn nil, errors.New(\"agent: RSA public exponent too large\")\n\t}\n\n\tpriv := rsa.PrivateKey{\n\t\tPublicKey: rsa.PublicKey{\n\t\t\tE: int(rsaPub.E.Int64()),\n\t\t\tN: rsaPub.N,\n\t\t},\n\t\tD:      k.D,\n\t\tPrimes: []*big.Int{k.Q, k.P},\n\t}\n\tpriv.Precompute()\n\n\treturn &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments}, nil\n}\n\nfunc parseDSACert(req []byte) (*AddedKey, error) {\n\tvar k dsaCertMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tpubKey, err := ssh.ParsePublicKey(k.CertBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcert, ok := pubKey.(*ssh.Certificate)\n\tif !ok {\n\t\treturn nil, errors.New(\"agent: bad DSA certificate\")\n\t}\n\n\t// A DSA publickey as marshaled by dsaPublicKey.Marshal() in keys.go\n\tvar w struct {\n\t\tName       string\n\t\tP, Q, G, Y *big.Int\n\t}\n\tif err := ssh.Unmarshal(cert.Key.Marshal(), &w); err != nil {\n\t\treturn nil, fmt.Errorf(\"agent: Unmarshal failed to parse public key: %v\", err)\n\t}\n\n\tpriv := &dsa.PrivateKey{\n\t\tPublicKey: dsa.PublicKey{\n\t\t\tParameters: dsa.Parameters{\n\t\t\t\tP: w.P,\n\t\t\t\tQ: w.Q,\n\t\t\t\tG: w.G,\n\t\t\t},\n\t\t\tY: w.Y,\n\t\t},\n\t\tX: k.X,\n\t}\n\n\treturn &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}, nil\n}\n\nfunc parseECDSACert(req []byte) (*AddedKey, error) {\n\tvar k ecdsaCertMsg\n\tif err := ssh.Unmarshal(req, &k); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpubKey, err := ssh.ParsePublicKey(k.CertBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcert, ok := pubKey.(*ssh.Certificate)\n\tif !ok {\n\t\treturn nil, errors.New(\"agent: bad ECDSA certificate\")\n\t}\n\n\t// An ECDSA publickey as marshaled by ecdsaPublicKey.Marshal() in keys.go\n\tvar ecdsaPub struct {\n\t\tName string\n\t\tID   string\n\t\tKey  []byte\n\t}\n\tif err := ssh.Unmarshal(cert.Key.Marshal(), &ecdsaPub); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpriv, err := unmarshalECDSA(ecdsaPub.ID, ecdsaPub.Key, k.D)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments}, nil\n}\n\nfunc (s *server) insertIdentity(req []byte) error {\n\tvar record struct {\n\t\tType string `sshtype:\"17|25\"`\n\t\tRest []byte `ssh:\"rest\"`\n\t}\n\n\tif err := ssh.Unmarshal(req, &record); err != nil {\n\t\treturn err\n\t}\n\n\tvar addedKey *AddedKey\n\tvar err error\n\n\tswitch record.Type {\n\tcase ssh.KeyAlgoRSA:\n\t\taddedKey, err = parseRSAKey(req)\n\tcase ssh.KeyAlgoDSA:\n\t\taddedKey, err = parseDSAKey(req)\n\tcase ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521:\n\t\taddedKey, err = parseECDSAKey(req)\n\tcase ssh.KeyAlgoED25519:\n\t\taddedKey, err = parseEd25519Key(req)\n\tcase ssh.CertAlgoRSAv01:\n\t\taddedKey, err = parseRSACert(req)\n\tcase ssh.CertAlgoDSAv01:\n\t\taddedKey, err = parseDSACert(req)\n\tcase ssh.CertAlgoECDSA256v01, ssh.CertAlgoECDSA384v01, ssh.CertAlgoECDSA521v01:\n\t\taddedKey, err = parseECDSACert(req)\n\tcase ssh.CertAlgoED25519v01:\n\t\taddedKey, err = parseEd25519Cert(req)\n\tdefault:\n\t\treturn fmt.Errorf(\"agent: not implemented: %q\", record.Type)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.agent.Add(*addedKey)\n}\n\n// ServeAgent serves the agent protocol on the given connection. It\n// returns when an I/O error occurs.\nfunc ServeAgent(agent Agent, c io.ReadWriter) error {\n\ts := &server{agent}\n\n\tvar length [4]byte\n\tfor {\n\t\tif _, err := io.ReadFull(c, length[:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tl := binary.BigEndian.Uint32(length[:])\n\t\tif l > maxAgentResponseBytes {\n\t\t\t// We also cap requests.\n\t\t\treturn fmt.Errorf(\"agent: request too large: %d\", l)\n\t\t}\n\n\t\treq := make([]byte, l)\n\t\tif _, err := io.ReadFull(c, req); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\trepData := s.processRequestBytes(req)\n\t\tif len(repData) > maxAgentResponseBytes {\n\t\t\treturn fmt.Errorf(\"agent: reply too large: %d bytes\", len(repData))\n\t\t}\n\n\t\tbinary.BigEndian.PutUint32(length[:], uint32(len(repData)))\n\t\tif _, err := c.Write(length[:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := c.Write(repData); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/buffer.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 ssh\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\n// buffer provides a linked list buffer for data exchange\n// between producer and consumer. Theoretically the buffer is\n// of unlimited capacity as it does no allocation of its own.\ntype buffer struct {\n\t// protects concurrent access to head, tail and closed\n\t*sync.Cond\n\n\thead *element // the buffer that will be read first\n\ttail *element // the buffer that will be read last\n\n\tclosed bool\n}\n\n// An element represents a single link in a linked list.\ntype element struct {\n\tbuf  []byte\n\tnext *element\n}\n\n// newBuffer returns an empty buffer that is not closed.\nfunc newBuffer() *buffer {\n\te := new(element)\n\tb := &buffer{\n\t\tCond: newCond(),\n\t\thead: e,\n\t\ttail: e,\n\t}\n\treturn b\n}\n\n// write makes buf available for Read to receive.\n// buf must not be modified after the call to write.\nfunc (b *buffer) write(buf []byte) {\n\tb.Cond.L.Lock()\n\te := &element{buf: buf}\n\tb.tail.next = e\n\tb.tail = e\n\tb.Cond.Signal()\n\tb.Cond.L.Unlock()\n}\n\n// eof closes the buffer. Reads from the buffer once all\n// the data has been consumed will receive os.EOF.\nfunc (b *buffer) eof() error {\n\tb.Cond.L.Lock()\n\tb.closed = true\n\tb.Cond.Signal()\n\tb.Cond.L.Unlock()\n\treturn nil\n}\n\n// Read reads data from the internal buffer in buf.  Reads will block\n// if no data is available, or until the buffer is closed.\nfunc (b *buffer) Read(buf []byte) (n int, err error) {\n\tb.Cond.L.Lock()\n\tdefer b.Cond.L.Unlock()\n\n\tfor len(buf) > 0 {\n\t\t// if there is data in b.head, copy it\n\t\tif len(b.head.buf) > 0 {\n\t\t\tr := copy(buf, b.head.buf)\n\t\t\tbuf, b.head.buf = buf[r:], b.head.buf[r:]\n\t\t\tn += r\n\t\t\tcontinue\n\t\t}\n\t\t// if there is a next buffer, make it the head\n\t\tif len(b.head.buf) == 0 && b.head != b.tail {\n\t\t\tb.head = b.head.next\n\t\t\tcontinue\n\t\t}\n\n\t\t// if at least one byte has been copied, return\n\t\tif n > 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// if nothing was read, and there is nothing outstanding\n\t\t// check to see if the buffer is closed.\n\t\tif b.closed {\n\t\t\terr = io.EOF\n\t\t\tbreak\n\t\t}\n\t\t// out of buffers, wait for producer\n\t\tb.Cond.Wait()\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/certs.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sort\"\n\t\"time\"\n)\n\n// These constants from [PROTOCOL.certkeys] represent the algorithm names\n// for certificate types supported by this package.\nconst (\n\tCertAlgoRSAv01      = \"ssh-rsa-cert-v01@openssh.com\"\n\tCertAlgoDSAv01      = \"ssh-dss-cert-v01@openssh.com\"\n\tCertAlgoECDSA256v01 = \"ecdsa-sha2-nistp256-cert-v01@openssh.com\"\n\tCertAlgoECDSA384v01 = \"ecdsa-sha2-nistp384-cert-v01@openssh.com\"\n\tCertAlgoECDSA521v01 = \"ecdsa-sha2-nistp521-cert-v01@openssh.com\"\n\tCertAlgoED25519v01  = \"ssh-ed25519-cert-v01@openssh.com\"\n)\n\n// Certificate types distinguish between host and user\n// certificates. The values can be set in the CertType field of\n// Certificate.\nconst (\n\tUserCert = 1\n\tHostCert = 2\n)\n\n// Signature represents a cryptographic signature.\ntype Signature struct {\n\tFormat string\n\tBlob   []byte\n}\n\n// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that\n// a certificate does not expire.\nconst CertTimeInfinity = 1<<64 - 1\n\n// An Certificate represents an OpenSSH certificate as defined in\n// [PROTOCOL.certkeys]?rev=1.8.\ntype Certificate struct {\n\tNonce           []byte\n\tKey             PublicKey\n\tSerial          uint64\n\tCertType        uint32\n\tKeyId           string\n\tValidPrincipals []string\n\tValidAfter      uint64\n\tValidBefore     uint64\n\tPermissions\n\tReserved     []byte\n\tSignatureKey PublicKey\n\tSignature    *Signature\n}\n\n// genericCertData holds the key-independent part of the certificate data.\n// Overall, certificates contain an nonce, public key fields and\n// key-independent fields.\ntype genericCertData struct {\n\tSerial          uint64\n\tCertType        uint32\n\tKeyId           string\n\tValidPrincipals []byte\n\tValidAfter      uint64\n\tValidBefore     uint64\n\tCriticalOptions []byte\n\tExtensions      []byte\n\tReserved        []byte\n\tSignatureKey    []byte\n\tSignature       []byte\n}\n\nfunc marshalStringList(namelist []string) []byte {\n\tvar to []byte\n\tfor _, name := range namelist {\n\t\ts := struct{ N string }{name}\n\t\tto = append(to, Marshal(&s)...)\n\t}\n\treturn to\n}\n\ntype optionsTuple struct {\n\tKey   string\n\tValue []byte\n}\n\ntype optionsTupleValue struct {\n\tValue string\n}\n\n// serialize a map of critical options or extensions\n// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,\n// we need two length prefixes for a non-empty string value\nfunc marshalTuples(tups map[string]string) []byte {\n\tkeys := make([]string, 0, len(tups))\n\tfor key := range tups {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Strings(keys)\n\n\tvar ret []byte\n\tfor _, key := range keys {\n\t\ts := optionsTuple{Key: key}\n\t\tif value := tups[key]; len(value) > 0 {\n\t\t\ts.Value = Marshal(&optionsTupleValue{value})\n\t\t}\n\t\tret = append(ret, Marshal(&s)...)\n\t}\n\treturn ret\n}\n\n// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,\n// we need two length prefixes for a non-empty option value\nfunc parseTuples(in []byte) (map[string]string, error) {\n\ttups := map[string]string{}\n\tvar lastKey string\n\tvar haveLastKey bool\n\n\tfor len(in) > 0 {\n\t\tvar key, val, extra []byte\n\t\tvar ok bool\n\n\t\tif key, in, ok = parseString(in); !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tkeyStr := string(key)\n\t\t// according to [PROTOCOL.certkeys], the names must be in\n\t\t// lexical order.\n\t\tif haveLastKey && keyStr <= lastKey {\n\t\t\treturn nil, fmt.Errorf(\"ssh: certificate options are not in lexical order\")\n\t\t}\n\t\tlastKey, haveLastKey = keyStr, true\n\t\t// the next field is a data field, which if non-empty has a string embedded\n\t\tif val, in, ok = parseString(in); !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tif len(val) > 0 {\n\t\t\tval, extra, ok = parseString(val)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errShortRead\n\t\t\t}\n\t\t\tif len(extra) > 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"ssh: unexpected trailing data after certificate option value\")\n\t\t\t}\n\t\t\ttups[keyStr] = string(val)\n\t\t} else {\n\t\t\ttups[keyStr] = \"\"\n\t\t}\n\t}\n\treturn tups, nil\n}\n\nfunc parseCert(in []byte, privAlgo string) (*Certificate, error) {\n\tnonce, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn nil, errShortRead\n\t}\n\n\tkey, rest, err := parsePubKey(rest, privAlgo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar g genericCertData\n\tif err := Unmarshal(rest, &g); err != nil {\n\t\treturn nil, err\n\t}\n\n\tc := &Certificate{\n\t\tNonce:       nonce,\n\t\tKey:         key,\n\t\tSerial:      g.Serial,\n\t\tCertType:    g.CertType,\n\t\tKeyId:       g.KeyId,\n\t\tValidAfter:  g.ValidAfter,\n\t\tValidBefore: g.ValidBefore,\n\t}\n\n\tfor principals := g.ValidPrincipals; len(principals) > 0; {\n\t\tprincipal, rest, ok := parseString(principals)\n\t\tif !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tc.ValidPrincipals = append(c.ValidPrincipals, string(principal))\n\t\tprincipals = rest\n\t}\n\n\tc.CriticalOptions, err = parseTuples(g.CriticalOptions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Extensions, err = parseTuples(g.Extensions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Reserved = g.Reserved\n\tk, err := ParsePublicKey(g.SignatureKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.SignatureKey = k\n\tc.Signature, rest, ok = parseSignatureBody(g.Signature)\n\tif !ok || len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: signature parse error\")\n\t}\n\n\treturn c, nil\n}\n\ntype openSSHCertSigner struct {\n\tpub    *Certificate\n\tsigner Signer\n}\n\n// NewCertSigner returns a Signer that signs with the given Certificate, whose\n// private key is held by signer. It returns an error if the public key in cert\n// doesn't match the key used by signer.\nfunc NewCertSigner(cert *Certificate, signer Signer) (Signer, error) {\n\tif bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 {\n\t\treturn nil, errors.New(\"ssh: signer and cert have different public key\")\n\t}\n\n\treturn &openSSHCertSigner{cert, signer}, nil\n}\n\nfunc (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\treturn s.signer.Sign(rand, data)\n}\n\nfunc (s *openSSHCertSigner) PublicKey() PublicKey {\n\treturn s.pub\n}\n\nconst sourceAddressCriticalOption = \"source-address\"\n\n// CertChecker does the work of verifying a certificate. Its methods\n// can be plugged into ClientConfig.HostKeyCallback and\n// ServerConfig.PublicKeyCallback. For the CertChecker to work,\n// minimally, the IsAuthority callback should be set.\ntype CertChecker struct {\n\t// SupportedCriticalOptions lists the CriticalOptions that the\n\t// server application layer understands. These are only used\n\t// for user certificates.\n\tSupportedCriticalOptions []string\n\n\t// IsAuthority should return true if the key is recognized as\n\t// an authority. This allows for certificates to be signed by other\n\t// certificates.\n\tIsAuthority func(auth PublicKey) bool\n\n\t// Clock is used for verifying time stamps. If nil, time.Now\n\t// is used.\n\tClock func() time.Time\n\n\t// UserKeyFallback is called when CertChecker.Authenticate encounters a\n\t// public key that is not a certificate. It must implement validation\n\t// of user keys or else, if nil, all such keys are rejected.\n\tUserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)\n\n\t// HostKeyFallback is called when CertChecker.CheckHostKey encounters a\n\t// public key that is not a certificate. It must implement host key\n\t// validation or else, if nil, all such keys are rejected.\n\tHostKeyFallback HostKeyCallback\n\n\t// IsRevoked is called for each certificate so that revocation checking\n\t// can be implemented. It should return true if the given certificate\n\t// is revoked and false otherwise. If nil, no certificates are\n\t// considered to have been revoked.\n\tIsRevoked func(cert *Certificate) bool\n}\n\n// CheckHostKey checks a host key certificate. This method can be\n// plugged into ClientConfig.HostKeyCallback.\nfunc (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error {\n\tcert, ok := key.(*Certificate)\n\tif !ok {\n\t\tif c.HostKeyFallback != nil {\n\t\t\treturn c.HostKeyFallback(addr, remote, key)\n\t\t}\n\t\treturn errors.New(\"ssh: non-certificate host key\")\n\t}\n\tif cert.CertType != HostCert {\n\t\treturn fmt.Errorf(\"ssh: certificate presented as a host key has type %d\", cert.CertType)\n\t}\n\n\treturn c.CheckCert(addr, cert)\n}\n\n// Authenticate checks a user certificate. Authenticate can be used as\n// a value for ServerConfig.PublicKeyCallback.\nfunc (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) {\n\tcert, ok := pubKey.(*Certificate)\n\tif !ok {\n\t\tif c.UserKeyFallback != nil {\n\t\t\treturn c.UserKeyFallback(conn, pubKey)\n\t\t}\n\t\treturn nil, errors.New(\"ssh: normal key pairs not accepted\")\n\t}\n\n\tif cert.CertType != UserCert {\n\t\treturn nil, fmt.Errorf(\"ssh: cert has type %d\", cert.CertType)\n\t}\n\n\tif err := c.CheckCert(conn.User(), cert); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &cert.Permissions, nil\n}\n\n// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and\n// the signature of the certificate.\nfunc (c *CertChecker) CheckCert(principal string, cert *Certificate) error {\n\tif c.IsRevoked != nil && c.IsRevoked(cert) {\n\t\treturn fmt.Errorf(\"ssh: certicate serial %d revoked\", cert.Serial)\n\t}\n\n\tfor opt, _ := range cert.CriticalOptions {\n\t\t// sourceAddressCriticalOption will be enforced by\n\t\t// serverAuthenticate\n\t\tif opt == sourceAddressCriticalOption {\n\t\t\tcontinue\n\t\t}\n\n\t\tfound := false\n\t\tfor _, supp := range c.SupportedCriticalOptions {\n\t\t\tif supp == opt {\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\treturn fmt.Errorf(\"ssh: unsupported critical option %q in certificate\", opt)\n\t\t}\n\t}\n\n\tif len(cert.ValidPrincipals) > 0 {\n\t\t// By default, certs are valid for all users/hosts.\n\t\tfound := false\n\t\tfor _, p := range cert.ValidPrincipals {\n\t\t\tif p == principal {\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\treturn fmt.Errorf(\"ssh: principal %q not in the set of valid principals for given certificate: %q\", principal, cert.ValidPrincipals)\n\t\t}\n\t}\n\n\tif !c.IsAuthority(cert.SignatureKey) {\n\t\treturn fmt.Errorf(\"ssh: certificate signed by unrecognized authority\")\n\t}\n\n\tclock := c.Clock\n\tif clock == nil {\n\t\tclock = time.Now\n\t}\n\n\tunixNow := clock().Unix()\n\tif after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) {\n\t\treturn fmt.Errorf(\"ssh: cert is not yet valid\")\n\t}\n\tif before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) {\n\t\treturn fmt.Errorf(\"ssh: cert has expired\")\n\t}\n\tif err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil {\n\t\treturn fmt.Errorf(\"ssh: certificate signature does not verify\")\n\t}\n\n\treturn nil\n}\n\n// SignCert sets c.SignatureKey to the authority's public key and stores a\n// Signature, by authority, in the certificate.\nfunc (c *Certificate) SignCert(rand io.Reader, authority Signer) error {\n\tc.Nonce = make([]byte, 32)\n\tif _, err := io.ReadFull(rand, c.Nonce); err != nil {\n\t\treturn err\n\t}\n\tc.SignatureKey = authority.PublicKey()\n\n\tsig, err := authority.Sign(rand, c.bytesForSigning())\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.Signature = sig\n\treturn nil\n}\n\nvar certAlgoNames = map[string]string{\n\tKeyAlgoRSA:      CertAlgoRSAv01,\n\tKeyAlgoDSA:      CertAlgoDSAv01,\n\tKeyAlgoECDSA256: CertAlgoECDSA256v01,\n\tKeyAlgoECDSA384: CertAlgoECDSA384v01,\n\tKeyAlgoECDSA521: CertAlgoECDSA521v01,\n\tKeyAlgoED25519:  CertAlgoED25519v01,\n}\n\n// certToPrivAlgo returns the underlying algorithm for a certificate algorithm.\n// Panics if a non-certificate algorithm is passed.\nfunc certToPrivAlgo(algo string) string {\n\tfor privAlgo, pubAlgo := range certAlgoNames {\n\t\tif pubAlgo == algo {\n\t\t\treturn privAlgo\n\t\t}\n\t}\n\tpanic(\"unknown cert algorithm\")\n}\n\nfunc (cert *Certificate) bytesForSigning() []byte {\n\tc2 := *cert\n\tc2.Signature = nil\n\tout := c2.Marshal()\n\t// Drop trailing signature length.\n\treturn out[:len(out)-4]\n}\n\n// Marshal serializes c into OpenSSH's wire format. It is part of the\n// PublicKey interface.\nfunc (c *Certificate) Marshal() []byte {\n\tgeneric := genericCertData{\n\t\tSerial:          c.Serial,\n\t\tCertType:        c.CertType,\n\t\tKeyId:           c.KeyId,\n\t\tValidPrincipals: marshalStringList(c.ValidPrincipals),\n\t\tValidAfter:      uint64(c.ValidAfter),\n\t\tValidBefore:     uint64(c.ValidBefore),\n\t\tCriticalOptions: marshalTuples(c.CriticalOptions),\n\t\tExtensions:      marshalTuples(c.Extensions),\n\t\tReserved:        c.Reserved,\n\t\tSignatureKey:    c.SignatureKey.Marshal(),\n\t}\n\tif c.Signature != nil {\n\t\tgeneric.Signature = Marshal(c.Signature)\n\t}\n\tgenericBytes := Marshal(&generic)\n\tkeyBytes := c.Key.Marshal()\n\t_, keyBytes, _ = parseString(keyBytes)\n\tprefix := Marshal(&struct {\n\t\tName  string\n\t\tNonce []byte\n\t\tKey   []byte `ssh:\"rest\"`\n\t}{c.Type(), c.Nonce, keyBytes})\n\n\tresult := make([]byte, 0, len(prefix)+len(genericBytes))\n\tresult = append(result, prefix...)\n\tresult = append(result, genericBytes...)\n\treturn result\n}\n\n// Type returns the key name. It is part of the PublicKey interface.\nfunc (c *Certificate) Type() string {\n\talgo, ok := certAlgoNames[c.Key.Type()]\n\tif !ok {\n\t\tpanic(\"unknown cert key type \" + c.Key.Type())\n\t}\n\treturn algo\n}\n\n// Verify verifies a signature against the certificate's public\n// key. It is part of the PublicKey interface.\nfunc (c *Certificate) Verify(data []byte, sig *Signature) error {\n\treturn c.Key.Verify(data, sig)\n}\n\nfunc parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) {\n\tformat, in, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\n\tout = &Signature{\n\t\tFormat: string(format),\n\t}\n\n\tif out.Blob, in, ok = parseString(in); !ok {\n\t\treturn\n\t}\n\n\treturn out, in, ok\n}\n\nfunc parseSignature(in []byte) (out *Signature, rest []byte, ok bool) {\n\tsigBytes, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\n\tout, trailing, ok := parseSignatureBody(sigBytes)\n\tif !ok || len(trailing) > 0 {\n\t\treturn nil, nil, false\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/channel.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 ssh\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"sync\"\n)\n\nconst (\n\tminPacketLength = 9\n\t// channelMaxPacket contains the maximum number of bytes that will be\n\t// sent in a single packet. As per RFC 4253, section 6.1, 32k is also\n\t// the minimum.\n\tchannelMaxPacket = 1 << 15\n\t// We follow OpenSSH here.\n\tchannelWindowSize = 64 * channelMaxPacket\n)\n\n// NewChannel represents an incoming request to a channel. It must either be\n// accepted for use by calling Accept, or rejected by calling Reject.\ntype NewChannel interface {\n\t// Accept accepts the channel creation request. It returns the Channel\n\t// and a Go channel containing SSH requests. The Go channel must be\n\t// serviced otherwise the Channel will hang.\n\tAccept() (Channel, <-chan *Request, error)\n\n\t// Reject rejects the channel creation request. After calling\n\t// this, no other methods on the Channel may be called.\n\tReject(reason RejectionReason, message string) error\n\n\t// ChannelType returns the type of the channel, as supplied by the\n\t// client.\n\tChannelType() string\n\n\t// ExtraData returns the arbitrary payload for this channel, as supplied\n\t// by the client. This data is specific to the channel type.\n\tExtraData() []byte\n}\n\n// A Channel is an ordered, reliable, flow-controlled, duplex stream\n// that is multiplexed over an SSH connection.\ntype Channel interface {\n\t// Read reads up to len(data) bytes from the channel.\n\tRead(data []byte) (int, error)\n\n\t// Write writes len(data) bytes to the channel.\n\tWrite(data []byte) (int, error)\n\n\t// Close signals end of channel use. No data may be sent after this\n\t// call.\n\tClose() error\n\n\t// CloseWrite signals the end of sending in-band\n\t// data. Requests may still be sent, and the other side may\n\t// still send data\n\tCloseWrite() error\n\n\t// SendRequest sends a channel request.  If wantReply is true,\n\t// it will wait for a reply and return the result as a\n\t// boolean, otherwise the return value will be false. Channel\n\t// requests are out-of-band messages so they may be sent even\n\t// if the data stream is closed or blocked by flow control.\n\t// If the channel is closed before a reply is returned, io.EOF\n\t// is returned.\n\tSendRequest(name string, wantReply bool, payload []byte) (bool, error)\n\n\t// Stderr returns an io.ReadWriter that writes to this channel\n\t// with the extended data type set to stderr. Stderr may\n\t// safely be read and written from a different goroutine than\n\t// Read and Write respectively.\n\tStderr() io.ReadWriter\n}\n\n// Request is a request sent outside of the normal stream of\n// data. Requests can either be specific to an SSH channel, or they\n// can be global.\ntype Request struct {\n\tType      string\n\tWantReply bool\n\tPayload   []byte\n\n\tch  *channel\n\tmux *mux\n}\n\n// Reply sends a response to a request. It must be called for all requests\n// where WantReply is true and is a no-op otherwise. The payload argument is\n// ignored for replies to channel-specific requests.\nfunc (r *Request) Reply(ok bool, payload []byte) error {\n\tif !r.WantReply {\n\t\treturn nil\n\t}\n\n\tif r.ch == nil {\n\t\treturn r.mux.ackRequest(ok, payload)\n\t}\n\n\treturn r.ch.ackRequest(ok)\n}\n\n// RejectionReason is an enumeration used when rejecting channel creation\n// requests. See RFC 4254, section 5.1.\ntype RejectionReason uint32\n\nconst (\n\tProhibited RejectionReason = iota + 1\n\tConnectionFailed\n\tUnknownChannelType\n\tResourceShortage\n)\n\n// String converts the rejection reason to human readable form.\nfunc (r RejectionReason) String() string {\n\tswitch r {\n\tcase Prohibited:\n\t\treturn \"administratively prohibited\"\n\tcase ConnectionFailed:\n\t\treturn \"connect failed\"\n\tcase UnknownChannelType:\n\t\treturn \"unknown channel type\"\n\tcase ResourceShortage:\n\t\treturn \"resource shortage\"\n\t}\n\treturn fmt.Sprintf(\"unknown reason %d\", int(r))\n}\n\nfunc min(a uint32, b int) uint32 {\n\tif a < uint32(b) {\n\t\treturn a\n\t}\n\treturn uint32(b)\n}\n\ntype channelDirection uint8\n\nconst (\n\tchannelInbound channelDirection = iota\n\tchannelOutbound\n)\n\n// channel is an implementation of the Channel interface that works\n// with the mux class.\ntype channel struct {\n\t// R/O after creation\n\tchanType          string\n\textraData         []byte\n\tlocalId, remoteId uint32\n\n\t// maxIncomingPayload and maxRemotePayload are the maximum\n\t// payload sizes of normal and extended data packets for\n\t// receiving and sending, respectively. The wire packet will\n\t// be 9 or 13 bytes larger (excluding encryption overhead).\n\tmaxIncomingPayload uint32\n\tmaxRemotePayload   uint32\n\n\tmux *mux\n\n\t// decided is set to true if an accept or reject message has been sent\n\t// (for outbound channels) or received (for inbound channels).\n\tdecided bool\n\n\t// direction contains either channelOutbound, for channels created\n\t// locally, or channelInbound, for channels created by the peer.\n\tdirection channelDirection\n\n\t// Pending internal channel messages.\n\tmsg chan interface{}\n\n\t// Since requests have no ID, there can be only one request\n\t// with WantReply=true outstanding.  This lock is held by a\n\t// goroutine that has such an outgoing request pending.\n\tsentRequestMu sync.Mutex\n\n\tincomingRequests chan *Request\n\n\tsentEOF bool\n\n\t// thread-safe data\n\tremoteWin  window\n\tpending    *buffer\n\textPending *buffer\n\n\t// windowMu protects myWindow, the flow-control window.\n\twindowMu sync.Mutex\n\tmyWindow uint32\n\n\t// writeMu serializes calls to mux.conn.writePacket() and\n\t// protects sentClose and packetPool. This mutex must be\n\t// different from windowMu, as writePacket can block if there\n\t// is a key exchange pending.\n\twriteMu   sync.Mutex\n\tsentClose bool\n\n\t// packetPool has a buffer for each extended channel ID to\n\t// save allocations during writes.\n\tpacketPool map[uint32][]byte\n}\n\n// writePacket sends a packet. If the packet is a channel close, it updates\n// sentClose. This method takes the lock c.writeMu.\nfunc (c *channel) writePacket(packet []byte) error {\n\tc.writeMu.Lock()\n\tif c.sentClose {\n\t\tc.writeMu.Unlock()\n\t\treturn io.EOF\n\t}\n\tc.sentClose = (packet[0] == msgChannelClose)\n\terr := c.mux.conn.writePacket(packet)\n\tc.writeMu.Unlock()\n\treturn err\n}\n\nfunc (c *channel) sendMessage(msg interface{}) error {\n\tif debugMux {\n\t\tlog.Printf(\"send(%d): %#v\", c.mux.chanList.offset, msg)\n\t}\n\n\tp := Marshal(msg)\n\tbinary.BigEndian.PutUint32(p[1:], c.remoteId)\n\treturn c.writePacket(p)\n}\n\n// WriteExtended writes data to a specific extended stream. These streams are\n// used, for example, for stderr.\nfunc (c *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) {\n\tif c.sentEOF {\n\t\treturn 0, io.EOF\n\t}\n\t// 1 byte message type, 4 bytes remoteId, 4 bytes data length\n\topCode := byte(msgChannelData)\n\theaderLength := uint32(9)\n\tif extendedCode > 0 {\n\t\theaderLength += 4\n\t\topCode = msgChannelExtendedData\n\t}\n\n\tc.writeMu.Lock()\n\tpacket := c.packetPool[extendedCode]\n\t// We don't remove the buffer from packetPool, so\n\t// WriteExtended calls from different goroutines will be\n\t// flagged as errors by the race detector.\n\tc.writeMu.Unlock()\n\n\tfor len(data) > 0 {\n\t\tspace := min(c.maxRemotePayload, len(data))\n\t\tif space, err = c.remoteWin.reserve(space); err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif want := headerLength + space; uint32(cap(packet)) < want {\n\t\t\tpacket = make([]byte, want)\n\t\t} else {\n\t\t\tpacket = packet[:want]\n\t\t}\n\n\t\ttodo := data[:space]\n\n\t\tpacket[0] = opCode\n\t\tbinary.BigEndian.PutUint32(packet[1:], c.remoteId)\n\t\tif extendedCode > 0 {\n\t\t\tbinary.BigEndian.PutUint32(packet[5:], uint32(extendedCode))\n\t\t}\n\t\tbinary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo)))\n\t\tcopy(packet[headerLength:], todo)\n\t\tif err = c.writePacket(packet); err != nil {\n\t\t\treturn n, err\n\t\t}\n\n\t\tn += len(todo)\n\t\tdata = data[len(todo):]\n\t}\n\n\tc.writeMu.Lock()\n\tc.packetPool[extendedCode] = packet\n\tc.writeMu.Unlock()\n\n\treturn n, err\n}\n\nfunc (c *channel) handleData(packet []byte) error {\n\theaderLen := 9\n\tisExtendedData := packet[0] == msgChannelExtendedData\n\tif isExtendedData {\n\t\theaderLen = 13\n\t}\n\tif len(packet) < headerLen {\n\t\t// malformed data packet\n\t\treturn parseError(packet[0])\n\t}\n\n\tvar extended uint32\n\tif isExtendedData {\n\t\textended = binary.BigEndian.Uint32(packet[5:])\n\t}\n\n\tlength := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen])\n\tif length == 0 {\n\t\treturn nil\n\t}\n\tif length > c.maxIncomingPayload {\n\t\t// TODO(hanwen): should send Disconnect?\n\t\treturn errors.New(\"ssh: incoming packet exceeds maximum payload size\")\n\t}\n\n\tdata := packet[headerLen:]\n\tif length != uint32(len(data)) {\n\t\treturn errors.New(\"ssh: wrong packet length\")\n\t}\n\n\tc.windowMu.Lock()\n\tif c.myWindow < length {\n\t\tc.windowMu.Unlock()\n\t\t// TODO(hanwen): should send Disconnect with reason?\n\t\treturn errors.New(\"ssh: remote side wrote too much\")\n\t}\n\tc.myWindow -= length\n\tc.windowMu.Unlock()\n\n\tif extended == 1 {\n\t\tc.extPending.write(data)\n\t} else if extended > 0 {\n\t\t// discard other extended data.\n\t} else {\n\t\tc.pending.write(data)\n\t}\n\treturn nil\n}\n\nfunc (c *channel) adjustWindow(n uint32) error {\n\tc.windowMu.Lock()\n\t// Since myWindow is managed on our side, and can never exceed\n\t// the initial window setting, we don't worry about overflow.\n\tc.myWindow += uint32(n)\n\tc.windowMu.Unlock()\n\treturn c.sendMessage(windowAdjustMsg{\n\t\tAdditionalBytes: uint32(n),\n\t})\n}\n\nfunc (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) {\n\tswitch extended {\n\tcase 1:\n\t\tn, err = c.extPending.Read(data)\n\tcase 0:\n\t\tn, err = c.pending.Read(data)\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"ssh: extended code %d unimplemented\", extended)\n\t}\n\n\tif n > 0 {\n\t\terr = c.adjustWindow(uint32(n))\n\t\t// sendWindowAdjust can return io.EOF if the remote\n\t\t// peer has closed the connection, however we want to\n\t\t// defer forwarding io.EOF to the caller of Read until\n\t\t// the buffer has been drained.\n\t\tif n > 0 && err == io.EOF {\n\t\t\terr = nil\n\t\t}\n\t}\n\n\treturn n, err\n}\n\nfunc (c *channel) close() {\n\tc.pending.eof()\n\tc.extPending.eof()\n\tclose(c.msg)\n\tclose(c.incomingRequests)\n\tc.writeMu.Lock()\n\t// This is not necessary for a normal channel teardown, but if\n\t// there was another error, it is.\n\tc.sentClose = true\n\tc.writeMu.Unlock()\n\t// Unblock writers.\n\tc.remoteWin.close()\n}\n\n// responseMessageReceived is called when a success or failure message is\n// received on a channel to check that such a message is reasonable for the\n// given channel.\nfunc (c *channel) responseMessageReceived() error {\n\tif c.direction == channelInbound {\n\t\treturn errors.New(\"ssh: channel response message received on inbound channel\")\n\t}\n\tif c.decided {\n\t\treturn errors.New(\"ssh: duplicate response received for channel\")\n\t}\n\tc.decided = true\n\treturn nil\n}\n\nfunc (c *channel) handlePacket(packet []byte) error {\n\tswitch packet[0] {\n\tcase msgChannelData, msgChannelExtendedData:\n\t\treturn c.handleData(packet)\n\tcase msgChannelClose:\n\t\tc.sendMessage(channelCloseMsg{PeersId: c.remoteId})\n\t\tc.mux.chanList.remove(c.localId)\n\t\tc.close()\n\t\treturn nil\n\tcase msgChannelEOF:\n\t\t// RFC 4254 is mute on how EOF affects dataExt messages but\n\t\t// it is logical to signal EOF at the same time.\n\t\tc.extPending.eof()\n\t\tc.pending.eof()\n\t\treturn nil\n\t}\n\n\tdecoded, err := decode(packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch msg := decoded.(type) {\n\tcase *channelOpenFailureMsg:\n\t\tif err := c.responseMessageReceived(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.mux.chanList.remove(msg.PeersId)\n\t\tc.msg <- msg\n\tcase *channelOpenConfirmMsg:\n\t\tif err := c.responseMessageReceived(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {\n\t\t\treturn fmt.Errorf(\"ssh: invalid MaxPacketSize %d from peer\", msg.MaxPacketSize)\n\t\t}\n\t\tc.remoteId = msg.MyId\n\t\tc.maxRemotePayload = msg.MaxPacketSize\n\t\tc.remoteWin.add(msg.MyWindow)\n\t\tc.msg <- msg\n\tcase *windowAdjustMsg:\n\t\tif !c.remoteWin.add(msg.AdditionalBytes) {\n\t\t\treturn fmt.Errorf(\"ssh: invalid window update for %d bytes\", msg.AdditionalBytes)\n\t\t}\n\tcase *channelRequestMsg:\n\t\treq := Request{\n\t\t\tType:      msg.Request,\n\t\t\tWantReply: msg.WantReply,\n\t\t\tPayload:   msg.RequestSpecificData,\n\t\t\tch:        c,\n\t\t}\n\n\t\tc.incomingRequests <- &req\n\tdefault:\n\t\tc.msg <- msg\n\t}\n\treturn nil\n}\n\nfunc (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel {\n\tch := &channel{\n\t\tremoteWin:        window{Cond: newCond()},\n\t\tmyWindow:         channelWindowSize,\n\t\tpending:          newBuffer(),\n\t\textPending:       newBuffer(),\n\t\tdirection:        direction,\n\t\tincomingRequests: make(chan *Request, chanSize),\n\t\tmsg:              make(chan interface{}, chanSize),\n\t\tchanType:         chanType,\n\t\textraData:        extraData,\n\t\tmux:              m,\n\t\tpacketPool:       make(map[uint32][]byte),\n\t}\n\tch.localId = m.chanList.add(ch)\n\treturn ch\n}\n\nvar errUndecided = errors.New(\"ssh: must Accept or Reject channel\")\nvar errDecidedAlready = errors.New(\"ssh: can call Accept or Reject only once\")\n\ntype extChannel struct {\n\tcode uint32\n\tch   *channel\n}\n\nfunc (e *extChannel) Write(data []byte) (n int, err error) {\n\treturn e.ch.WriteExtended(data, e.code)\n}\n\nfunc (e *extChannel) Read(data []byte) (n int, err error) {\n\treturn e.ch.ReadExtended(data, e.code)\n}\n\nfunc (c *channel) Accept() (Channel, <-chan *Request, error) {\n\tif c.decided {\n\t\treturn nil, nil, errDecidedAlready\n\t}\n\tc.maxIncomingPayload = channelMaxPacket\n\tconfirm := channelOpenConfirmMsg{\n\t\tPeersId:       c.remoteId,\n\t\tMyId:          c.localId,\n\t\tMyWindow:      c.myWindow,\n\t\tMaxPacketSize: c.maxIncomingPayload,\n\t}\n\tc.decided = true\n\tif err := c.sendMessage(confirm); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn c, c.incomingRequests, nil\n}\n\nfunc (ch *channel) Reject(reason RejectionReason, message string) error {\n\tif ch.decided {\n\t\treturn errDecidedAlready\n\t}\n\treject := channelOpenFailureMsg{\n\t\tPeersId:  ch.remoteId,\n\t\tReason:   reason,\n\t\tMessage:  message,\n\t\tLanguage: \"en\",\n\t}\n\tch.decided = true\n\treturn ch.sendMessage(reject)\n}\n\nfunc (ch *channel) Read(data []byte) (int, error) {\n\tif !ch.decided {\n\t\treturn 0, errUndecided\n\t}\n\treturn ch.ReadExtended(data, 0)\n}\n\nfunc (ch *channel) Write(data []byte) (int, error) {\n\tif !ch.decided {\n\t\treturn 0, errUndecided\n\t}\n\treturn ch.WriteExtended(data, 0)\n}\n\nfunc (ch *channel) CloseWrite() error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\tch.sentEOF = true\n\treturn ch.sendMessage(channelEOFMsg{\n\t\tPeersId: ch.remoteId})\n}\n\nfunc (ch *channel) Close() error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\n\treturn ch.sendMessage(channelCloseMsg{\n\t\tPeersId: ch.remoteId})\n}\n\n// Extended returns an io.ReadWriter that sends and receives data on the given,\n// SSH extended stream. Such streams are used, for example, for stderr.\nfunc (ch *channel) Extended(code uint32) io.ReadWriter {\n\tif !ch.decided {\n\t\treturn nil\n\t}\n\treturn &extChannel{code, ch}\n}\n\nfunc (ch *channel) Stderr() io.ReadWriter {\n\treturn ch.Extended(1)\n}\n\nfunc (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {\n\tif !ch.decided {\n\t\treturn false, errUndecided\n\t}\n\n\tif wantReply {\n\t\tch.sentRequestMu.Lock()\n\t\tdefer ch.sentRequestMu.Unlock()\n\t}\n\n\tmsg := channelRequestMsg{\n\t\tPeersId:             ch.remoteId,\n\t\tRequest:             name,\n\t\tWantReply:           wantReply,\n\t\tRequestSpecificData: payload,\n\t}\n\n\tif err := ch.sendMessage(msg); err != nil {\n\t\treturn false, err\n\t}\n\n\tif wantReply {\n\t\tm, ok := (<-ch.msg)\n\t\tif !ok {\n\t\t\treturn false, io.EOF\n\t\t}\n\t\tswitch m.(type) {\n\t\tcase *channelRequestFailureMsg:\n\t\t\treturn false, nil\n\t\tcase *channelRequestSuccessMsg:\n\t\t\treturn true, nil\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"ssh: unexpected response to channel request: %#v\", m)\n\t\t}\n\t}\n\n\treturn false, nil\n}\n\n// ackRequest either sends an ack or nack to the channel request.\nfunc (ch *channel) ackRequest(ok bool) error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\n\tvar msg interface{}\n\tif !ok {\n\t\tmsg = channelRequestFailureMsg{\n\t\t\tPeersId: ch.remoteId,\n\t\t}\n\t} else {\n\t\tmsg = channelRequestSuccessMsg{\n\t\t\tPeersId: ch.remoteId,\n\t\t}\n\t}\n\treturn ch.sendMessage(msg)\n}\n\nfunc (ch *channel) ChannelType() string {\n\treturn ch.chanType\n}\n\nfunc (ch *channel) ExtraData() []byte {\n\treturn ch.extraData\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/cipher.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 ssh\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/des\"\n\t\"crypto/rc4\"\n\t\"crypto/subtle\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"io/ioutil\"\n)\n\nconst (\n\tpacketSizeMultiple = 16 // TODO(huin) this should be determined by the cipher.\n\n\t// RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations\n\t// MUST be able to process (plus a few more kilobytes for padding and mac). The RFC\n\t// indicates implementations SHOULD be able to handle larger packet sizes, but then\n\t// waffles on about reasonable limits.\n\t//\n\t// OpenSSH caps their maxPacket at 256kB so we choose to do\n\t// the same. maxPacket is also used to ensure that uint32\n\t// length fields do not overflow, so it should remain well\n\t// below 4G.\n\tmaxPacket = 256 * 1024\n)\n\n// noneCipher implements cipher.Stream and provides no encryption. It is used\n// by the transport before the first key-exchange.\ntype noneCipher struct{}\n\nfunc (c noneCipher) XORKeyStream(dst, src []byte) {\n\tcopy(dst, src)\n}\n\nfunc newAESCTR(key, iv []byte) (cipher.Stream, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cipher.NewCTR(c, iv), nil\n}\n\nfunc newRC4(key, iv []byte) (cipher.Stream, error) {\n\treturn rc4.NewCipher(key)\n}\n\ntype streamCipherMode struct {\n\tkeySize    int\n\tivSize     int\n\tskip       int\n\tcreateFunc func(key, iv []byte) (cipher.Stream, error)\n}\n\nfunc (c *streamCipherMode) createStream(key, iv []byte) (cipher.Stream, error) {\n\tif len(key) < c.keySize {\n\t\tpanic(\"ssh: key length too small for cipher\")\n\t}\n\tif len(iv) < c.ivSize {\n\t\tpanic(\"ssh: iv too small for cipher\")\n\t}\n\n\tstream, err := c.createFunc(key[:c.keySize], iv[:c.ivSize])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar streamDump []byte\n\tif c.skip > 0 {\n\t\tstreamDump = make([]byte, 512)\n\t}\n\n\tfor remainingToDump := c.skip; remainingToDump > 0; {\n\t\tdumpThisTime := remainingToDump\n\t\tif dumpThisTime > len(streamDump) {\n\t\t\tdumpThisTime = len(streamDump)\n\t\t}\n\t\tstream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime])\n\t\tremainingToDump -= dumpThisTime\n\t}\n\n\treturn stream, nil\n}\n\n// cipherModes documents properties of supported ciphers. Ciphers not included\n// are not supported and will not be negotiated, even if explicitly requested in\n// ClientConfig.Crypto.Ciphers.\nvar cipherModes = map[string]*streamCipherMode{\n\t// Ciphers from RFC4344, which introduced many CTR-based ciphers. Algorithms\n\t// are defined in the order specified in the RFC.\n\t\"aes128-ctr\": {16, aes.BlockSize, 0, newAESCTR},\n\t\"aes192-ctr\": {24, aes.BlockSize, 0, newAESCTR},\n\t\"aes256-ctr\": {32, aes.BlockSize, 0, newAESCTR},\n\n\t// Ciphers from RFC4345, which introduces security-improved arcfour ciphers.\n\t// They are defined in the order specified in the RFC.\n\t\"arcfour128\": {16, 0, 1536, newRC4},\n\t\"arcfour256\": {32, 0, 1536, newRC4},\n\n\t// Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol.\n\t// Note that this cipher is not safe, as stated in RFC 4253: \"Arcfour (and\n\t// RC4) has problems with weak keys, and should be used with caution.\"\n\t// RFC4345 introduces improved versions of Arcfour.\n\t\"arcfour\": {16, 0, 0, newRC4},\n\n\t// AES-GCM is not a stream cipher, so it is constructed with a\n\t// special case. If we add any more non-stream ciphers, we\n\t// should invest a cleaner way to do this.\n\tgcmCipherID: {16, 12, 0, nil},\n\n\t// CBC mode is insecure and so is not included in the default config.\n\t// (See http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf). If absolutely\n\t// needed, it's possible to specify a custom Config to enable it.\n\t// You should expect that an active attacker can recover plaintext if\n\t// you do.\n\taes128cbcID: {16, aes.BlockSize, 0, nil},\n\n\t// 3des-cbc is insecure and is disabled by default.\n\ttripledescbcID: {24, des.BlockSize, 0, nil},\n}\n\n// prefixLen is the length of the packet prefix that contains the packet length\n// and number of padding bytes.\nconst prefixLen = 5\n\n// streamPacketCipher is a packetCipher using a stream cipher.\ntype streamPacketCipher struct {\n\tmac    hash.Hash\n\tcipher cipher.Stream\n\tetm    bool\n\n\t// The following members are to avoid per-packet allocations.\n\tprefix      [prefixLen]byte\n\tseqNumBytes [4]byte\n\tpadding     [2 * packetSizeMultiple]byte\n\tpacketData  []byte\n\tmacResult   []byte\n}\n\n// readPacket reads and decrypt a single packet from the reader argument.\nfunc (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tif _, err := io.ReadFull(r, s.prefix[:]); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar encryptedPaddingLength [1]byte\n\tif s.mac != nil && s.etm {\n\t\tcopy(encryptedPaddingLength[:], s.prefix[4:5])\n\t\ts.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])\n\t} else {\n\t\ts.cipher.XORKeyStream(s.prefix[:], s.prefix[:])\n\t}\n\n\tlength := binary.BigEndian.Uint32(s.prefix[0:4])\n\tpaddingLength := uint32(s.prefix[4])\n\n\tvar macSize uint32\n\tif s.mac != nil {\n\t\ts.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)\n\t\ts.mac.Write(s.seqNumBytes[:])\n\t\tif s.etm {\n\t\t\ts.mac.Write(s.prefix[:4])\n\t\t\ts.mac.Write(encryptedPaddingLength[:])\n\t\t} else {\n\t\t\ts.mac.Write(s.prefix[:])\n\t\t}\n\t\tmacSize = uint32(s.mac.Size())\n\t}\n\n\tif length <= paddingLength+1 {\n\t\treturn nil, errors.New(\"ssh: invalid packet length, packet too small\")\n\t}\n\n\tif length > maxPacket {\n\t\treturn nil, errors.New(\"ssh: invalid packet length, packet too large\")\n\t}\n\n\t// the maxPacket check above ensures that length-1+macSize\n\t// does not overflow.\n\tif uint32(cap(s.packetData)) < length-1+macSize {\n\t\ts.packetData = make([]byte, length-1+macSize)\n\t} else {\n\t\ts.packetData = s.packetData[:length-1+macSize]\n\t}\n\n\tif _, err := io.ReadFull(r, s.packetData); err != nil {\n\t\treturn nil, err\n\t}\n\tmac := s.packetData[length-1:]\n\tdata := s.packetData[:length-1]\n\n\tif s.mac != nil && s.etm {\n\t\ts.mac.Write(data)\n\t}\n\n\ts.cipher.XORKeyStream(data, data)\n\n\tif s.mac != nil {\n\t\tif !s.etm {\n\t\t\ts.mac.Write(data)\n\t\t}\n\t\ts.macResult = s.mac.Sum(s.macResult[:0])\n\t\tif subtle.ConstantTimeCompare(s.macResult, mac) != 1 {\n\t\t\treturn nil, errors.New(\"ssh: MAC failure\")\n\t\t}\n\t}\n\n\treturn s.packetData[:length-paddingLength-1], nil\n}\n\n// writePacket encrypts and sends a packet of data to the writer argument\nfunc (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\tif len(packet) > maxPacket {\n\t\treturn errors.New(\"ssh: packet too large\")\n\t}\n\n\taadlen := 0\n\tif s.mac != nil && s.etm {\n\t\t// packet length is not encrypted for EtM modes\n\t\taadlen = 4\n\t}\n\n\tpaddingLength := packetSizeMultiple - (prefixLen+len(packet)-aadlen)%packetSizeMultiple\n\tif paddingLength < 4 {\n\t\tpaddingLength += packetSizeMultiple\n\t}\n\n\tlength := len(packet) + 1 + paddingLength\n\tbinary.BigEndian.PutUint32(s.prefix[:], uint32(length))\n\ts.prefix[4] = byte(paddingLength)\n\tpadding := s.padding[:paddingLength]\n\tif _, err := io.ReadFull(rand, padding); err != nil {\n\t\treturn err\n\t}\n\n\tif s.mac != nil {\n\t\ts.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)\n\t\ts.mac.Write(s.seqNumBytes[:])\n\n\t\tif s.etm {\n\t\t\t// For EtM algorithms, the packet length must stay unencrypted,\n\t\t\t// but the following data (padding length) must be encrypted\n\t\t\ts.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])\n\t\t}\n\n\t\ts.mac.Write(s.prefix[:])\n\n\t\tif !s.etm {\n\t\t\t// For non-EtM algorithms, the algorithm is applied on unencrypted data\n\t\t\ts.mac.Write(packet)\n\t\t\ts.mac.Write(padding)\n\t\t}\n\t}\n\n\tif !(s.mac != nil && s.etm) {\n\t\t// For EtM algorithms, the padding length has already been encrypted\n\t\t// and the packet length must remain unencrypted\n\t\ts.cipher.XORKeyStream(s.prefix[:], s.prefix[:])\n\t}\n\n\ts.cipher.XORKeyStream(packet, packet)\n\ts.cipher.XORKeyStream(padding, padding)\n\n\tif s.mac != nil && s.etm {\n\t\t// For EtM algorithms, packet and padding must be encrypted\n\t\ts.mac.Write(packet)\n\t\ts.mac.Write(padding)\n\t}\n\n\tif _, err := w.Write(s.prefix[:]); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.Write(packet); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.Write(padding); err != nil {\n\t\treturn err\n\t}\n\n\tif s.mac != nil {\n\t\ts.macResult = s.mac.Sum(s.macResult[:0])\n\t\tif _, err := w.Write(s.macResult); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype gcmCipher struct {\n\taead   cipher.AEAD\n\tprefix [4]byte\n\tiv     []byte\n\tbuf    []byte\n}\n\nfunc newGCMCipher(iv, key, macKey []byte) (packetCipher, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taead, err := cipher.NewGCM(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &gcmCipher{\n\t\taead: aead,\n\t\tiv:   iv,\n\t}, nil\n}\n\nconst gcmTagSize = 16\n\nfunc (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\t// Pad out to multiple of 16 bytes. This is different from the\n\t// stream cipher because that encrypts the length too.\n\tpadding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple)\n\tif padding < 4 {\n\t\tpadding += packetSizeMultiple\n\t}\n\n\tlength := uint32(len(packet) + int(padding) + 1)\n\tbinary.BigEndian.PutUint32(c.prefix[:], length)\n\tif _, err := w.Write(c.prefix[:]); err != nil {\n\t\treturn err\n\t}\n\n\tif cap(c.buf) < int(length) {\n\t\tc.buf = make([]byte, length)\n\t} else {\n\t\tc.buf = c.buf[:length]\n\t}\n\n\tc.buf[0] = padding\n\tcopy(c.buf[1:], packet)\n\tif _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil {\n\t\treturn err\n\t}\n\tc.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:])\n\tif _, err := w.Write(c.buf); err != nil {\n\t\treturn err\n\t}\n\tc.incIV()\n\n\treturn nil\n}\n\nfunc (c *gcmCipher) incIV() {\n\tfor i := 4 + 7; i >= 4; i-- {\n\t\tc.iv[i]++\n\t\tif c.iv[i] != 0 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tif _, err := io.ReadFull(r, c.prefix[:]); err != nil {\n\t\treturn nil, err\n\t}\n\tlength := binary.BigEndian.Uint32(c.prefix[:])\n\tif length > maxPacket {\n\t\treturn nil, errors.New(\"ssh: max packet length exceeded.\")\n\t}\n\n\tif cap(c.buf) < int(length+gcmTagSize) {\n\t\tc.buf = make([]byte, length+gcmTagSize)\n\t} else {\n\t\tc.buf = c.buf[:length+gcmTagSize]\n\t}\n\n\tif _, err := io.ReadFull(r, c.buf); err != nil {\n\t\treturn nil, err\n\t}\n\n\tplain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.incIV()\n\n\tpadding := plain[0]\n\tif padding < 4 || padding >= 20 {\n\t\treturn nil, fmt.Errorf(\"ssh: illegal padding %d\", padding)\n\t}\n\n\tif int(padding+1) >= len(plain) {\n\t\treturn nil, fmt.Errorf(\"ssh: padding %d too large\", padding)\n\t}\n\tplain = plain[1 : length-uint32(padding)]\n\treturn plain, nil\n}\n\n// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1\ntype cbcCipher struct {\n\tmac       hash.Hash\n\tmacSize   uint32\n\tdecrypter cipher.BlockMode\n\tencrypter cipher.BlockMode\n\n\t// The following members are to avoid per-packet allocations.\n\tseqNumBytes [4]byte\n\tpacketData  []byte\n\tmacResult   []byte\n\n\t// Amount of data we should still read to hide which\n\t// verification error triggered.\n\toracleCamouflage uint32\n}\n\nfunc newCBCCipher(c cipher.Block, iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tcbc := &cbcCipher{\n\t\tmac:        macModes[algs.MAC].new(macKey),\n\t\tdecrypter:  cipher.NewCBCDecrypter(c, iv),\n\t\tencrypter:  cipher.NewCBCEncrypter(c, iv),\n\t\tpacketData: make([]byte, 1024),\n\t}\n\tif cbc.mac != nil {\n\t\tcbc.macSize = uint32(cbc.mac.Size())\n\t}\n\n\treturn cbc, nil\n}\n\nfunc newAESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcbc, err := newCBCCipher(c, iv, key, macKey, algs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cbc, nil\n}\n\nfunc newTripleDESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tc, err := des.NewTripleDESCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcbc, err := newCBCCipher(c, iv, key, macKey, algs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cbc, nil\n}\n\nfunc maxUInt32(a, b int) uint32 {\n\tif a > b {\n\t\treturn uint32(a)\n\t}\n\treturn uint32(b)\n}\n\nconst (\n\tcbcMinPacketSizeMultiple = 8\n\tcbcMinPacketSize         = 16\n\tcbcMinPaddingSize        = 4\n)\n\n// cbcError represents a verification error that may leak information.\ntype cbcError string\n\nfunc (e cbcError) Error() string { return string(e) }\n\nfunc (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tp, err := c.readPacketLeaky(seqNum, r)\n\tif err != nil {\n\t\tif _, ok := err.(cbcError); ok {\n\t\t\t// Verification error: read a fixed amount of\n\t\t\t// data, to make distinguishing between\n\t\t\t// failing MAC and failing length check more\n\t\t\t// difficult.\n\t\t\tio.CopyN(ioutil.Discard, r, int64(c.oracleCamouflage))\n\t\t}\n\t}\n\treturn p, err\n}\n\nfunc (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) {\n\tblockSize := c.decrypter.BlockSize()\n\n\t// Read the header, which will include some of the subsequent data in the\n\t// case of block ciphers - this is copied back to the payload later.\n\t// How many bytes of payload/padding will be read with this first read.\n\tfirstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize)\n\tfirstBlock := c.packetData[:firstBlockLength]\n\tif _, err := io.ReadFull(r, firstBlock); err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength\n\n\tc.decrypter.CryptBlocks(firstBlock, firstBlock)\n\tlength := binary.BigEndian.Uint32(firstBlock[:4])\n\tif length > maxPacket {\n\t\treturn nil, cbcError(\"ssh: packet too large\")\n\t}\n\tif length+4 < maxUInt32(cbcMinPacketSize, blockSize) {\n\t\t// The minimum size of a packet is 16 (or the cipher block size, whichever\n\t\t// is larger) bytes.\n\t\treturn nil, cbcError(\"ssh: packet too small\")\n\t}\n\t// The length of the packet (including the length field but not the MAC) must\n\t// be a multiple of the block size or 8, whichever is larger.\n\tif (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 {\n\t\treturn nil, cbcError(\"ssh: invalid packet length multiple\")\n\t}\n\n\tpaddingLength := uint32(firstBlock[4])\n\tif paddingLength < cbcMinPaddingSize || length <= paddingLength+1 {\n\t\treturn nil, cbcError(\"ssh: invalid packet length\")\n\t}\n\n\t// Positions within the c.packetData buffer:\n\tmacStart := 4 + length\n\tpaddingStart := macStart - paddingLength\n\n\t// Entire packet size, starting before length, ending at end of mac.\n\tentirePacketSize := macStart + c.macSize\n\n\t// Ensure c.packetData is large enough for the entire packet data.\n\tif uint32(cap(c.packetData)) < entirePacketSize {\n\t\t// Still need to upsize and copy, but this should be rare at runtime, only\n\t\t// on upsizing the packetData buffer.\n\t\tc.packetData = make([]byte, entirePacketSize)\n\t\tcopy(c.packetData, firstBlock)\n\t} else {\n\t\tc.packetData = c.packetData[:entirePacketSize]\n\t}\n\n\tif n, err := io.ReadFull(r, c.packetData[firstBlockLength:]); err != nil {\n\t\treturn nil, err\n\t} else {\n\t\tc.oracleCamouflage -= uint32(n)\n\t}\n\n\tremainingCrypted := c.packetData[firstBlockLength:macStart]\n\tc.decrypter.CryptBlocks(remainingCrypted, remainingCrypted)\n\n\tmac := c.packetData[macStart:]\n\tif c.mac != nil {\n\t\tc.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)\n\t\tc.mac.Write(c.seqNumBytes[:])\n\t\tc.mac.Write(c.packetData[:macStart])\n\t\tc.macResult = c.mac.Sum(c.macResult[:0])\n\t\tif subtle.ConstantTimeCompare(c.macResult, mac) != 1 {\n\t\t\treturn nil, cbcError(\"ssh: MAC failure\")\n\t\t}\n\t}\n\n\treturn c.packetData[prefixLen:paddingStart], nil\n}\n\nfunc (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\teffectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize())\n\n\t// Length of encrypted portion of the packet (header, payload, padding).\n\t// Enforce minimum padding and packet size.\n\tencLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize)\n\t// Enforce block size.\n\tencLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize\n\n\tlength := encLength - 4\n\tpaddingLength := int(length) - (1 + len(packet))\n\n\t// Overall buffer contains: header, payload, padding, mac.\n\t// Space for the MAC is reserved in the capacity but not the slice length.\n\tbufferSize := encLength + c.macSize\n\tif uint32(cap(c.packetData)) < bufferSize {\n\t\tc.packetData = make([]byte, encLength, bufferSize)\n\t} else {\n\t\tc.packetData = c.packetData[:encLength]\n\t}\n\n\tp := c.packetData\n\n\t// Packet header.\n\tbinary.BigEndian.PutUint32(p, length)\n\tp = p[4:]\n\tp[0] = byte(paddingLength)\n\n\t// Payload.\n\tp = p[1:]\n\tcopy(p, packet)\n\n\t// Padding.\n\tp = p[len(packet):]\n\tif _, err := io.ReadFull(rand, p); err != nil {\n\t\treturn err\n\t}\n\n\tif c.mac != nil {\n\t\tc.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)\n\t\tc.mac.Write(c.seqNumBytes[:])\n\t\tc.mac.Write(c.packetData)\n\t\t// The MAC is now appended into the capacity reserved for it earlier.\n\t\tc.packetData = c.mac.Sum(c.packetData)\n\t}\n\n\tc.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength])\n\n\tif _, err := w.Write(c.packetData); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/client.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Client implements a traditional SSH client that supports shells,\n// subprocesses, TCP port/streamlocal forwarding and tunneled dialing.\ntype Client struct {\n\tConn\n\n\tforwards        forwardList // forwarded tcpip connections from the remote side\n\tmu              sync.Mutex\n\tchannelHandlers map[string]chan NewChannel\n}\n\n// HandleChannelOpen returns a channel on which NewChannel requests\n// for the given type are sent. If the type already is being handled,\n// nil is returned. The channel is closed when the connection is closed.\nfunc (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tif c.channelHandlers == nil {\n\t\t// The SSH channel has been closed.\n\t\tc := make(chan NewChannel)\n\t\tclose(c)\n\t\treturn c\n\t}\n\n\tch := c.channelHandlers[channelType]\n\tif ch != nil {\n\t\treturn nil\n\t}\n\n\tch = make(chan NewChannel, chanSize)\n\tc.channelHandlers[channelType] = ch\n\treturn ch\n}\n\n// NewClient creates a Client on top of the given connection.\nfunc NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client {\n\tconn := &Client{\n\t\tConn:            c,\n\t\tchannelHandlers: make(map[string]chan NewChannel, 1),\n\t}\n\n\tgo conn.handleGlobalRequests(reqs)\n\tgo conn.handleChannelOpens(chans)\n\tgo func() {\n\t\tconn.Wait()\n\t\tconn.forwards.closeAll()\n\t}()\n\tgo conn.forwards.handleChannels(conn.HandleChannelOpen(\"forwarded-tcpip\"))\n\tgo conn.forwards.handleChannels(conn.HandleChannelOpen(\"forwarded-streamlocal@openssh.com\"))\n\treturn conn\n}\n\n// NewClientConn establishes an authenticated SSH connection using c\n// as the underlying transport.  The Request and NewChannel channels\n// must be serviced or the connection will hang.\nfunc NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) {\n\tfullConf := *config\n\tfullConf.SetDefaults()\n\tif fullConf.HostKeyCallback == nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, errors.New(\"ssh: must specify HostKeyCallback\")\n\t}\n\n\tconn := &connection{\n\t\tsshConn: sshConn{conn: c},\n\t}\n\n\tif err := conn.clientHandshake(addr, &fullConf); err != nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, fmt.Errorf(\"ssh: handshake failed: %v\", err)\n\t}\n\tconn.mux = newMux(conn.transport)\n\treturn conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil\n}\n\n// clientHandshake performs the client side key exchange. See RFC 4253 Section\n// 7.\nfunc (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error {\n\tif config.ClientVersion != \"\" {\n\t\tc.clientVersion = []byte(config.ClientVersion)\n\t} else {\n\t\tc.clientVersion = []byte(packageVersion)\n\t}\n\tvar err error\n\tc.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc.transport = newClientTransport(\n\t\tnewTransport(c.sshConn.conn, config.Rand, true /* is client */),\n\t\tc.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr())\n\tif err := c.transport.waitSession(); err != nil {\n\t\treturn err\n\t}\n\n\tc.sessionID = c.transport.getSessionID()\n\treturn c.clientAuthenticate(config)\n}\n\n// verifyHostKeySignature verifies the host key obtained in the key\n// exchange.\nfunc verifyHostKeySignature(hostKey PublicKey, result *kexResult) error {\n\tsig, rest, ok := parseSignatureBody(result.Signature)\n\tif len(rest) > 0 || !ok {\n\t\treturn errors.New(\"ssh: signature parse error\")\n\t}\n\n\treturn hostKey.Verify(result.H, sig)\n}\n\n// NewSession opens a new Session for this client. (A session is a remote\n// execution of a program.)\nfunc (c *Client) NewSession() (*Session, error) {\n\tch, in, err := c.OpenChannel(\"session\", nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newSession(ch, in)\n}\n\nfunc (c *Client) handleGlobalRequests(incoming <-chan *Request) {\n\tfor r := range incoming {\n\t\t// This handles keepalive messages and matches\n\t\t// the behaviour of OpenSSH.\n\t\tr.Reply(false, nil)\n\t}\n}\n\n// handleChannelOpens channel open messages from the remote side.\nfunc (c *Client) handleChannelOpens(in <-chan NewChannel) {\n\tfor ch := range in {\n\t\tc.mu.Lock()\n\t\thandler := c.channelHandlers[ch.ChannelType()]\n\t\tc.mu.Unlock()\n\n\t\tif handler != nil {\n\t\t\thandler <- ch\n\t\t} else {\n\t\t\tch.Reject(UnknownChannelType, fmt.Sprintf(\"unknown channel type: %v\", ch.ChannelType()))\n\t\t}\n\t}\n\n\tc.mu.Lock()\n\tfor _, ch := range c.channelHandlers {\n\t\tclose(ch)\n\t}\n\tc.channelHandlers = nil\n\tc.mu.Unlock()\n}\n\n// Dial starts a client connection to the given SSH server. It is a\n// convenience function that connects to the given network address,\n// initiates the SSH handshake, and then sets up a Client.  For access\n// to incoming channels and requests, use net.Dial with NewClientConn\n// instead.\nfunc Dial(network, addr string, config *ClientConfig) (*Client, error) {\n\tconn, err := net.DialTimeout(network, addr, config.Timeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc, chans, reqs, err := NewClientConn(conn, addr, config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewClient(c, chans, reqs), nil\n}\n\n// HostKeyCallback is the function type used for verifying server\n// keys.  A HostKeyCallback must return nil if the host key is OK, or\n// an error to reject it. It receives the hostname as passed to Dial\n// or NewClientConn. The remote address is the RemoteAddr of the\n// net.Conn underlying the the SSH connection.\ntype HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error\n\n// A ClientConfig structure is used to configure a Client. It must not be\n// modified after having been passed to an SSH function.\ntype ClientConfig struct {\n\t// Config contains configuration that is shared between clients and\n\t// servers.\n\tConfig\n\n\t// User contains the username to authenticate as.\n\tUser string\n\n\t// Auth contains possible authentication methods to use with the\n\t// server. Only the first instance of a particular RFC 4252 method will\n\t// be used during authentication.\n\tAuth []AuthMethod\n\n\t// HostKeyCallback is called during the cryptographic\n\t// handshake to validate the server's host key. The client\n\t// configuration must supply this callback for the connection\n\t// to succeed. The functions InsecureIgnoreHostKey or\n\t// FixedHostKey can be used for simplistic host key checks.\n\tHostKeyCallback HostKeyCallback\n\n\t// ClientVersion contains the version identification string that will\n\t// be used for the connection. If empty, a reasonable default is used.\n\tClientVersion string\n\n\t// HostKeyAlgorithms lists the key types that the client will\n\t// accept from the server as host key, in order of\n\t// preference. If empty, a reasonable default is used. Any\n\t// string returned from PublicKey.Type method may be used, or\n\t// any of the CertAlgoXxxx and KeyAlgoXxxx constants.\n\tHostKeyAlgorithms []string\n\n\t// Timeout is the maximum amount of time for the TCP connection to establish.\n\t//\n\t// A Timeout of zero means no timeout.\n\tTimeout time.Duration\n}\n\n// InsecureIgnoreHostKey returns a function that can be used for\n// ClientConfig.HostKeyCallback to accept any host key. It should\n// not be used for production code.\nfunc InsecureIgnoreHostKey() HostKeyCallback {\n\treturn func(hostname string, remote net.Addr, key PublicKey) error {\n\t\treturn nil\n\t}\n}\n\ntype fixedHostKey struct {\n\tkey PublicKey\n}\n\nfunc (f *fixedHostKey) check(hostname string, remote net.Addr, key PublicKey) error {\n\tif f.key == nil {\n\t\treturn fmt.Errorf(\"ssh: required host key was nil\")\n\t}\n\tif !bytes.Equal(key.Marshal(), f.key.Marshal()) {\n\t\treturn fmt.Errorf(\"ssh: host key mismatch\")\n\t}\n\treturn nil\n}\n\n// FixedHostKey returns a function for use in\n// ClientConfig.HostKeyCallback to accept only a specific host key.\nfunc FixedHostKey(key PublicKey) HostKeyCallback {\n\thk := &fixedHostKey{key}\n\treturn hk.check\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/client_auth.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// clientAuthenticate authenticates with the remote server. See RFC 4252.\nfunc (c *connection) clientAuthenticate(config *ClientConfig) error {\n\t// initiate user auth session\n\tif err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil {\n\t\treturn err\n\t}\n\tpacket, err := c.transport.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar serviceAccept serviceAcceptMsg\n\tif err := Unmarshal(packet, &serviceAccept); err != nil {\n\t\treturn err\n\t}\n\n\t// during the authentication phase the client first attempts the \"none\" method\n\t// then any untried methods suggested by the server.\n\ttried := make(map[string]bool)\n\tvar lastMethods []string\n\n\tsessionID := c.transport.getSessionID()\n\tfor auth := AuthMethod(new(noneAuth)); auth != nil; {\n\t\tok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif ok {\n\t\t\t// success\n\t\t\treturn nil\n\t\t}\n\t\ttried[auth.method()] = true\n\t\tif methods == nil {\n\t\t\tmethods = lastMethods\n\t\t}\n\t\tlastMethods = methods\n\n\t\tauth = nil\n\n\tfindNext:\n\t\tfor _, a := range config.Auth {\n\t\t\tcandidateMethod := a.method()\n\t\t\tif tried[candidateMethod] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, meth := range methods {\n\t\t\t\tif meth == candidateMethod {\n\t\t\t\t\tauth = a\n\t\t\t\t\tbreak findNext\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn fmt.Errorf(\"ssh: unable to authenticate, attempted methods %v, no supported methods remain\", keys(tried))\n}\n\nfunc keys(m map[string]bool) []string {\n\ts := make([]string, 0, len(m))\n\n\tfor key := range m {\n\t\ts = append(s, key)\n\t}\n\treturn s\n}\n\n// An AuthMethod represents an instance of an RFC 4252 authentication method.\ntype AuthMethod interface {\n\t// auth authenticates user over transport t.\n\t// Returns true if authentication is successful.\n\t// If authentication is not successful, a []string of alternative\n\t// method names is returned. If the slice is nil, it will be ignored\n\t// and the previous set of possible methods will be reused.\n\tauth(session []byte, user string, p packetConn, rand io.Reader) (bool, []string, error)\n\n\t// method returns the RFC 4252 method name.\n\tmethod() string\n}\n\n// \"none\" authentication, RFC 4252 section 5.2.\ntype noneAuth int\n\nfunc (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {\n\tif err := c.writePacket(Marshal(&userAuthRequestMsg{\n\t\tUser:    user,\n\t\tService: serviceSSH,\n\t\tMethod:  \"none\",\n\t})); err != nil {\n\t\treturn false, nil, err\n\t}\n\n\treturn handleAuthResponse(c)\n}\n\nfunc (n *noneAuth) method() string {\n\treturn \"none\"\n}\n\n// passwordCallback is an AuthMethod that fetches the password through\n// a function call, e.g. by prompting the user.\ntype passwordCallback func() (password string, err error)\n\nfunc (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {\n\ttype passwordAuthMsg struct {\n\t\tUser     string `sshtype:\"50\"`\n\t\tService  string\n\t\tMethod   string\n\t\tReply    bool\n\t\tPassword string\n\t}\n\n\tpw, err := cb()\n\t// REVIEW NOTE: is there a need to support skipping a password attempt?\n\t// The program may only find out that the user doesn't have a password\n\t// when prompting.\n\tif err != nil {\n\t\treturn false, nil, err\n\t}\n\n\tif err := c.writePacket(Marshal(&passwordAuthMsg{\n\t\tUser:     user,\n\t\tService:  serviceSSH,\n\t\tMethod:   cb.method(),\n\t\tReply:    false,\n\t\tPassword: pw,\n\t})); err != nil {\n\t\treturn false, nil, err\n\t}\n\n\treturn handleAuthResponse(c)\n}\n\nfunc (cb passwordCallback) method() string {\n\treturn \"password\"\n}\n\n// Password returns an AuthMethod using the given password.\nfunc Password(secret string) AuthMethod {\n\treturn passwordCallback(func() (string, error) { return secret, nil })\n}\n\n// PasswordCallback returns an AuthMethod that uses a callback for\n// fetching a password.\nfunc PasswordCallback(prompt func() (secret string, err error)) AuthMethod {\n\treturn passwordCallback(prompt)\n}\n\ntype publickeyAuthMsg struct {\n\tUser    string `sshtype:\"50\"`\n\tService string\n\tMethod  string\n\t// HasSig indicates to the receiver packet that the auth request is signed and\n\t// should be used for authentication of the request.\n\tHasSig   bool\n\tAlgoname string\n\tPubKey   []byte\n\t// Sig is tagged with \"rest\" so Marshal will exclude it during\n\t// validateKey\n\tSig []byte `ssh:\"rest\"`\n}\n\n// publicKeyCallback is an AuthMethod that uses a set of key\n// pairs for authentication.\ntype publicKeyCallback func() ([]Signer, error)\n\nfunc (cb publicKeyCallback) method() string {\n\treturn \"publickey\"\n}\n\nfunc (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {\n\t// Authentication is performed by sending an enquiry to test if a key is\n\t// acceptable to the remote. If the key is acceptable, the client will\n\t// attempt to authenticate with the valid key.  If not the client will repeat\n\t// the process with the remaining keys.\n\n\tsigners, err := cb()\n\tif err != nil {\n\t\treturn false, nil, err\n\t}\n\tvar methods []string\n\tfor _, signer := range signers {\n\t\tok, err := validateKey(signer.PublicKey(), user, c)\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tpub := signer.PublicKey()\n\t\tpubKey := pub.Marshal()\n\t\tsign, err := signer.Sign(rand, buildDataSignedForAuth(session, userAuthRequestMsg{\n\t\t\tUser:    user,\n\t\t\tService: serviceSSH,\n\t\t\tMethod:  cb.method(),\n\t\t}, []byte(pub.Type()), pubKey))\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\t// manually wrap the serialized signature in a string\n\t\ts := Marshal(sign)\n\t\tsig := make([]byte, stringLength(len(s)))\n\t\tmarshalString(sig, s)\n\t\tmsg := publickeyAuthMsg{\n\t\t\tUser:     user,\n\t\t\tService:  serviceSSH,\n\t\t\tMethod:   cb.method(),\n\t\t\tHasSig:   true,\n\t\t\tAlgoname: pub.Type(),\n\t\t\tPubKey:   pubKey,\n\t\t\tSig:      sig,\n\t\t}\n\t\tp := Marshal(&msg)\n\t\tif err := c.writePacket(p); err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\t\tvar success bool\n\t\tsuccess, methods, err = handleAuthResponse(c)\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\t// If authentication succeeds or the list of available methods does not\n\t\t// contain the \"publickey\" method, do not attempt to authenticate with any\n\t\t// other keys.  According to RFC 4252 Section 7, the latter can occur when\n\t\t// additional authentication methods are required.\n\t\tif success || !containsMethod(methods, cb.method()) {\n\t\t\treturn success, methods, err\n\t\t}\n\t}\n\n\treturn false, methods, nil\n}\n\nfunc containsMethod(methods []string, method string) bool {\n\tfor _, m := range methods {\n\t\tif m == method {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// validateKey validates the key provided is acceptable to the server.\nfunc validateKey(key PublicKey, user string, c packetConn) (bool, error) {\n\tpubKey := key.Marshal()\n\tmsg := publickeyAuthMsg{\n\t\tUser:     user,\n\t\tService:  serviceSSH,\n\t\tMethod:   \"publickey\",\n\t\tHasSig:   false,\n\t\tAlgoname: key.Type(),\n\t\tPubKey:   pubKey,\n\t}\n\tif err := c.writePacket(Marshal(&msg)); err != nil {\n\t\treturn false, err\n\t}\n\n\treturn confirmKeyAck(key, c)\n}\n\nfunc confirmKeyAck(key PublicKey, c packetConn) (bool, error) {\n\tpubKey := key.Marshal()\n\talgoname := key.Type()\n\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\t// TODO(gpaul): add callback to present the banner to the user\n\t\tcase msgUserAuthPubKeyOk:\n\t\t\tvar msg userAuthPubKeyOkMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tif msg.Algo != algoname || !bytes.Equal(msg.PubKey, pubKey) {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\treturn true, nil\n\t\tcase msgUserAuthFailure:\n\t\t\treturn false, nil\n\t\tdefault:\n\t\t\treturn false, unexpectedMessageError(msgUserAuthSuccess, packet[0])\n\t\t}\n\t}\n}\n\n// PublicKeys returns an AuthMethod that uses the given key\n// pairs.\nfunc PublicKeys(signers ...Signer) AuthMethod {\n\treturn publicKeyCallback(func() ([]Signer, error) { return signers, nil })\n}\n\n// PublicKeysCallback returns an AuthMethod that runs the given\n// function to obtain a list of key pairs.\nfunc PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod {\n\treturn publicKeyCallback(getSigners)\n}\n\n// handleAuthResponse returns whether the preceding authentication request succeeded\n// along with a list of remaining authentication methods to try next and\n// an error if an unexpected response was received.\nfunc handleAuthResponse(c packetConn) (bool, []string, error) {\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\t// TODO: add callback to present the banner to the user\n\t\tcase msgUserAuthFailure:\n\t\t\tvar msg userAuthFailureMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn false, nil, err\n\t\t\t}\n\t\t\treturn false, msg.Methods, nil\n\t\tcase msgUserAuthSuccess:\n\t\t\treturn true, nil, nil\n\t\tdefault:\n\t\t\treturn false, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])\n\t\t}\n\t}\n}\n\n// KeyboardInteractiveChallenge should print questions, optionally\n// disabling echoing (e.g. for passwords), and return all the answers.\n// Challenge may be called multiple times in a single session. After\n// successful authentication, the server may send a challenge with no\n// questions, for which the user and instruction messages should be\n// printed.  RFC 4256 section 3.3 details how the UI should behave for\n// both CLI and GUI environments.\ntype KeyboardInteractiveChallenge func(user, instruction string, questions []string, echos []bool) (answers []string, err error)\n\n// KeyboardInteractive returns a AuthMethod using a prompt/response\n// sequence controlled by the server.\nfunc KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod {\n\treturn challenge\n}\n\nfunc (cb KeyboardInteractiveChallenge) method() string {\n\treturn \"keyboard-interactive\"\n}\n\nfunc (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) {\n\ttype initiateMsg struct {\n\t\tUser       string `sshtype:\"50\"`\n\t\tService    string\n\t\tMethod     string\n\t\tLanguage   string\n\t\tSubmethods string\n\t}\n\n\tif err := c.writePacket(Marshal(&initiateMsg{\n\t\tUser:    user,\n\t\tService: serviceSSH,\n\t\tMethod:  \"keyboard-interactive\",\n\t})); err != nil {\n\t\treturn false, nil, err\n\t}\n\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\t// like handleAuthResponse, but with less options.\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\t// TODO: Print banners during userauth.\n\t\t\tcontinue\n\t\tcase msgUserAuthInfoRequest:\n\t\t\t// OK\n\t\tcase msgUserAuthFailure:\n\t\t\tvar msg userAuthFailureMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn false, nil, err\n\t\t\t}\n\t\t\treturn false, msg.Methods, nil\n\t\tcase msgUserAuthSuccess:\n\t\t\treturn true, nil, nil\n\t\tdefault:\n\t\t\treturn false, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])\n\t\t}\n\n\t\tvar msg userAuthInfoRequestMsg\n\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\t// Manually unpack the prompt/echo pairs.\n\t\trest := msg.Prompts\n\t\tvar prompts []string\n\t\tvar echos []bool\n\t\tfor i := 0; i < int(msg.NumPrompts); i++ {\n\t\t\tprompt, r, ok := parseString(rest)\n\t\t\tif !ok || len(r) == 0 {\n\t\t\t\treturn false, nil, errors.New(\"ssh: prompt format error\")\n\t\t\t}\n\t\t\tprompts = append(prompts, string(prompt))\n\t\t\techos = append(echos, r[0] != 0)\n\t\t\trest = r[1:]\n\t\t}\n\n\t\tif len(rest) != 0 {\n\t\t\treturn false, nil, errors.New(\"ssh: extra data following keyboard-interactive pairs\")\n\t\t}\n\n\t\tanswers, err := cb(msg.User, msg.Instruction, prompts, echos)\n\t\tif err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\n\t\tif len(answers) != len(prompts) {\n\t\t\treturn false, nil, errors.New(\"ssh: not enough answers from keyboard-interactive callback\")\n\t\t}\n\t\tresponseLength := 1 + 4\n\t\tfor _, a := range answers {\n\t\t\tresponseLength += stringLength(len(a))\n\t\t}\n\t\tserialized := make([]byte, responseLength)\n\t\tp := serialized\n\t\tp[0] = msgUserAuthInfoResponse\n\t\tp = p[1:]\n\t\tp = marshalUint32(p, uint32(len(answers)))\n\t\tfor _, a := range answers {\n\t\t\tp = marshalString(p, []byte(a))\n\t\t}\n\n\t\tif err := c.writePacket(serialized); err != nil {\n\t\t\treturn false, nil, err\n\t\t}\n\t}\n}\n\ntype retryableAuthMethod struct {\n\tauthMethod AuthMethod\n\tmaxTries   int\n}\n\nfunc (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader) (ok bool, methods []string, err error) {\n\tfor i := 0; r.maxTries <= 0 || i < r.maxTries; i++ {\n\t\tok, methods, err = r.authMethod.auth(session, user, c, rand)\n\t\tif ok || err != nil { // either success or error terminate\n\t\t\treturn ok, methods, err\n\t\t}\n\t}\n\treturn ok, methods, err\n}\n\nfunc (r *retryableAuthMethod) method() string {\n\treturn r.authMethod.method()\n}\n\n// RetryableAuthMethod is a decorator for other auth methods enabling them to\n// be retried up to maxTries before considering that AuthMethod itself failed.\n// If maxTries is <= 0, will retry indefinitely\n//\n// This is useful for interactive clients using challenge/response type\n// authentication (e.g. Keyboard-Interactive, Password, etc) where the user\n// could mistype their response resulting in the server issuing a\n// SSH_MSG_USERAUTH_FAILURE (rfc4252 #8 [password] and rfc4256 #3.4\n// [keyboard-interactive]); Without this decorator, the non-retryable\n// AuthMethod would be removed from future consideration, and never tried again\n// (and so the user would never be able to retry their entry).\nfunc RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod {\n\treturn &retryableAuthMethod{authMethod: auth, maxTries: maxTries}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/common.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 ssh\n\nimport (\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sync\"\n\n\t_ \"crypto/sha1\"\n\t_ \"crypto/sha256\"\n\t_ \"crypto/sha512\"\n)\n\n// These are string constants in the SSH protocol.\nconst (\n\tcompressionNone = \"none\"\n\tserviceUserAuth = \"ssh-userauth\"\n\tserviceSSH      = \"ssh-connection\"\n)\n\n// supportedCiphers specifies the supported ciphers in preference order.\nvar supportedCiphers = []string{\n\t\"aes128-ctr\", \"aes192-ctr\", \"aes256-ctr\",\n\t\"aes128-gcm@openssh.com\",\n\t\"arcfour256\", \"arcfour128\",\n}\n\n// supportedKexAlgos specifies the supported key-exchange algorithms in\n// preference order.\nvar supportedKexAlgos = []string{\n\tkexAlgoCurve25519SHA256,\n\t// P384 and P521 are not constant-time yet, but since we don't\n\t// reuse ephemeral keys, using them for ECDH should be OK.\n\tkexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,\n\tkexAlgoDH14SHA1, kexAlgoDH1SHA1,\n}\n\n// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods\n// of authenticating servers) in preference order.\nvar supportedHostKeyAlgos = []string{\n\tCertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,\n\tCertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01,\n\n\tKeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,\n\tKeyAlgoRSA, KeyAlgoDSA,\n\n\tKeyAlgoED25519,\n}\n\n// supportedMACs specifies a default set of MAC algorithms in preference order.\n// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed\n// because they have reached the end of their useful life.\nvar supportedMACs = []string{\n\t\"hmac-sha2-256-etm@openssh.com\", \"hmac-sha2-256\", \"hmac-sha1\", \"hmac-sha1-96\",\n}\n\nvar supportedCompressions = []string{compressionNone}\n\n// hashFuncs keeps the mapping of supported algorithms to their respective\n// hashes needed for signature verification.\nvar hashFuncs = map[string]crypto.Hash{\n\tKeyAlgoRSA:          crypto.SHA1,\n\tKeyAlgoDSA:          crypto.SHA1,\n\tKeyAlgoECDSA256:     crypto.SHA256,\n\tKeyAlgoECDSA384:     crypto.SHA384,\n\tKeyAlgoECDSA521:     crypto.SHA512,\n\tCertAlgoRSAv01:      crypto.SHA1,\n\tCertAlgoDSAv01:      crypto.SHA1,\n\tCertAlgoECDSA256v01: crypto.SHA256,\n\tCertAlgoECDSA384v01: crypto.SHA384,\n\tCertAlgoECDSA521v01: crypto.SHA512,\n}\n\n// unexpectedMessageError results when the SSH message that we received didn't\n// match what we wanted.\nfunc unexpectedMessageError(expected, got uint8) error {\n\treturn fmt.Errorf(\"ssh: unexpected message type %d (expected %d)\", got, expected)\n}\n\n// parseError results from a malformed SSH message.\nfunc parseError(tag uint8) error {\n\treturn fmt.Errorf(\"ssh: parse error in message type %d\", tag)\n}\n\nfunc findCommon(what string, client []string, server []string) (common string, err error) {\n\tfor _, c := range client {\n\t\tfor _, s := range server {\n\t\t\tif c == s {\n\t\t\t\treturn c, nil\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\", fmt.Errorf(\"ssh: no common algorithm for %s; client offered: %v, server offered: %v\", what, client, server)\n}\n\ntype directionAlgorithms struct {\n\tCipher      string\n\tMAC         string\n\tCompression string\n}\n\n// rekeyBytes returns a rekeying intervals in bytes.\nfunc (a *directionAlgorithms) rekeyBytes() int64 {\n\t// According to RFC4344 block ciphers should rekey after\n\t// 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is\n\t// 128.\n\tswitch a.Cipher {\n\tcase \"aes128-ctr\", \"aes192-ctr\", \"aes256-ctr\", gcmCipherID, aes128cbcID:\n\t\treturn 16 * (1 << 32)\n\n\t}\n\n\t// For others, stick with RFC4253 recommendation to rekey after 1 Gb of data.\n\treturn 1 << 30\n}\n\ntype algorithms struct {\n\tkex     string\n\thostKey string\n\tw       directionAlgorithms\n\tr       directionAlgorithms\n}\n\nfunc findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) {\n\tresult := &algorithms{}\n\n\tresult.kex, err = findCommon(\"key exchange\", clientKexInit.KexAlgos, serverKexInit.KexAlgos)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.hostKey, err = findCommon(\"host key\", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.w.Cipher, err = findCommon(\"client to server cipher\", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.r.Cipher, err = findCommon(\"server to client cipher\", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.w.MAC, err = findCommon(\"client to server MAC\", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.r.MAC, err = findCommon(\"server to client MAC\", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.w.Compression, err = findCommon(\"client to server compression\", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.r.Compression, err = findCommon(\"server to client compression\", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn result, nil\n}\n\n// If rekeythreshold is too small, we can't make any progress sending\n// stuff.\nconst minRekeyThreshold uint64 = 256\n\n// Config contains configuration data common to both ServerConfig and\n// ClientConfig.\ntype Config struct {\n\t// Rand provides the source of entropy for cryptographic\n\t// primitives. If Rand is nil, the cryptographic random reader\n\t// in package crypto/rand will be used.\n\tRand io.Reader\n\n\t// The maximum number of bytes sent or received after which a\n\t// new key is negotiated. It must be at least 256. If\n\t// unspecified, a size suitable for the chosen cipher is used.\n\tRekeyThreshold uint64\n\n\t// The allowed key exchanges algorithms. If unspecified then a\n\t// default set of algorithms is used.\n\tKeyExchanges []string\n\n\t// The allowed cipher algorithms. If unspecified then a sensible\n\t// default is used.\n\tCiphers []string\n\n\t// The allowed MAC algorithms. If unspecified then a sensible default\n\t// is used.\n\tMACs []string\n}\n\n// SetDefaults sets sensible values for unset fields in config. This is\n// exported for testing: Configs passed to SSH functions are copied and have\n// default values set automatically.\nfunc (c *Config) SetDefaults() {\n\tif c.Rand == nil {\n\t\tc.Rand = rand.Reader\n\t}\n\tif c.Ciphers == nil {\n\t\tc.Ciphers = supportedCiphers\n\t}\n\tvar ciphers []string\n\tfor _, c := range c.Ciphers {\n\t\tif cipherModes[c] != nil {\n\t\t\t// reject the cipher if we have no cipherModes definition\n\t\t\tciphers = append(ciphers, c)\n\t\t}\n\t}\n\tc.Ciphers = ciphers\n\n\tif c.KeyExchanges == nil {\n\t\tc.KeyExchanges = supportedKexAlgos\n\t}\n\n\tif c.MACs == nil {\n\t\tc.MACs = supportedMACs\n\t}\n\n\tif c.RekeyThreshold == 0 {\n\t\t// cipher specific default\n\t} else if c.RekeyThreshold < minRekeyThreshold {\n\t\tc.RekeyThreshold = minRekeyThreshold\n\t} else if c.RekeyThreshold >= math.MaxInt64 {\n\t\t// Avoid weirdness if somebody uses -1 as a threshold.\n\t\tc.RekeyThreshold = math.MaxInt64\n\t}\n}\n\n// buildDataSignedForAuth returns the data that is signed in order to prove\n// possession of a private key. See RFC 4252, section 7.\nfunc buildDataSignedForAuth(sessionId []byte, req userAuthRequestMsg, algo, pubKey []byte) []byte {\n\tdata := struct {\n\t\tSession []byte\n\t\tType    byte\n\t\tUser    string\n\t\tService string\n\t\tMethod  string\n\t\tSign    bool\n\t\tAlgo    []byte\n\t\tPubKey  []byte\n\t}{\n\t\tsessionId,\n\t\tmsgUserAuthRequest,\n\t\treq.User,\n\t\treq.Service,\n\t\treq.Method,\n\t\ttrue,\n\t\talgo,\n\t\tpubKey,\n\t}\n\treturn Marshal(data)\n}\n\nfunc appendU16(buf []byte, n uint16) []byte {\n\treturn append(buf, byte(n>>8), byte(n))\n}\n\nfunc appendU32(buf []byte, n uint32) []byte {\n\treturn append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n))\n}\n\nfunc appendU64(buf []byte, n uint64) []byte {\n\treturn append(buf,\n\t\tbyte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32),\n\t\tbyte(n>>24), byte(n>>16), byte(n>>8), byte(n))\n}\n\nfunc appendInt(buf []byte, n int) []byte {\n\treturn appendU32(buf, uint32(n))\n}\n\nfunc appendString(buf []byte, s string) []byte {\n\tbuf = appendU32(buf, uint32(len(s)))\n\tbuf = append(buf, s...)\n\treturn buf\n}\n\nfunc appendBool(buf []byte, b bool) []byte {\n\tif b {\n\t\treturn append(buf, 1)\n\t}\n\treturn append(buf, 0)\n}\n\n// newCond is a helper to hide the fact that there is no usable zero\n// value for sync.Cond.\nfunc newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) }\n\n// window represents the buffer available to clients\n// wishing to write to a channel.\ntype window struct {\n\t*sync.Cond\n\twin          uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1\n\twriteWaiters int\n\tclosed       bool\n}\n\n// add adds win to the amount of window available\n// for consumers.\nfunc (w *window) add(win uint32) bool {\n\t// a zero sized window adjust is a noop.\n\tif win == 0 {\n\t\treturn true\n\t}\n\tw.L.Lock()\n\tif w.win+win < win {\n\t\tw.L.Unlock()\n\t\treturn false\n\t}\n\tw.win += win\n\t// It is unusual that multiple goroutines would be attempting to reserve\n\t// window space, but not guaranteed. Use broadcast to notify all waiters\n\t// that additional window is available.\n\tw.Broadcast()\n\tw.L.Unlock()\n\treturn true\n}\n\n// close sets the window to closed, so all reservations fail\n// immediately.\nfunc (w *window) close() {\n\tw.L.Lock()\n\tw.closed = true\n\tw.Broadcast()\n\tw.L.Unlock()\n}\n\n// reserve reserves win from the available window capacity.\n// If no capacity remains, reserve will block. reserve may\n// return less than requested.\nfunc (w *window) reserve(win uint32) (uint32, error) {\n\tvar err error\n\tw.L.Lock()\n\tw.writeWaiters++\n\tw.Broadcast()\n\tfor w.win == 0 && !w.closed {\n\t\tw.Wait()\n\t}\n\tw.writeWaiters--\n\tif w.win < win {\n\t\twin = w.win\n\t}\n\tw.win -= win\n\tif w.closed {\n\t\terr = io.EOF\n\t}\n\tw.L.Unlock()\n\treturn win, err\n}\n\n// waitWriterBlocked waits until some goroutine is blocked for further\n// writes. It is used in tests only.\nfunc (w *window) waitWriterBlocked() {\n\tw.Cond.L.Lock()\n\tfor w.writeWaiters == 0 {\n\t\tw.Cond.Wait()\n\t}\n\tw.Cond.L.Unlock()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/connection.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 ssh\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\n// OpenChannelError is returned if the other side rejects an\n// OpenChannel request.\ntype OpenChannelError struct {\n\tReason  RejectionReason\n\tMessage string\n}\n\nfunc (e *OpenChannelError) Error() string {\n\treturn fmt.Sprintf(\"ssh: rejected: %s (%s)\", e.Reason, e.Message)\n}\n\n// ConnMetadata holds metadata for the connection.\ntype ConnMetadata interface {\n\t// User returns the user ID for this connection.\n\tUser() string\n\n\t// SessionID returns the sesson hash, also denoted by H.\n\tSessionID() []byte\n\n\t// ClientVersion returns the client's version string as hashed\n\t// into the session ID.\n\tClientVersion() []byte\n\n\t// ServerVersion returns the server's version string as hashed\n\t// into the session ID.\n\tServerVersion() []byte\n\n\t// RemoteAddr returns the remote address for this connection.\n\tRemoteAddr() net.Addr\n\n\t// LocalAddr returns the local address for this connection.\n\tLocalAddr() net.Addr\n}\n\n// Conn represents an SSH connection for both server and client roles.\n// Conn is the basis for implementing an application layer, such\n// as ClientConn, which implements the traditional shell access for\n// clients.\ntype Conn interface {\n\tConnMetadata\n\n\t// SendRequest sends a global request, and returns the\n\t// reply. If wantReply is true, it returns the response status\n\t// and payload. See also RFC4254, section 4.\n\tSendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error)\n\n\t// OpenChannel tries to open an channel. If the request is\n\t// rejected, it returns *OpenChannelError. On success it returns\n\t// the SSH Channel and a Go channel for incoming, out-of-band\n\t// requests. The Go channel must be serviced, or the\n\t// connection will hang.\n\tOpenChannel(name string, data []byte) (Channel, <-chan *Request, error)\n\n\t// Close closes the underlying network connection\n\tClose() error\n\n\t// Wait blocks until the connection has shut down, and returns the\n\t// error causing the shutdown.\n\tWait() error\n\n\t// TODO(hanwen): consider exposing:\n\t//   RequestKeyChange\n\t//   Disconnect\n}\n\n// DiscardRequests consumes and rejects all requests from the\n// passed-in channel.\nfunc DiscardRequests(in <-chan *Request) {\n\tfor req := range in {\n\t\tif req.WantReply {\n\t\t\treq.Reply(false, nil)\n\t\t}\n\t}\n}\n\n// A connection represents an incoming connection.\ntype connection struct {\n\ttransport *handshakeTransport\n\tsshConn\n\n\t// The connection protocol.\n\t*mux\n}\n\nfunc (c *connection) Close() error {\n\treturn c.sshConn.conn.Close()\n}\n\n// sshconn provides net.Conn metadata, but disallows direct reads and\n// writes.\ntype sshConn struct {\n\tconn net.Conn\n\n\tuser          string\n\tsessionID     []byte\n\tclientVersion []byte\n\tserverVersion []byte\n}\n\nfunc dup(src []byte) []byte {\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\treturn dst\n}\n\nfunc (c *sshConn) User() string {\n\treturn c.user\n}\n\nfunc (c *sshConn) RemoteAddr() net.Addr {\n\treturn c.conn.RemoteAddr()\n}\n\nfunc (c *sshConn) Close() error {\n\treturn c.conn.Close()\n}\n\nfunc (c *sshConn) LocalAddr() net.Addr {\n\treturn c.conn.LocalAddr()\n}\n\nfunc (c *sshConn) SessionID() []byte {\n\treturn dup(c.sessionID)\n}\n\nfunc (c *sshConn) ClientVersion() []byte {\n\treturn dup(c.clientVersion)\n}\n\nfunc (c *sshConn) ServerVersion() []byte {\n\treturn dup(c.serverVersion)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/doc.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/*\nPackage ssh implements an SSH client and server.\n\nSSH is a transport security protocol, an authentication protocol and a\nfamily of application protocols. The most typical application level\nprotocol is a remote shell and this is specifically implemented.  However,\nthe multiplexed nature of SSH is exposed to users that wish to support\nothers.\n\nReferences:\n  [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD\n  [SSH-PARAMETERS]:    http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1\n\nThis package does not fall under the stability promise of the Go language itself,\nso its API may be changed when pressing needs arise.\n*/\npackage ssh // import \"golang.org/x/crypto/ssh\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/handshake.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 ssh\n\nimport (\n\t\"crypto/rand\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"sync\"\n)\n\n// debugHandshake, if set, prints messages sent and received.  Key\n// exchange messages are printed as if DH were used, so the debug\n// messages are wrong when using ECDH.\nconst debugHandshake = false\n\n// chanSize sets the amount of buffering SSH connections. This is\n// primarily for testing: setting chanSize=0 uncovers deadlocks more\n// quickly.\nconst chanSize = 16\n\n// keyingTransport is a packet based transport that supports key\n// changes. It need not be thread-safe. It should pass through\n// msgNewKeys in both directions.\ntype keyingTransport interface {\n\tpacketConn\n\n\t// prepareKeyChange sets up a key change. The key change for a\n\t// direction will be effected if a msgNewKeys message is sent\n\t// or received.\n\tprepareKeyChange(*algorithms, *kexResult) error\n}\n\n// handshakeTransport implements rekeying on top of a keyingTransport\n// and offers a thread-safe writePacket() interface.\ntype handshakeTransport struct {\n\tconn   keyingTransport\n\tconfig *Config\n\n\tserverVersion []byte\n\tclientVersion []byte\n\n\t// hostKeys is non-empty if we are the server. In that case,\n\t// it contains all host keys that can be used to sign the\n\t// connection.\n\thostKeys []Signer\n\n\t// hostKeyAlgorithms is non-empty if we are the client. In that case,\n\t// we accept these key types from the server as host key.\n\thostKeyAlgorithms []string\n\n\t// On read error, incoming is closed, and readError is set.\n\tincoming  chan []byte\n\treadError error\n\n\tmu             sync.Mutex\n\twriteError     error\n\tsentInitPacket []byte\n\tsentInitMsg    *kexInitMsg\n\tpendingPackets [][]byte // Used when a key exchange is in progress.\n\n\t// If the read loop wants to schedule a kex, it pings this\n\t// channel, and the write loop will send out a kex\n\t// message.\n\trequestKex chan struct{}\n\n\t// If the other side requests or confirms a kex, its kexInit\n\t// packet is sent here for the write loop to find it.\n\tstartKex chan *pendingKex\n\n\t// data for host key checking\n\thostKeyCallback HostKeyCallback\n\tdialAddress     string\n\tremoteAddr      net.Addr\n\n\t// Algorithms agreed in the last key exchange.\n\talgorithms *algorithms\n\n\treadPacketsLeft uint32\n\treadBytesLeft   int64\n\n\twritePacketsLeft uint32\n\twriteBytesLeft   int64\n\n\t// The session ID or nil if first kex did not complete yet.\n\tsessionID []byte\n}\n\ntype pendingKex struct {\n\totherInit []byte\n\tdone      chan error\n}\n\nfunc newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport {\n\tt := &handshakeTransport{\n\t\tconn:          conn,\n\t\tserverVersion: serverVersion,\n\t\tclientVersion: clientVersion,\n\t\tincoming:      make(chan []byte, chanSize),\n\t\trequestKex:    make(chan struct{}, 1),\n\t\tstartKex:      make(chan *pendingKex, 1),\n\n\t\tconfig: config,\n\t}\n\tt.resetReadThresholds()\n\tt.resetWriteThresholds()\n\n\t// We always start with a mandatory key exchange.\n\tt.requestKex <- struct{}{}\n\treturn t\n}\n\nfunc newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport {\n\tt := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)\n\tt.dialAddress = dialAddr\n\tt.remoteAddr = addr\n\tt.hostKeyCallback = config.HostKeyCallback\n\tif config.HostKeyAlgorithms != nil {\n\t\tt.hostKeyAlgorithms = config.HostKeyAlgorithms\n\t} else {\n\t\tt.hostKeyAlgorithms = supportedHostKeyAlgos\n\t}\n\tgo t.readLoop()\n\tgo t.kexLoop()\n\treturn t\n}\n\nfunc newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport {\n\tt := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)\n\tt.hostKeys = config.hostKeys\n\tgo t.readLoop()\n\tgo t.kexLoop()\n\treturn t\n}\n\nfunc (t *handshakeTransport) getSessionID() []byte {\n\treturn t.sessionID\n}\n\n// waitSession waits for the session to be established. This should be\n// the first thing to call after instantiating handshakeTransport.\nfunc (t *handshakeTransport) waitSession() error {\n\tp, err := t.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif p[0] != msgNewKeys {\n\t\treturn fmt.Errorf(\"ssh: first packet should be msgNewKeys\")\n\t}\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) id() string {\n\tif len(t.hostKeys) > 0 {\n\t\treturn \"server\"\n\t}\n\treturn \"client\"\n}\n\nfunc (t *handshakeTransport) printPacket(p []byte, write bool) {\n\taction := \"got\"\n\tif write {\n\t\taction = \"sent\"\n\t}\n\n\tif p[0] == msgChannelData || p[0] == msgChannelExtendedData {\n\t\tlog.Printf(\"%s %s data (packet %d bytes)\", t.id(), action, len(p))\n\t} else {\n\t\tmsg, err := decode(p)\n\t\tlog.Printf(\"%s %s %T %v (%v)\", t.id(), action, msg, msg, err)\n\t}\n}\n\nfunc (t *handshakeTransport) readPacket() ([]byte, error) {\n\tp, ok := <-t.incoming\n\tif !ok {\n\t\treturn nil, t.readError\n\t}\n\treturn p, nil\n}\n\nfunc (t *handshakeTransport) readLoop() {\n\tfirst := true\n\tfor {\n\t\tp, err := t.readOnePacket(first)\n\t\tfirst = false\n\t\tif err != nil {\n\t\t\tt.readError = err\n\t\t\tclose(t.incoming)\n\t\t\tbreak\n\t\t}\n\t\tif p[0] == msgIgnore || p[0] == msgDebug {\n\t\t\tcontinue\n\t\t}\n\t\tt.incoming <- p\n\t}\n\n\t// Stop writers too.\n\tt.recordWriteError(t.readError)\n\n\t// Unblock the writer should it wait for this.\n\tclose(t.startKex)\n\n\t// Don't close t.requestKex; it's also written to from writePacket.\n}\n\nfunc (t *handshakeTransport) pushPacket(p []byte) error {\n\tif debugHandshake {\n\t\tt.printPacket(p, true)\n\t}\n\treturn t.conn.writePacket(p)\n}\n\nfunc (t *handshakeTransport) getWriteError() error {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\treturn t.writeError\n}\n\nfunc (t *handshakeTransport) recordWriteError(err error) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.writeError == nil && err != nil {\n\t\tt.writeError = err\n\t}\n}\n\nfunc (t *handshakeTransport) requestKeyExchange() {\n\tselect {\n\tcase t.requestKex <- struct{}{}:\n\tdefault:\n\t\t// something already requested a kex, so do nothing.\n\t}\n}\n\nfunc (t *handshakeTransport) resetWriteThresholds() {\n\tt.writePacketsLeft = packetRekeyThreshold\n\tif t.config.RekeyThreshold > 0 {\n\t\tt.writeBytesLeft = int64(t.config.RekeyThreshold)\n\t} else if t.algorithms != nil {\n\t\tt.writeBytesLeft = t.algorithms.w.rekeyBytes()\n\t} else {\n\t\tt.writeBytesLeft = 1 << 30\n\t}\n}\n\nfunc (t *handshakeTransport) kexLoop() {\n\nwrite:\n\tfor t.getWriteError() == nil {\n\t\tvar request *pendingKex\n\t\tvar sent bool\n\n\t\tfor request == nil || !sent {\n\t\t\tvar ok bool\n\t\t\tselect {\n\t\t\tcase request, ok = <-t.startKex:\n\t\t\t\tif !ok {\n\t\t\t\t\tbreak write\n\t\t\t\t}\n\t\t\tcase <-t.requestKex:\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif !sent {\n\t\t\t\tif err := t.sendKexInit(); err != nil {\n\t\t\t\t\tt.recordWriteError(err)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tsent = true\n\t\t\t}\n\t\t}\n\n\t\tif err := t.getWriteError(); err != nil {\n\t\t\tif request != nil {\n\t\t\t\trequest.done <- err\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\t// We're not servicing t.requestKex, but that is OK:\n\t\t// we never block on sending to t.requestKex.\n\n\t\t// We're not servicing t.startKex, but the remote end\n\t\t// has just sent us a kexInitMsg, so it can't send\n\t\t// another key change request, until we close the done\n\t\t// channel on the pendingKex request.\n\n\t\terr := t.enterKeyExchange(request.otherInit)\n\n\t\tt.mu.Lock()\n\t\tt.writeError = err\n\t\tt.sentInitPacket = nil\n\t\tt.sentInitMsg = nil\n\n\t\tt.resetWriteThresholds()\n\n\t\t// we have completed the key exchange. Since the\n\t\t// reader is still blocked, it is safe to clear out\n\t\t// the requestKex channel. This avoids the situation\n\t\t// where: 1) we consumed our own request for the\n\t\t// initial kex, and 2) the kex from the remote side\n\t\t// caused another send on the requestKex channel,\n\tclear:\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-t.requestKex:\n\t\t\t\t//\n\t\t\tdefault:\n\t\t\t\tbreak clear\n\t\t\t}\n\t\t}\n\n\t\trequest.done <- t.writeError\n\n\t\t// kex finished. Push packets that we received while\n\t\t// the kex was in progress. Don't look at t.startKex\n\t\t// and don't increment writtenSinceKex: if we trigger\n\t\t// another kex while we are still busy with the last\n\t\t// one, things will become very confusing.\n\t\tfor _, p := range t.pendingPackets {\n\t\t\tt.writeError = t.pushPacket(p)\n\t\t\tif t.writeError != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tt.pendingPackets = t.pendingPackets[:0]\n\t\tt.mu.Unlock()\n\t}\n\n\t// drain startKex channel. We don't service t.requestKex\n\t// because nobody does blocking sends there.\n\tgo func() {\n\t\tfor init := range t.startKex {\n\t\t\tinit.done <- t.writeError\n\t\t}\n\t}()\n\n\t// Unblock reader.\n\tt.conn.Close()\n}\n\n// The protocol uses uint32 for packet counters, so we can't let them\n// reach 1<<32.  We will actually read and write more packets than\n// this, though: the other side may send more packets, and after we\n// hit this limit on writing we will send a few more packets for the\n// key exchange itself.\nconst packetRekeyThreshold = (1 << 31)\n\nfunc (t *handshakeTransport) resetReadThresholds() {\n\tt.readPacketsLeft = packetRekeyThreshold\n\tif t.config.RekeyThreshold > 0 {\n\t\tt.readBytesLeft = int64(t.config.RekeyThreshold)\n\t} else if t.algorithms != nil {\n\t\tt.readBytesLeft = t.algorithms.r.rekeyBytes()\n\t} else {\n\t\tt.readBytesLeft = 1 << 30\n\t}\n}\n\nfunc (t *handshakeTransport) readOnePacket(first bool) ([]byte, error) {\n\tp, err := t.conn.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif t.readPacketsLeft > 0 {\n\t\tt.readPacketsLeft--\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif t.readBytesLeft > 0 {\n\t\tt.readBytesLeft -= int64(len(p))\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif debugHandshake {\n\t\tt.printPacket(p, false)\n\t}\n\n\tif first && p[0] != msgKexInit {\n\t\treturn nil, fmt.Errorf(\"ssh: first packet should be msgKexInit\")\n\t}\n\n\tif p[0] != msgKexInit {\n\t\treturn p, nil\n\t}\n\n\tfirstKex := t.sessionID == nil\n\n\tkex := pendingKex{\n\t\tdone:      make(chan error, 1),\n\t\totherInit: p,\n\t}\n\tt.startKex <- &kex\n\terr = <-kex.done\n\n\tif debugHandshake {\n\t\tlog.Printf(\"%s exited key exchange (first %v), err %v\", t.id(), firstKex, err)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt.resetReadThresholds()\n\n\t// By default, a key exchange is hidden from higher layers by\n\t// translating it into msgIgnore.\n\tsuccessPacket := []byte{msgIgnore}\n\tif firstKex {\n\t\t// sendKexInit() for the first kex waits for\n\t\t// msgNewKeys so the authentication process is\n\t\t// guaranteed to happen over an encrypted transport.\n\t\tsuccessPacket = []byte{msgNewKeys}\n\t}\n\n\treturn successPacket, nil\n}\n\n// sendKexInit sends a key change message.\nfunc (t *handshakeTransport) sendKexInit() error {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.sentInitMsg != nil {\n\t\t// kexInits may be sent either in response to the other side,\n\t\t// or because our side wants to initiate a key change, so we\n\t\t// may have already sent a kexInit. In that case, don't send a\n\t\t// second kexInit.\n\t\treturn nil\n\t}\n\n\tmsg := &kexInitMsg{\n\t\tKexAlgos:                t.config.KeyExchanges,\n\t\tCiphersClientServer:     t.config.Ciphers,\n\t\tCiphersServerClient:     t.config.Ciphers,\n\t\tMACsClientServer:        t.config.MACs,\n\t\tMACsServerClient:        t.config.MACs,\n\t\tCompressionClientServer: supportedCompressions,\n\t\tCompressionServerClient: supportedCompressions,\n\t}\n\tio.ReadFull(rand.Reader, msg.Cookie[:])\n\n\tif len(t.hostKeys) > 0 {\n\t\tfor _, k := range t.hostKeys {\n\t\t\tmsg.ServerHostKeyAlgos = append(\n\t\t\t\tmsg.ServerHostKeyAlgos, k.PublicKey().Type())\n\t\t}\n\t} else {\n\t\tmsg.ServerHostKeyAlgos = t.hostKeyAlgorithms\n\t}\n\tpacket := Marshal(msg)\n\n\t// writePacket destroys the contents, so save a copy.\n\tpacketCopy := make([]byte, len(packet))\n\tcopy(packetCopy, packet)\n\n\tif err := t.pushPacket(packetCopy); err != nil {\n\t\treturn err\n\t}\n\n\tt.sentInitMsg = msg\n\tt.sentInitPacket = packet\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) writePacket(p []byte) error {\n\tswitch p[0] {\n\tcase msgKexInit:\n\t\treturn errors.New(\"ssh: only handshakeTransport can send kexInit\")\n\tcase msgNewKeys:\n\t\treturn errors.New(\"ssh: only handshakeTransport can send newKeys\")\n\t}\n\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.writeError != nil {\n\t\treturn t.writeError\n\t}\n\n\tif t.sentInitMsg != nil {\n\t\t// Copy the packet so the writer can reuse the buffer.\n\t\tcp := make([]byte, len(p))\n\t\tcopy(cp, p)\n\t\tt.pendingPackets = append(t.pendingPackets, cp)\n\t\treturn nil\n\t}\n\n\tif t.writeBytesLeft > 0 {\n\t\tt.writeBytesLeft -= int64(len(p))\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif t.writePacketsLeft > 0 {\n\t\tt.writePacketsLeft--\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif err := t.pushPacket(p); err != nil {\n\t\tt.writeError = err\n\t}\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) Close() error {\n\treturn t.conn.Close()\n}\n\nfunc (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {\n\tif debugHandshake {\n\t\tlog.Printf(\"%s entered key exchange\", t.id())\n\t}\n\n\totherInit := &kexInitMsg{}\n\tif err := Unmarshal(otherInitPacket, otherInit); err != nil {\n\t\treturn err\n\t}\n\n\tmagics := handshakeMagics{\n\t\tclientVersion: t.clientVersion,\n\t\tserverVersion: t.serverVersion,\n\t\tclientKexInit: otherInitPacket,\n\t\tserverKexInit: t.sentInitPacket,\n\t}\n\n\tclientInit := otherInit\n\tserverInit := t.sentInitMsg\n\tif len(t.hostKeys) == 0 {\n\t\tclientInit, serverInit = serverInit, clientInit\n\n\t\tmagics.clientKexInit = t.sentInitPacket\n\t\tmagics.serverKexInit = otherInitPacket\n\t}\n\n\tvar err error\n\tt.algorithms, err = findAgreedAlgorithms(clientInit, serverInit)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// We don't send FirstKexFollows, but we handle receiving it.\n\t//\n\t// RFC 4253 section 7 defines the kex and the agreement method for\n\t// first_kex_packet_follows. It states that the guessed packet\n\t// should be ignored if the \"kex algorithm and/or the host\n\t// key algorithm is guessed wrong (server and client have\n\t// different preferred algorithm), or if any of the other\n\t// algorithms cannot be agreed upon\". The other algorithms have\n\t// already been checked above so the kex algorithm and host key\n\t// algorithm are checked here.\n\tif otherInit.FirstKexFollows && (clientInit.KexAlgos[0] != serverInit.KexAlgos[0] || clientInit.ServerHostKeyAlgos[0] != serverInit.ServerHostKeyAlgos[0]) {\n\t\t// other side sent a kex message for the wrong algorithm,\n\t\t// which we have to ignore.\n\t\tif _, err := t.conn.readPacket(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tkex, ok := kexAlgoMap[t.algorithms.kex]\n\tif !ok {\n\t\treturn fmt.Errorf(\"ssh: unexpected key exchange algorithm %v\", t.algorithms.kex)\n\t}\n\n\tvar result *kexResult\n\tif len(t.hostKeys) > 0 {\n\t\tresult, err = t.server(kex, t.algorithms, &magics)\n\t} else {\n\t\tresult, err = t.client(kex, t.algorithms, &magics)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif t.sessionID == nil {\n\t\tt.sessionID = result.H\n\t}\n\tresult.SessionID = t.sessionID\n\n\tif err := t.conn.prepareKeyChange(t.algorithms, result); err != nil {\n\t\treturn err\n\t}\n\tif err = t.conn.writePacket([]byte{msgNewKeys}); err != nil {\n\t\treturn err\n\t}\n\tif packet, err := t.conn.readPacket(); err != nil {\n\t\treturn err\n\t} else if packet[0] != msgNewKeys {\n\t\treturn unexpectedMessageError(msgNewKeys, packet[0])\n\t}\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) {\n\tvar hostKey Signer\n\tfor _, k := range t.hostKeys {\n\t\tif algs.hostKey == k.PublicKey().Type() {\n\t\t\thostKey = k\n\t\t}\n\t}\n\n\tr, err := kex.Server(t.conn, t.config.Rand, magics, hostKey)\n\treturn r, err\n}\n\nfunc (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) {\n\tresult, err := kex.Client(t.conn, t.config.Rand, magics)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKey, err := ParsePublicKey(result.HostKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := verifyHostKeySignature(hostKey, result); err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/kex.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 ssh\n\nimport (\n\t\"crypto\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t\"crypto/subtle\"\n\t\"errors\"\n\t\"io\"\n\t\"math/big\"\n\n\t\"golang.org/x/crypto/curve25519\"\n)\n\nconst (\n\tkexAlgoDH1SHA1          = \"diffie-hellman-group1-sha1\"\n\tkexAlgoDH14SHA1         = \"diffie-hellman-group14-sha1\"\n\tkexAlgoECDH256          = \"ecdh-sha2-nistp256\"\n\tkexAlgoECDH384          = \"ecdh-sha2-nistp384\"\n\tkexAlgoECDH521          = \"ecdh-sha2-nistp521\"\n\tkexAlgoCurve25519SHA256 = \"curve25519-sha256@libssh.org\"\n)\n\n// kexResult captures the outcome of a key exchange.\ntype kexResult struct {\n\t// Session hash. See also RFC 4253, section 8.\n\tH []byte\n\n\t// Shared secret. See also RFC 4253, section 8.\n\tK []byte\n\n\t// Host key as hashed into H.\n\tHostKey []byte\n\n\t// Signature of H.\n\tSignature []byte\n\n\t// A cryptographic hash function that matches the security\n\t// level of the key exchange algorithm. It is used for\n\t// calculating H, and for deriving keys from H and K.\n\tHash crypto.Hash\n\n\t// The session ID, which is the first H computed. This is used\n\t// to derive key material inside the transport.\n\tSessionID []byte\n}\n\n// handshakeMagics contains data that is always included in the\n// session hash.\ntype handshakeMagics struct {\n\tclientVersion, serverVersion []byte\n\tclientKexInit, serverKexInit []byte\n}\n\nfunc (m *handshakeMagics) write(w io.Writer) {\n\twriteString(w, m.clientVersion)\n\twriteString(w, m.serverVersion)\n\twriteString(w, m.clientKexInit)\n\twriteString(w, m.serverKexInit)\n}\n\n// kexAlgorithm abstracts different key exchange algorithms.\ntype kexAlgorithm interface {\n\t// Server runs server-side key agreement, signing the result\n\t// with a hostkey.\n\tServer(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) (*kexResult, error)\n\n\t// Client runs the client-side key agreement. Caller is\n\t// responsible for verifying the host key signature.\n\tClient(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error)\n}\n\n// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement.\ntype dhGroup struct {\n\tg, p, pMinus1 *big.Int\n}\n\nfunc (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) {\n\tif theirPublic.Cmp(bigOne) <= 0 || theirPublic.Cmp(group.pMinus1) >= 0 {\n\t\treturn nil, errors.New(\"ssh: DH parameter out of bounds\")\n\t}\n\treturn new(big.Int).Exp(theirPublic, myPrivate, group.p), nil\n}\n\nfunc (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\thashFunc := crypto.SHA1\n\n\tvar x *big.Int\n\tfor {\n\t\tvar err error\n\t\tif x, err = rand.Int(randSource, group.pMinus1); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif x.Sign() > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tX := new(big.Int).Exp(group.g, x, group.p)\n\tkexDHInit := kexDHInitMsg{\n\t\tX: X,\n\t}\n\tif err := c.writePacket(Marshal(&kexDHInit)); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kexDHReply kexDHReplyMsg\n\tif err = Unmarshal(packet, &kexDHReply); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkInt, err := group.diffieHellman(kexDHReply.Y, x)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\th := hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, kexDHReply.HostKey)\n\twriteInt(h, X)\n\twriteInt(h, kexDHReply.Y)\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   kexDHReply.HostKey,\n\t\tSignature: kexDHReply.Signature,\n\t\tHash:      crypto.SHA1,\n\t}, nil\n}\n\nfunc (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {\n\thashFunc := crypto.SHA1\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexDHInit kexDHInitMsg\n\tif err = Unmarshal(packet, &kexDHInit); err != nil {\n\t\treturn\n\t}\n\n\tvar y *big.Int\n\tfor {\n\t\tif y, err = rand.Int(randSource, group.pMinus1); err != nil {\n\t\t\treturn\n\t\t}\n\t\tif y.Sign() > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tY := new(big.Int).Exp(group.g, y, group.p)\n\tkInt, err := group.diffieHellman(kexDHInit.X, y)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\th := hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteInt(h, kexDHInit.X)\n\twriteInt(h, Y)\n\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\t// H is already a hash, but the hostkey signing will apply its\n\t// own key-specific hash algorithm.\n\tsig, err := signAndMarshal(priv, randSource, H)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkexDHReply := kexDHReplyMsg{\n\t\tHostKey:   hostKeyBytes,\n\t\tY:         Y,\n\t\tSignature: sig,\n\t}\n\tpacket = Marshal(&kexDHReply)\n\n\terr = c.writePacket(packet)\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   hostKeyBytes,\n\t\tSignature: sig,\n\t\tHash:      crypto.SHA1,\n\t}, nil\n}\n\n// ecdh performs Elliptic Curve Diffie-Hellman key exchange as\n// described in RFC 5656, section 4.\ntype ecdh struct {\n\tcurve elliptic.Curve\n}\n\nfunc (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\tephKey, err := ecdsa.GenerateKey(kex.curve, rand)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkexInit := kexECDHInitMsg{\n\t\tClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y),\n\t}\n\n\tserialized := Marshal(&kexInit)\n\tif err := c.writePacket(serialized); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar reply kexECDHReplyMsg\n\tif err = Unmarshal(packet, &reply); err != nil {\n\t\treturn nil, err\n\t}\n\n\tx, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// generate shared secret\n\tsecret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes())\n\n\th := ecHash(kex.curve).New()\n\tmagics.write(h)\n\twriteString(h, reply.HostKey)\n\twriteString(h, kexInit.ClientPubKey)\n\twriteString(h, reply.EphemeralPubKey)\n\tK := make([]byte, intLength(secret))\n\tmarshalInt(K, secret)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: reply.Signature,\n\t\tHash:      ecHash(kex.curve),\n\t}, nil\n}\n\n// unmarshalECKey parses and checks an EC key.\nfunc unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) {\n\tx, y = elliptic.Unmarshal(curve, pubkey)\n\tif x == nil {\n\t\treturn nil, nil, errors.New(\"ssh: elliptic.Unmarshal failure\")\n\t}\n\tif !validateECPublicKey(curve, x, y) {\n\t\treturn nil, nil, errors.New(\"ssh: public key not on curve\")\n\t}\n\treturn x, y, nil\n}\n\n// validateECPublicKey checks that the point is a valid public key for\n// the given curve. See [SEC1], 3.2.2\nfunc validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool {\n\tif x.Sign() == 0 && y.Sign() == 0 {\n\t\treturn false\n\t}\n\n\tif x.Cmp(curve.Params().P) >= 0 {\n\t\treturn false\n\t}\n\n\tif y.Cmp(curve.Params().P) >= 0 {\n\t\treturn false\n\t}\n\n\tif !curve.IsOnCurve(x, y) {\n\t\treturn false\n\t}\n\n\t// We don't check if N * PubKey == 0, since\n\t//\n\t// - the NIST curves have cofactor = 1, so this is implicit.\n\t// (We don't foresee an implementation that supports non NIST\n\t// curves)\n\t//\n\t// - for ephemeral keys, we don't need to worry about small\n\t// subgroup attacks.\n\treturn true\n}\n\nfunc (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kexECDHInit kexECDHInitMsg\n\tif err = Unmarshal(packet, &kexECDHInit); err != nil {\n\t\treturn nil, err\n\t}\n\n\tclientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We could cache this key across multiple users/multiple\n\t// connection attempts, but the benefit is small. OpenSSH\n\t// generates a new key for each incoming connection.\n\tephKey, err := ecdsa.GenerateKey(kex.curve, rand)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\tserializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y)\n\n\t// generate shared secret\n\tsecret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes())\n\n\th := ecHash(kex.curve).New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteString(h, kexECDHInit.ClientPubKey)\n\twriteString(h, serializedEphKey)\n\n\tK := make([]byte, intLength(secret))\n\tmarshalInt(K, secret)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\t// H is already a hash, but the hostkey signing will apply its\n\t// own key-specific hash algorithm.\n\tsig, err := signAndMarshal(priv, rand, H)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treply := kexECDHReplyMsg{\n\t\tEphemeralPubKey: serializedEphKey,\n\t\tHostKey:         hostKeyBytes,\n\t\tSignature:       sig,\n\t}\n\n\tserialized := Marshal(&reply)\n\tif err := c.writePacket(serialized); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: sig,\n\t\tHash:      ecHash(kex.curve),\n\t}, nil\n}\n\nvar kexAlgoMap = map[string]kexAlgorithm{}\n\nfunc init() {\n\t// This is the group called diffie-hellman-group1-sha1 in RFC\n\t// 4253 and Oakley Group 2 in RFC 2409.\n\tp, _ := new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF\", 16)\n\tkexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{\n\t\tg: new(big.Int).SetInt64(2),\n\t\tp: p,\n\t\tpMinus1: new(big.Int).Sub(p, bigOne),\n\t}\n\n\t// This is the group called diffie-hellman-group14-sha1 in RFC\n\t// 4253 and Oakley Group 14 in RFC 3526.\n\tp, _ = new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF\", 16)\n\n\tkexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{\n\t\tg: new(big.Int).SetInt64(2),\n\t\tp: p,\n\t\tpMinus1: new(big.Int).Sub(p, bigOne),\n\t}\n\n\tkexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}\n\tkexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}\n\tkexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}\n\tkexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}\n}\n\n// curve25519sha256 implements the curve25519-sha256@libssh.org key\n// agreement protocol, as described in\n// https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt\ntype curve25519sha256 struct{}\n\ntype curve25519KeyPair struct {\n\tpriv [32]byte\n\tpub  [32]byte\n}\n\nfunc (kp *curve25519KeyPair) generate(rand io.Reader) error {\n\tif _, err := io.ReadFull(rand, kp.priv[:]); err != nil {\n\t\treturn err\n\t}\n\tcurve25519.ScalarBaseMult(&kp.pub, &kp.priv)\n\treturn nil\n}\n\n// curve25519Zeros is just an array of 32 zero bytes so that we have something\n// convenient to compare against in order to reject curve25519 points with the\n// wrong order.\nvar curve25519Zeros [32]byte\n\nfunc (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\tvar kp curve25519KeyPair\n\tif err := kp.generate(rand); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar reply kexECDHReplyMsg\n\tif err = Unmarshal(packet, &reply); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(reply.EphemeralPubKey) != 32 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong length\")\n\t}\n\n\tvar servPub, secret [32]byte\n\tcopy(servPub[:], reply.EphemeralPubKey)\n\tcurve25519.ScalarMult(&secret, &kp.priv, &servPub)\n\tif subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong order\")\n\t}\n\n\th := crypto.SHA256.New()\n\tmagics.write(h)\n\twriteString(h, reply.HostKey)\n\twriteString(h, kp.pub[:])\n\twriteString(h, reply.EphemeralPubKey)\n\n\tkInt := new(big.Int).SetBytes(secret[:])\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: reply.Signature,\n\t\tHash:      crypto.SHA256,\n\t}, nil\n}\n\nfunc (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexInit kexECDHInitMsg\n\tif err = Unmarshal(packet, &kexInit); err != nil {\n\t\treturn\n\t}\n\n\tif len(kexInit.ClientPubKey) != 32 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong length\")\n\t}\n\n\tvar kp curve25519KeyPair\n\tif err := kp.generate(rand); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar clientPub, secret [32]byte\n\tcopy(clientPub[:], kexInit.ClientPubKey)\n\tcurve25519.ScalarMult(&secret, &kp.priv, &clientPub)\n\tif subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong order\")\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\th := crypto.SHA256.New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteString(h, kexInit.ClientPubKey)\n\twriteString(h, kp.pub[:])\n\n\tkInt := new(big.Int).SetBytes(secret[:])\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\tsig, err := signAndMarshal(priv, rand, H)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treply := kexECDHReplyMsg{\n\t\tEphemeralPubKey: kp.pub[:],\n\t\tHostKey:         hostKeyBytes,\n\t\tSignature:       sig,\n\t}\n\tif err := c.writePacket(Marshal(&reply)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   hostKeyBytes,\n\t\tSignature: sig,\n\t\tHash:      crypto.SHA256,\n\t}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/keys.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/md5\"\n\t\"crypto/rsa\"\n\t\"crypto/sha256\"\n\t\"crypto/x509\"\n\t\"encoding/asn1\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"strings\"\n\n\t\"golang.org/x/crypto/ed25519\"\n)\n\n// These constants represent the algorithm names for key types supported by this\n// package.\nconst (\n\tKeyAlgoRSA      = \"ssh-rsa\"\n\tKeyAlgoDSA      = \"ssh-dss\"\n\tKeyAlgoECDSA256 = \"ecdsa-sha2-nistp256\"\n\tKeyAlgoECDSA384 = \"ecdsa-sha2-nistp384\"\n\tKeyAlgoECDSA521 = \"ecdsa-sha2-nistp521\"\n\tKeyAlgoED25519  = \"ssh-ed25519\"\n)\n\n// parsePubKey parses a public key of the given algorithm.\n// Use ParsePublicKey for keys with prepended algorithm.\nfunc parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) {\n\tswitch algo {\n\tcase KeyAlgoRSA:\n\t\treturn parseRSA(in)\n\tcase KeyAlgoDSA:\n\t\treturn parseDSA(in)\n\tcase KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:\n\t\treturn parseECDSA(in)\n\tcase KeyAlgoED25519:\n\t\treturn parseED25519(in)\n\tcase CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01:\n\t\tcert, err := parseCert(in, certToPrivAlgo(algo))\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\treturn cert, nil, nil\n\t}\n\treturn nil, nil, fmt.Errorf(\"ssh: unknown key algorithm: %v\", algo)\n}\n\n// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format\n// (see sshd(8) manual page) once the options and key type fields have been\n// removed.\nfunc parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) {\n\tin = bytes.TrimSpace(in)\n\n\ti := bytes.IndexAny(in, \" \\t\")\n\tif i == -1 {\n\t\ti = len(in)\n\t}\n\tbase64Key := in[:i]\n\n\tkey := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key)))\n\tn, err := base64.StdEncoding.Decode(key, base64Key)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tkey = key[:n]\n\tout, err = ParsePublicKey(key)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tcomment = string(bytes.TrimSpace(in[i:]))\n\treturn out, comment, nil\n}\n\n// ParseKnownHosts parses an entry in the format of the known_hosts file.\n//\n// The known_hosts format is documented in the sshd(8) manual page. This\n// function will parse a single entry from in. On successful return, marker\n// will contain the optional marker value (i.e. \"cert-authority\" or \"revoked\")\n// or else be empty, hosts will contain the hosts that this entry matches,\n// pubKey will contain the public key and comment will contain any trailing\n// comment at the end of the line. See the sshd(8) manual page for the various\n// forms that a host string can take.\n//\n// The unparsed remainder of the input will be returned in rest. This function\n// can be called repeatedly to parse multiple entries.\n//\n// If no entries were found in the input then err will be io.EOF. Otherwise a\n// non-nil err value indicates a parse error.\nfunc ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, err error) {\n\tfor len(in) > 0 {\n\t\tend := bytes.IndexByte(in, '\\n')\n\t\tif end != -1 {\n\t\t\trest = in[end+1:]\n\t\t\tin = in[:end]\n\t\t} else {\n\t\t\trest = nil\n\t\t}\n\n\t\tend = bytes.IndexByte(in, '\\r')\n\t\tif end != -1 {\n\t\t\tin = in[:end]\n\t\t}\n\n\t\tin = bytes.TrimSpace(in)\n\t\tif len(in) == 0 || in[0] == '#' {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\ti := bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\t// Strip out the beginning of the known_host key.\n\t\t// This is either an optional marker or a (set of) hostname(s).\n\t\tkeyFields := bytes.Fields(in)\n\t\tif len(keyFields) < 3 || len(keyFields) > 5 {\n\t\t\treturn \"\", nil, nil, \"\", nil, errors.New(\"ssh: invalid entry in known_hosts data\")\n\t\t}\n\n\t\t// keyFields[0] is either \"@cert-authority\", \"@revoked\" or a comma separated\n\t\t// list of hosts\n\t\tmarker := \"\"\n\t\tif keyFields[0][0] == '@' {\n\t\t\tmarker = string(keyFields[0][1:])\n\t\t\tkeyFields = keyFields[1:]\n\t\t}\n\n\t\thosts := string(keyFields[0])\n\t\t// keyFields[1] contains the key type (e.g. “ssh-rsa”).\n\t\t// However, that information is duplicated inside the\n\t\t// base64-encoded key and so is ignored here.\n\n\t\tkey := bytes.Join(keyFields[2:], []byte(\" \"))\n\t\tif pubKey, comment, err = parseAuthorizedKey(key); err != nil {\n\t\t\treturn \"\", nil, nil, \"\", nil, err\n\t\t}\n\n\t\treturn marker, strings.Split(hosts, \",\"), pubKey, comment, rest, nil\n\t}\n\n\treturn \"\", nil, nil, \"\", nil, io.EOF\n}\n\n// ParseAuthorizedKeys parses a public key from an authorized_keys\n// file used in OpenSSH according to the sshd(8) manual page.\nfunc ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) {\n\tfor len(in) > 0 {\n\t\tend := bytes.IndexByte(in, '\\n')\n\t\tif end != -1 {\n\t\t\trest = in[end+1:]\n\t\t\tin = in[:end]\n\t\t} else {\n\t\t\trest = nil\n\t\t}\n\n\t\tend = bytes.IndexByte(in, '\\r')\n\t\tif end != -1 {\n\t\t\tin = in[:end]\n\t\t}\n\n\t\tin = bytes.TrimSpace(in)\n\t\tif len(in) == 0 || in[0] == '#' {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\ti := bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tif out, comment, err = parseAuthorizedKey(in[i:]); err == nil {\n\t\t\treturn out, comment, options, rest, nil\n\t\t}\n\n\t\t// No key type recognised. Maybe there's an options field at\n\t\t// the beginning.\n\t\tvar b byte\n\t\tinQuote := false\n\t\tvar candidateOptions []string\n\t\toptionStart := 0\n\t\tfor i, b = range in {\n\t\t\tisEnd := !inQuote && (b == ' ' || b == '\\t')\n\t\t\tif (b == ',' && !inQuote) || isEnd {\n\t\t\t\tif i-optionStart > 0 {\n\t\t\t\t\tcandidateOptions = append(candidateOptions, string(in[optionStart:i]))\n\t\t\t\t}\n\t\t\t\toptionStart = i + 1\n\t\t\t}\n\t\t\tif isEnd {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif b == '\"' && (i == 0 || (i > 0 && in[i-1] != '\\\\')) {\n\t\t\t\tinQuote = !inQuote\n\t\t\t}\n\t\t}\n\t\tfor i < len(in) && (in[i] == ' ' || in[i] == '\\t') {\n\t\t\ti++\n\t\t}\n\t\tif i == len(in) {\n\t\t\t// Invalid line: unmatched quote\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tin = in[i:]\n\t\ti = bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tif out, comment, err = parseAuthorizedKey(in[i:]); err == nil {\n\t\t\toptions = candidateOptions\n\t\t\treturn out, comment, options, rest, nil\n\t\t}\n\n\t\tin = rest\n\t\tcontinue\n\t}\n\n\treturn nil, \"\", nil, nil, errors.New(\"ssh: no key found\")\n}\n\n// ParsePublicKey parses an SSH public key formatted for use in\n// the SSH wire protocol according to RFC 4253, section 6.6.\nfunc ParsePublicKey(in []byte) (out PublicKey, err error) {\n\talgo, in, ok := parseString(in)\n\tif !ok {\n\t\treturn nil, errShortRead\n\t}\n\tvar rest []byte\n\tout, rest, err = parsePubKey(in, string(algo))\n\tif len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: trailing junk in public key\")\n\t}\n\n\treturn out, err\n}\n\n// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH\n// authorized_keys file. The return value ends with newline.\nfunc MarshalAuthorizedKey(key PublicKey) []byte {\n\tb := &bytes.Buffer{}\n\tb.WriteString(key.Type())\n\tb.WriteByte(' ')\n\te := base64.NewEncoder(base64.StdEncoding, b)\n\te.Write(key.Marshal())\n\te.Close()\n\tb.WriteByte('\\n')\n\treturn b.Bytes()\n}\n\n// PublicKey is an abstraction of different types of public keys.\ntype PublicKey interface {\n\t// Type returns the key's type, e.g. \"ssh-rsa\".\n\tType() string\n\n\t// Marshal returns the serialized key data in SSH wire format,\n\t// with the name prefix.\n\tMarshal() []byte\n\n\t// Verify that sig is a signature on the given data using this\n\t// key. This function will hash the data appropriately first.\n\tVerify(data []byte, sig *Signature) error\n}\n\n// CryptoPublicKey, if implemented by a PublicKey,\n// returns the underlying crypto.PublicKey form of the key.\ntype CryptoPublicKey interface {\n\tCryptoPublicKey() crypto.PublicKey\n}\n\n// A Signer can create signatures that verify against a public key.\ntype Signer interface {\n\t// PublicKey returns an associated PublicKey instance.\n\tPublicKey() PublicKey\n\n\t// Sign returns raw signature for the given data. This method\n\t// will apply the hash specified for the keytype to the data.\n\tSign(rand io.Reader, data []byte) (*Signature, error)\n}\n\ntype rsaPublicKey rsa.PublicKey\n\nfunc (r *rsaPublicKey) Type() string {\n\treturn \"ssh-rsa\"\n}\n\n// parseRSA parses an RSA key according to RFC 4253, section 6.6.\nfunc parseRSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tE    *big.Int\n\t\tN    *big.Int\n\t\tRest []byte `ssh:\"rest\"`\n\t}\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif w.E.BitLen() > 24 {\n\t\treturn nil, nil, errors.New(\"ssh: exponent too large\")\n\t}\n\te := w.E.Int64()\n\tif e < 3 || e&1 == 0 {\n\t\treturn nil, nil, errors.New(\"ssh: incorrect exponent\")\n\t}\n\n\tvar key rsa.PublicKey\n\tkey.E = int(e)\n\tkey.N = w.N\n\treturn (*rsaPublicKey)(&key), w.Rest, nil\n}\n\nfunc (r *rsaPublicKey) Marshal() []byte {\n\te := new(big.Int).SetInt64(int64(r.E))\n\t// RSA publickey struct layout should match the struct used by\n\t// parseRSACert in the x/crypto/ssh/agent package.\n\twirekey := struct {\n\t\tName string\n\t\tE    *big.Int\n\t\tN    *big.Int\n\t}{\n\t\tKeyAlgoRSA,\n\t\te,\n\t\tr.N,\n\t}\n\treturn Marshal(&wirekey)\n}\n\nfunc (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != r.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, r.Type())\n\t}\n\th := crypto.SHA1.New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\treturn rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob)\n}\n\nfunc (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*rsa.PublicKey)(r)\n}\n\ntype dsaPublicKey dsa.PublicKey\n\nfunc (r *dsaPublicKey) Type() string {\n\treturn \"ssh-dss\"\n}\n\n// parseDSA parses an DSA key according to RFC 4253, section 6.6.\nfunc parseDSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tP, Q, G, Y *big.Int\n\t\tRest       []byte `ssh:\"rest\"`\n\t}\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := &dsaPublicKey{\n\t\tParameters: dsa.Parameters{\n\t\t\tP: w.P,\n\t\t\tQ: w.Q,\n\t\t\tG: w.G,\n\t\t},\n\t\tY: w.Y,\n\t}\n\treturn key, w.Rest, nil\n}\n\nfunc (k *dsaPublicKey) Marshal() []byte {\n\t// DSA publickey struct layout should match the struct used by\n\t// parseDSACert in the x/crypto/ssh/agent package.\n\tw := struct {\n\t\tName       string\n\t\tP, Q, G, Y *big.Int\n\t}{\n\t\tk.Type(),\n\t\tk.P,\n\t\tk.Q,\n\t\tk.G,\n\t\tk.Y,\n\t}\n\n\treturn Marshal(&w)\n}\n\nfunc (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\th := crypto.SHA1.New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\n\t// Per RFC 4253, section 6.6,\n\t// The value for 'dss_signature_blob' is encoded as a string containing\n\t// r, followed by s (which are 160-bit integers, without lengths or\n\t// padding, unsigned, and in network byte order).\n\t// For DSS purposes, sig.Blob should be exactly 40 bytes in length.\n\tif len(sig.Blob) != 40 {\n\t\treturn errors.New(\"ssh: DSA signature parse error\")\n\t}\n\tr := new(big.Int).SetBytes(sig.Blob[:20])\n\ts := new(big.Int).SetBytes(sig.Blob[20:])\n\tif dsa.Verify((*dsa.PublicKey)(k), digest, r, s) {\n\t\treturn nil\n\t}\n\treturn errors.New(\"ssh: signature did not verify\")\n}\n\nfunc (k *dsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*dsa.PublicKey)(k)\n}\n\ntype dsaPrivateKey struct {\n\t*dsa.PrivateKey\n}\n\nfunc (k *dsaPrivateKey) PublicKey() PublicKey {\n\treturn (*dsaPublicKey)(&k.PrivateKey.PublicKey)\n}\n\nfunc (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\th := crypto.SHA1.New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\tr, s, err := dsa.Sign(rand, k.PrivateKey, digest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsig := make([]byte, 40)\n\trb := r.Bytes()\n\tsb := s.Bytes()\n\n\tcopy(sig[20-len(rb):20], rb)\n\tcopy(sig[40-len(sb):], sb)\n\n\treturn &Signature{\n\t\tFormat: k.PublicKey().Type(),\n\t\tBlob:   sig,\n\t}, nil\n}\n\ntype ecdsaPublicKey ecdsa.PublicKey\n\nfunc (key *ecdsaPublicKey) Type() string {\n\treturn \"ecdsa-sha2-\" + key.nistID()\n}\n\nfunc (key *ecdsaPublicKey) nistID() string {\n\tswitch key.Params().BitSize {\n\tcase 256:\n\t\treturn \"nistp256\"\n\tcase 384:\n\t\treturn \"nistp384\"\n\tcase 521:\n\t\treturn \"nistp521\"\n\t}\n\tpanic(\"ssh: unsupported ecdsa key size\")\n}\n\ntype ed25519PublicKey ed25519.PublicKey\n\nfunc (key ed25519PublicKey) Type() string {\n\treturn KeyAlgoED25519\n}\n\nfunc parseED25519(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tKeyBytes []byte\n\t\tRest     []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := ed25519.PublicKey(w.KeyBytes)\n\n\treturn (ed25519PublicKey)(key), w.Rest, nil\n}\n\nfunc (key ed25519PublicKey) Marshal() []byte {\n\tw := struct {\n\t\tName     string\n\t\tKeyBytes []byte\n\t}{\n\t\tKeyAlgoED25519,\n\t\t[]byte(key),\n\t}\n\treturn Marshal(&w)\n}\n\nfunc (key ed25519PublicKey) Verify(b []byte, sig *Signature) error {\n\tif sig.Format != key.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, key.Type())\n\t}\n\n\tedKey := (ed25519.PublicKey)(key)\n\tif ok := ed25519.Verify(edKey, b, sig.Blob); !ok {\n\t\treturn errors.New(\"ssh: signature did not verify\")\n\t}\n\n\treturn nil\n}\n\nfunc (k ed25519PublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn ed25519.PublicKey(k)\n}\n\nfunc supportedEllipticCurve(curve elliptic.Curve) bool {\n\treturn curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521()\n}\n\n// ecHash returns the hash to match the given elliptic curve, see RFC\n// 5656, section 6.2.1\nfunc ecHash(curve elliptic.Curve) crypto.Hash {\n\tbitSize := curve.Params().BitSize\n\tswitch {\n\tcase bitSize <= 256:\n\t\treturn crypto.SHA256\n\tcase bitSize <= 384:\n\t\treturn crypto.SHA384\n\t}\n\treturn crypto.SHA512\n}\n\n// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1.\nfunc parseECDSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tCurve    string\n\t\tKeyBytes []byte\n\t\tRest     []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := new(ecdsa.PublicKey)\n\n\tswitch w.Curve {\n\tcase \"nistp256\":\n\t\tkey.Curve = elliptic.P256()\n\tcase \"nistp384\":\n\t\tkey.Curve = elliptic.P384()\n\tcase \"nistp521\":\n\t\tkey.Curve = elliptic.P521()\n\tdefault:\n\t\treturn nil, nil, errors.New(\"ssh: unsupported curve\")\n\t}\n\n\tkey.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)\n\tif key.X == nil || key.Y == nil {\n\t\treturn nil, nil, errors.New(\"ssh: invalid curve point\")\n\t}\n\treturn (*ecdsaPublicKey)(key), w.Rest, nil\n}\n\nfunc (key *ecdsaPublicKey) Marshal() []byte {\n\t// See RFC 5656, section 3.1.\n\tkeyBytes := elliptic.Marshal(key.Curve, key.X, key.Y)\n\t// ECDSA publickey struct layout should match the struct used by\n\t// parseECDSACert in the x/crypto/ssh/agent package.\n\tw := struct {\n\t\tName string\n\t\tID   string\n\t\tKey  []byte\n\t}{\n\t\tkey.Type(),\n\t\tkey.nistID(),\n\t\tkeyBytes,\n\t}\n\n\treturn Marshal(&w)\n}\n\nfunc (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != key.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, key.Type())\n\t}\n\n\th := ecHash(key.Curve).New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\n\t// Per RFC 5656, section 3.1.2,\n\t// The ecdsa_signature_blob value has the following specific encoding:\n\t//    mpint    r\n\t//    mpint    s\n\tvar ecSig struct {\n\t\tR *big.Int\n\t\tS *big.Int\n\t}\n\n\tif err := Unmarshal(sig.Blob, &ecSig); err != nil {\n\t\treturn err\n\t}\n\n\tif ecdsa.Verify((*ecdsa.PublicKey)(key), digest, ecSig.R, ecSig.S) {\n\t\treturn nil\n\t}\n\treturn errors.New(\"ssh: signature did not verify\")\n}\n\nfunc (k *ecdsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*ecdsa.PublicKey)(k)\n}\n\n// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey,\n// *ecdsa.PrivateKey or any other crypto.Signer and returns a corresponding\n// Signer instance. ECDSA keys must use P-256, P-384 or P-521.\nfunc NewSignerFromKey(key interface{}) (Signer, error) {\n\tswitch key := key.(type) {\n\tcase crypto.Signer:\n\t\treturn NewSignerFromSigner(key)\n\tcase *dsa.PrivateKey:\n\t\treturn &dsaPrivateKey{key}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", key)\n\t}\n}\n\ntype wrappedSigner struct {\n\tsigner crypto.Signer\n\tpubKey PublicKey\n}\n\n// NewSignerFromSigner takes any crypto.Signer implementation and\n// returns a corresponding Signer interface. This can be used, for\n// example, with keys kept in hardware modules.\nfunc NewSignerFromSigner(signer crypto.Signer) (Signer, error) {\n\tpubKey, err := NewPublicKey(signer.Public())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &wrappedSigner{signer, pubKey}, nil\n}\n\nfunc (s *wrappedSigner) PublicKey() PublicKey {\n\treturn s.pubKey\n}\n\nfunc (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\tvar hashFunc crypto.Hash\n\n\tswitch key := s.pubKey.(type) {\n\tcase *rsaPublicKey, *dsaPublicKey:\n\t\thashFunc = crypto.SHA1\n\tcase *ecdsaPublicKey:\n\t\thashFunc = ecHash(key.Curve)\n\tcase ed25519PublicKey:\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", key)\n\t}\n\n\tvar digest []byte\n\tif hashFunc != 0 {\n\t\th := hashFunc.New()\n\t\th.Write(data)\n\t\tdigest = h.Sum(nil)\n\t} else {\n\t\tdigest = data\n\t}\n\n\tsignature, err := s.signer.Sign(rand, digest, hashFunc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// crypto.Signer.Sign is expected to return an ASN.1-encoded signature\n\t// for ECDSA and DSA, but that's not the encoding expected by SSH, so\n\t// re-encode.\n\tswitch s.pubKey.(type) {\n\tcase *ecdsaPublicKey, *dsaPublicKey:\n\t\ttype asn1Signature struct {\n\t\t\tR, S *big.Int\n\t\t}\n\t\tasn1Sig := new(asn1Signature)\n\t\t_, err := asn1.Unmarshal(signature, asn1Sig)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch s.pubKey.(type) {\n\t\tcase *ecdsaPublicKey:\n\t\t\tsignature = Marshal(asn1Sig)\n\n\t\tcase *dsaPublicKey:\n\t\t\tsignature = make([]byte, 40)\n\t\t\tr := asn1Sig.R.Bytes()\n\t\t\ts := asn1Sig.S.Bytes()\n\t\t\tcopy(signature[20-len(r):20], r)\n\t\t\tcopy(signature[40-len(s):40], s)\n\t\t}\n\t}\n\n\treturn &Signature{\n\t\tFormat: s.pubKey.Type(),\n\t\tBlob:   signature,\n\t}, nil\n}\n\n// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey,\n// or ed25519.PublicKey returns a corresponding PublicKey instance.\n// ECDSA keys must use P-256, P-384 or P-521.\nfunc NewPublicKey(key interface{}) (PublicKey, error) {\n\tswitch key := key.(type) {\n\tcase *rsa.PublicKey:\n\t\treturn (*rsaPublicKey)(key), nil\n\tcase *ecdsa.PublicKey:\n\t\tif !supportedEllipticCurve(key.Curve) {\n\t\t\treturn nil, errors.New(\"ssh: only P-256, P-384 and P-521 EC keys are supported.\")\n\t\t}\n\t\treturn (*ecdsaPublicKey)(key), nil\n\tcase *dsa.PublicKey:\n\t\treturn (*dsaPublicKey)(key), nil\n\tcase ed25519.PublicKey:\n\t\treturn (ed25519PublicKey)(key), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", key)\n\t}\n}\n\n// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports\n// the same keys as ParseRawPrivateKey.\nfunc ParsePrivateKey(pemBytes []byte) (Signer, error) {\n\tkey, err := ParseRawPrivateKey(pemBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewSignerFromKey(key)\n}\n\n// encryptedBlock tells whether a private key is\n// encrypted by examining its Proc-Type header\n// for a mention of ENCRYPTED\n// according to RFC 1421 Section 4.6.1.1.\nfunc encryptedBlock(block *pem.Block) bool {\n\treturn strings.Contains(block.Headers[\"Proc-Type\"], \"ENCRYPTED\")\n}\n\n// ParseRawPrivateKey returns a private key from a PEM encoded private key. It\n// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys.\nfunc ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {\n\tblock, _ := pem.Decode(pemBytes)\n\tif block == nil {\n\t\treturn nil, errors.New(\"ssh: no key found\")\n\t}\n\n\tif encryptedBlock(block) {\n\t\treturn nil, errors.New(\"ssh: cannot decode encrypted private keys\")\n\t}\n\n\tswitch block.Type {\n\tcase \"RSA PRIVATE KEY\":\n\t\treturn x509.ParsePKCS1PrivateKey(block.Bytes)\n\tcase \"EC PRIVATE KEY\":\n\t\treturn x509.ParseECPrivateKey(block.Bytes)\n\tcase \"DSA PRIVATE KEY\":\n\t\treturn ParseDSAPrivateKey(block.Bytes)\n\tcase \"OPENSSH PRIVATE KEY\":\n\t\treturn parseOpenSSHPrivateKey(block.Bytes)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %q\", block.Type)\n\t}\n}\n\n// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as\n// specified by the OpenSSL DSA man page.\nfunc ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {\n\tvar k struct {\n\t\tVersion int\n\t\tP       *big.Int\n\t\tQ       *big.Int\n\t\tG       *big.Int\n\t\tPub     *big.Int\n\t\tPriv    *big.Int\n\t}\n\trest, err := asn1.Unmarshal(der, &k)\n\tif err != nil {\n\t\treturn nil, errors.New(\"ssh: failed to parse DSA key: \" + err.Error())\n\t}\n\tif len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: garbage after DSA key\")\n\t}\n\n\treturn &dsa.PrivateKey{\n\t\tPublicKey: dsa.PublicKey{\n\t\t\tParameters: dsa.Parameters{\n\t\t\t\tP: k.P,\n\t\t\t\tQ: k.Q,\n\t\t\t\tG: k.G,\n\t\t\t},\n\t\t\tY: k.Pub,\n\t\t},\n\t\tX: k.Priv,\n\t}, nil\n}\n\n// Implemented based on the documentation at\n// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key\nfunc parseOpenSSHPrivateKey(key []byte) (crypto.PrivateKey, error) {\n\tmagic := append([]byte(\"openssh-key-v1\"), 0)\n\tif !bytes.Equal(magic, key[0:len(magic)]) {\n\t\treturn nil, errors.New(\"ssh: invalid openssh private key format\")\n\t}\n\tremaining := key[len(magic):]\n\n\tvar w struct {\n\t\tCipherName   string\n\t\tKdfName      string\n\t\tKdfOpts      string\n\t\tNumKeys      uint32\n\t\tPubKey       []byte\n\t\tPrivKeyBlock []byte\n\t}\n\n\tif err := Unmarshal(remaining, &w); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif w.KdfName != \"none\" || w.CipherName != \"none\" {\n\t\treturn nil, errors.New(\"ssh: cannot decode encrypted private keys\")\n\t}\n\n\tpk1 := struct {\n\t\tCheck1  uint32\n\t\tCheck2  uint32\n\t\tKeytype string\n\t\tRest    []byte `ssh:\"rest\"`\n\t}{}\n\n\tif err := Unmarshal(w.PrivKeyBlock, &pk1); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif pk1.Check1 != pk1.Check2 {\n\t\treturn nil, errors.New(\"ssh: checkint mismatch\")\n\t}\n\n\t// we only handle ed25519 and rsa keys currently\n\tswitch pk1.Keytype {\n\tcase KeyAlgoRSA:\n\t\t// https://github.com/openssh/openssh-portable/blob/master/sshkey.c#L2760-L2773\n\t\tkey := struct {\n\t\t\tN       *big.Int\n\t\t\tE       *big.Int\n\t\t\tD       *big.Int\n\t\t\tIqmp    *big.Int\n\t\t\tP       *big.Int\n\t\t\tQ       *big.Int\n\t\t\tComment string\n\t\t\tPad     []byte `ssh:\"rest\"`\n\t\t}{}\n\n\t\tif err := Unmarshal(pk1.Rest, &key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfor i, b := range key.Pad {\n\t\t\tif int(b) != i+1 {\n\t\t\t\treturn nil, errors.New(\"ssh: padding not as expected\")\n\t\t\t}\n\t\t}\n\n\t\tpk := &rsa.PrivateKey{\n\t\t\tPublicKey: rsa.PublicKey{\n\t\t\t\tN: key.N,\n\t\t\t\tE: int(key.E.Int64()),\n\t\t\t},\n\t\t\tD:      key.D,\n\t\t\tPrimes: []*big.Int{key.P, key.Q},\n\t\t}\n\n\t\tif err := pk.Validate(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpk.Precompute()\n\n\t\treturn pk, nil\n\tcase KeyAlgoED25519:\n\t\tkey := struct {\n\t\t\tPub     []byte\n\t\t\tPriv    []byte\n\t\t\tComment string\n\t\t\tPad     []byte `ssh:\"rest\"`\n\t\t}{}\n\n\t\tif err := Unmarshal(pk1.Rest, &key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(key.Priv) != ed25519.PrivateKeySize {\n\t\t\treturn nil, errors.New(\"ssh: private key unexpected length\")\n\t\t}\n\n\t\tfor i, b := range key.Pad {\n\t\t\tif int(b) != i+1 {\n\t\t\t\treturn nil, errors.New(\"ssh: padding not as expected\")\n\t\t\t}\n\t\t}\n\n\t\tpk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize))\n\t\tcopy(pk, key.Priv)\n\t\treturn &pk, nil\n\tdefault:\n\t\treturn nil, errors.New(\"ssh: unhandled key type\")\n\t}\n}\n\n// FingerprintLegacyMD5 returns the user presentation of the key's\n// fingerprint as described by RFC 4716 section 4.\nfunc FingerprintLegacyMD5(pubKey PublicKey) string {\n\tmd5sum := md5.Sum(pubKey.Marshal())\n\thexarray := make([]string, len(md5sum))\n\tfor i, c := range md5sum {\n\t\thexarray[i] = hex.EncodeToString([]byte{c})\n\t}\n\treturn strings.Join(hexarray, \":\")\n}\n\n// FingerprintSHA256 returns the user presentation of the key's\n// fingerprint as unpadded base64 encoded sha256 hash.\n// This format was introduced from OpenSSH 6.8.\n// https://www.openssh.com/txt/release-6.8\n// https://tools.ietf.org/html/rfc4648#section-3.2 (unpadded base64 encoding)\nfunc FingerprintSHA256(pubKey PublicKey) string {\n\tsha256sum := sha256.Sum256(pubKey.Marshal())\n\thash := base64.RawStdEncoding.EncodeToString(sha256sum[:])\n\treturn \"SHA256:\" + hash\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.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 knownhosts implements a parser for the OpenSSH\n// known_hosts host key database.\npackage knownhosts\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\n\t\"golang.org/x/crypto/ssh\"\n)\n\n// See the sshd manpage\n// (http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT) for\n// background.\n\ntype addr struct{ host, port string }\n\nfunc (a *addr) String() string {\n\treturn a.host + \":\" + a.port\n}\n\nfunc (a *addr) eq(b addr) bool {\n\treturn a.host == b.host && a.port == b.port\n}\n\ntype hostPattern struct {\n\tnegate bool\n\taddr   addr\n}\n\nfunc (p *hostPattern) String() string {\n\tn := \"\"\n\tif p.negate {\n\t\tn = \"!\"\n\t}\n\n\treturn n + p.addr.String()\n}\n\n// See\n// https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/addrmatch.c\n// The matching of * has no regard for separators, unlike filesystem globs\nfunc wildcardMatch(pat []byte, str []byte) bool {\n\tfor {\n\t\tif len(pat) == 0 {\n\t\t\treturn len(str) == 0\n\t\t}\n\t\tif len(str) == 0 {\n\t\t\treturn false\n\t\t}\n\n\t\tif pat[0] == '*' {\n\t\t\tif len(pat) == 1 {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tfor j := range str {\n\t\t\t\tif wildcardMatch(pat[1:], str[j:]) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tif pat[0] == '?' || pat[0] == str[0] {\n\t\t\tpat = pat[1:]\n\t\t\tstr = str[1:]\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n}\n\nfunc (l *hostPattern) match(a addr) bool {\n\treturn wildcardMatch([]byte(l.addr.host), []byte(a.host)) && l.addr.port == a.port\n}\n\ntype keyDBLine struct {\n\tcert     bool\n\tpatterns []*hostPattern\n\tknownKey KnownKey\n}\n\nfunc (l *keyDBLine) String() string {\n\tc := \"\"\n\tif l.cert {\n\t\tc = markerCert + \" \"\n\t}\n\n\tvar ss []string\n\tfor _, p := range l.patterns {\n\t\tss = append(ss, p.String())\n\t}\n\n\treturn c + strings.Join(ss, \",\") + \" \" + serialize(l.knownKey.Key)\n}\n\nfunc serialize(k ssh.PublicKey) string {\n\treturn k.Type() + \" \" + base64.StdEncoding.EncodeToString(k.Marshal())\n}\n\nfunc (l *keyDBLine) match(addrs []addr) bool {\n\tmatched := false\n\tfor _, p := range l.patterns {\n\t\tfor _, a := range addrs {\n\t\t\tm := p.match(a)\n\t\t\tif p.negate {\n\t\t\t\tif m {\n\t\t\t\t\treturn false\n\t\t\t\t} else {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif m {\n\t\t\t\tmatched = true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn matched\n}\n\ntype hostKeyDB struct {\n\t// Serialized version of revoked keys\n\trevoked map[string]*KnownKey\n\tlines   []keyDBLine\n}\n\nfunc (db *hostKeyDB) String() string {\n\tvar ls []string\n\tfor _, k := range db.revoked {\n\t\tls = append(ls, markerRevoked+\" * \"+serialize(k.Key))\n\t}\n\tfor _, l := range db.lines {\n\t\tls = append(ls, l.String())\n\t}\n\treturn strings.Join(ls, \"\\n\")\n}\n\nfunc newHostKeyDB() *hostKeyDB {\n\tdb := &hostKeyDB{\n\t\trevoked: make(map[string]*KnownKey),\n\t}\n\n\treturn db\n}\n\nfunc keyEq(a, b ssh.PublicKey) bool {\n\treturn bytes.Equal(a.Marshal(), b.Marshal())\n}\n\n// IsAuthority can be used as a callback in ssh.CertChecker\nfunc (db *hostKeyDB) IsAuthority(remote ssh.PublicKey) bool {\n\tfor _, l := range db.lines {\n\t\t// TODO(hanwen): should we check the hostname against host pattern?\n\t\tif l.cert && keyEq(l.knownKey.Key, remote) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// IsRevoked can be used as a callback in ssh.CertChecker\nfunc (db *hostKeyDB) IsRevoked(key *ssh.Certificate) bool {\n\t_, ok := db.revoked[string(key.Marshal())]\n\treturn ok\n}\n\nconst markerCert = \"@cert-authority\"\nconst markerRevoked = \"@revoked\"\n\nfunc nextWord(line []byte) (string, []byte) {\n\ti := bytes.IndexAny(line, \"\\t \")\n\tif i == -1 {\n\t\treturn string(line), nil\n\t}\n\n\treturn string(line[:i]), bytes.TrimSpace(line[i:])\n}\n\nfunc parseLine(line []byte) (marker string, pattern []string, key ssh.PublicKey, err error) {\n\tif w, next := nextWord(line); w == markerCert || w == markerRevoked {\n\t\tmarker = w\n\t\tline = next\n\t}\n\n\thostPart, line := nextWord(line)\n\tif len(line) == 0 {\n\t\treturn \"\", nil, nil, errors.New(\"knownhosts: missing host pattern\")\n\t}\n\n\tif len(hostPart) > 0 && hostPart[0] == '|' {\n\t\treturn \"\", nil, nil, errors.New(\"knownhosts: hashed hostnames not implemented\")\n\t}\n\n\tpattern = strings.Split(hostPart, \",\")\n\n\t// ignore the keytype as it's in the key blob anyway.\n\t_, line = nextWord(line)\n\tif len(line) == 0 {\n\t\treturn \"\", nil, nil, errors.New(\"knownhosts: missing key type pattern\")\n\t}\n\n\tkeyBlob, _ := nextWord(line)\n\n\tkeyBytes, err := base64.StdEncoding.DecodeString(keyBlob)\n\tif err != nil {\n\t\treturn \"\", nil, nil, err\n\t}\n\tkey, err = ssh.ParsePublicKey(keyBytes)\n\tif err != nil {\n\t\treturn \"\", nil, nil, err\n\t}\n\n\treturn marker, pattern, key, nil\n}\n\nfunc (db *hostKeyDB) parseLine(line []byte, filename string, linenum int) error {\n\tmarker, patterns, key, err := parseLine(line)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif marker == markerRevoked {\n\t\tdb.revoked[string(key.Marshal())] = &KnownKey{\n\t\t\tKey:      key,\n\t\t\tFilename: filename,\n\t\t\tLine:     linenum,\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tentry := keyDBLine{\n\t\tcert: marker == markerCert,\n\t\tknownKey: KnownKey{\n\t\t\tFilename: filename,\n\t\t\tLine:     linenum,\n\t\t\tKey:      key,\n\t\t},\n\t}\n\n\tfor _, p := range patterns {\n\t\tif len(p) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar a addr\n\t\tvar negate bool\n\t\tif p[0] == '!' {\n\t\t\tnegate = true\n\t\t\tp = p[1:]\n\t\t}\n\n\t\tif len(p) == 0 {\n\t\t\treturn errors.New(\"knownhosts: negation without following hostname\")\n\t\t}\n\n\t\tif p[0] == '[' {\n\t\t\ta.host, a.port, err = net.SplitHostPort(p)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\ta.host, a.port, err = net.SplitHostPort(p)\n\t\t\tif err != nil {\n\t\t\t\ta.host = p\n\t\t\t\ta.port = \"22\"\n\t\t\t}\n\t\t}\n\n\t\tentry.patterns = append(entry.patterns, &hostPattern{\n\t\t\tnegate: negate,\n\t\t\taddr:   a,\n\t\t})\n\t}\n\n\tdb.lines = append(db.lines, entry)\n\treturn nil\n}\n\n// KnownKey represents a key declared in a known_hosts file.\ntype KnownKey struct {\n\tKey      ssh.PublicKey\n\tFilename string\n\tLine     int\n}\n\nfunc (k *KnownKey) String() string {\n\treturn fmt.Sprintf(\"%s:%d: %s\", k.Filename, k.Line, serialize(k.Key))\n}\n\n// KeyError is returned if we did not find the key in the host key\n// database, or there was a mismatch.  Typically, in batch\n// applications, this should be interpreted as failure. Interactive\n// applications can offer an interactive prompt to the user.\ntype KeyError struct {\n\t// Want holds the accepted host keys. For each key algorithm,\n\t// there can be one hostkey.  If Want is empty, the host is\n\t// unknown. If Want is non-empty, there was a mismatch, which\n\t// can signify a MITM attack.\n\tWant []KnownKey\n}\n\nfunc (u *KeyError) Error() string {\n\tif len(u.Want) == 0 {\n\t\treturn \"knownhosts: key is unknown\"\n\t}\n\treturn \"knownhosts: key mismatch\"\n}\n\n// RevokedError is returned if we found a key that was revoked.\ntype RevokedError struct {\n\tRevoked KnownKey\n}\n\nfunc (r *RevokedError) Error() string {\n\treturn \"knownhosts: key is revoked\"\n}\n\n// check checks a key against the host database. This should not be\n// used for verifying certificates.\nfunc (db *hostKeyDB) check(address string, remote net.Addr, remoteKey ssh.PublicKey) error {\n\tif revoked := db.revoked[string(remoteKey.Marshal())]; revoked != nil {\n\t\treturn &RevokedError{Revoked: *revoked}\n\t}\n\n\thost, port, err := net.SplitHostPort(remote.String())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"knownhosts: SplitHostPort(%s): %v\", remote, err)\n\t}\n\n\taddrs := []addr{\n\t\t{host, port},\n\t}\n\n\tif address != \"\" {\n\t\thost, port, err := net.SplitHostPort(address)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"knownhosts: SplitHostPort(%s): %v\", address, err)\n\t\t}\n\n\t\taddrs = append(addrs, addr{host, port})\n\t}\n\n\treturn db.checkAddrs(addrs, remoteKey)\n}\n\n// checkAddrs checks if we can find the given public key for any of\n// the given addresses.  If we only find an entry for the IP address,\n// or only the hostname, then this still succeeds.\nfunc (db *hostKeyDB) checkAddrs(addrs []addr, remoteKey ssh.PublicKey) error {\n\t// TODO(hanwen): are these the right semantics? What if there\n\t// is just a key for the IP address, but not for the\n\t// hostname?\n\n\t// Algorithm => key.\n\tknownKeys := map[string]KnownKey{}\n\tfor _, l := range db.lines {\n\t\tif l.match(addrs) {\n\t\t\ttyp := l.knownKey.Key.Type()\n\t\t\tif _, ok := knownKeys[typ]; !ok {\n\t\t\t\tknownKeys[typ] = l.knownKey\n\t\t\t}\n\t\t}\n\t}\n\n\tkeyErr := &KeyError{}\n\tfor _, v := range knownKeys {\n\t\tkeyErr.Want = append(keyErr.Want, v)\n\t}\n\n\t// Unknown remote host.\n\tif len(knownKeys) == 0 {\n\t\treturn keyErr\n\t}\n\n\t// If the remote host starts using a different, unknown key type, we\n\t// also interpret that as a mismatch.\n\tif known, ok := knownKeys[remoteKey.Type()]; !ok || !keyEq(known.Key, remoteKey) {\n\t\treturn keyErr\n\t}\n\n\treturn nil\n}\n\n// The Read function parses file contents.\nfunc (db *hostKeyDB) Read(r io.Reader, filename string) error {\n\tscanner := bufio.NewScanner(r)\n\n\tlineNum := 0\n\tfor scanner.Scan() {\n\t\tlineNum++\n\t\tline := scanner.Bytes()\n\t\tline = bytes.TrimSpace(line)\n\t\tif len(line) == 0 || line[0] == '#' {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := db.parseLine(line, filename, lineNum); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn scanner.Err()\n}\n\n// New creates a host key callback from the given OpenSSH host key\n// files. The returned callback is for use in\n// ssh.ClientConfig.HostKeyCallback. Hostnames are ignored for\n// certificates, ie. any certificate authority is assumed to be valid\n// for all remote hosts.  Hashed hostnames are not supported.\nfunc New(files ...string) (ssh.HostKeyCallback, error) {\n\tdb := newHostKeyDB()\n\tfor _, fn := range files {\n\t\tf, err := os.Open(fn)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer f.Close()\n\t\tif err := db.Read(f, fn); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// TODO(hanwen): properly supporting certificates requires an\n\t// API change in the SSH library: IsAuthority should provide\n\t// the address too?\n\n\tvar certChecker ssh.CertChecker\n\tcertChecker.IsAuthority = db.IsAuthority\n\tcertChecker.IsRevoked = db.IsRevoked\n\tcertChecker.HostKeyFallback = db.check\n\n\treturn certChecker.CheckHostKey, nil\n}\n\n// Line returns a line to add append to the known_hosts files.\nfunc Line(addresses []string, key ssh.PublicKey) string {\n\tvar trimmed []string\n\tfor _, a := range addresses {\n\t\thost, port, err := net.SplitHostPort(a)\n\t\tif err != nil {\n\t\t\thost = a\n\t\t\tport = \"22\"\n\t\t}\n\t\tentry := host\n\t\tif port != \"22\" {\n\t\t\tentry = \"[\" + entry + \"]:\" + port\n\t\t} else if strings.Contains(host, \":\") {\n\t\t\tentry = \"[\" + entry + \"]\"\n\t\t}\n\n\t\ttrimmed = append(trimmed, entry)\n\t}\n\n\treturn strings.Join(trimmed, \",\") + \" \" + serialize(key)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/mac.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 ssh\n\n// Message authentication support\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"hash\"\n)\n\ntype macMode struct {\n\tkeySize int\n\tetm     bool\n\tnew     func(key []byte) hash.Hash\n}\n\n// truncatingMAC wraps around a hash.Hash and truncates the output digest to\n// a given size.\ntype truncatingMAC struct {\n\tlength int\n\thmac   hash.Hash\n}\n\nfunc (t truncatingMAC) Write(data []byte) (int, error) {\n\treturn t.hmac.Write(data)\n}\n\nfunc (t truncatingMAC) Sum(in []byte) []byte {\n\tout := t.hmac.Sum(in)\n\treturn out[:len(in)+t.length]\n}\n\nfunc (t truncatingMAC) Reset() {\n\tt.hmac.Reset()\n}\n\nfunc (t truncatingMAC) Size() int {\n\treturn t.length\n}\n\nfunc (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }\n\nvar macModes = map[string]*macMode{\n\t\"hmac-sha2-256-etm@openssh.com\": {32, true, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha256.New, key)\n\t}},\n\t\"hmac-sha2-256\": {32, false, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha256.New, key)\n\t}},\n\t\"hmac-sha1\": {20, false, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha1.New, key)\n\t}},\n\t\"hmac-sha1-96\": {20, false, func(key []byte) hash.Hash {\n\t\treturn truncatingMAC{12, hmac.New(sha1.New, key)}\n\t}},\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/messages.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// These are SSH message type numbers. They are scattered around several\n// documents but many were taken from [SSH-PARAMETERS].\nconst (\n\tmsgIgnore        = 2\n\tmsgUnimplemented = 3\n\tmsgDebug         = 4\n\tmsgNewKeys       = 21\n\n\t// Standard authentication messages\n\tmsgUserAuthSuccess = 52\n\tmsgUserAuthBanner  = 53\n)\n\n// SSH messages:\n//\n// These structures mirror the wire format of the corresponding SSH messages.\n// They are marshaled using reflection with the marshal and unmarshal functions\n// in this file. The only wrinkle is that a final member of type []byte with a\n// ssh tag of \"rest\" receives the remainder of a packet when unmarshaling.\n\n// See RFC 4253, section 11.1.\nconst msgDisconnect = 1\n\n// disconnectMsg is the message that signals a disconnect. It is also\n// the error type returned from mux.Wait()\ntype disconnectMsg struct {\n\tReason   uint32 `sshtype:\"1\"`\n\tMessage  string\n\tLanguage string\n}\n\nfunc (d *disconnectMsg) Error() string {\n\treturn fmt.Sprintf(\"ssh: disconnect, reason %d: %s\", d.Reason, d.Message)\n}\n\n// See RFC 4253, section 7.1.\nconst msgKexInit = 20\n\ntype kexInitMsg struct {\n\tCookie                  [16]byte `sshtype:\"20\"`\n\tKexAlgos                []string\n\tServerHostKeyAlgos      []string\n\tCiphersClientServer     []string\n\tCiphersServerClient     []string\n\tMACsClientServer        []string\n\tMACsServerClient        []string\n\tCompressionClientServer []string\n\tCompressionServerClient []string\n\tLanguagesClientServer   []string\n\tLanguagesServerClient   []string\n\tFirstKexFollows         bool\n\tReserved                uint32\n}\n\n// See RFC 4253, section 8.\n\n// Diffie-Helman\nconst msgKexDHInit = 30\n\ntype kexDHInitMsg struct {\n\tX *big.Int `sshtype:\"30\"`\n}\n\nconst msgKexECDHInit = 30\n\ntype kexECDHInitMsg struct {\n\tClientPubKey []byte `sshtype:\"30\"`\n}\n\nconst msgKexECDHReply = 31\n\ntype kexECDHReplyMsg struct {\n\tHostKey         []byte `sshtype:\"31\"`\n\tEphemeralPubKey []byte\n\tSignature       []byte\n}\n\nconst msgKexDHReply = 31\n\ntype kexDHReplyMsg struct {\n\tHostKey   []byte `sshtype:\"31\"`\n\tY         *big.Int\n\tSignature []byte\n}\n\n// See RFC 4253, section 10.\nconst msgServiceRequest = 5\n\ntype serviceRequestMsg struct {\n\tService string `sshtype:\"5\"`\n}\n\n// See RFC 4253, section 10.\nconst msgServiceAccept = 6\n\ntype serviceAcceptMsg struct {\n\tService string `sshtype:\"6\"`\n}\n\n// See RFC 4252, section 5.\nconst msgUserAuthRequest = 50\n\ntype userAuthRequestMsg struct {\n\tUser    string `sshtype:\"50\"`\n\tService string\n\tMethod  string\n\tPayload []byte `ssh:\"rest\"`\n}\n\n// Used for debug printouts of packets.\ntype userAuthSuccessMsg struct {\n}\n\n// See RFC 4252, section 5.1\nconst msgUserAuthFailure = 51\n\ntype userAuthFailureMsg struct {\n\tMethods        []string `sshtype:\"51\"`\n\tPartialSuccess bool\n}\n\n// See RFC 4256, section 3.2\nconst msgUserAuthInfoRequest = 60\nconst msgUserAuthInfoResponse = 61\n\ntype userAuthInfoRequestMsg struct {\n\tUser               string `sshtype:\"60\"`\n\tInstruction        string\n\tDeprecatedLanguage string\n\tNumPrompts         uint32\n\tPrompts            []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpen = 90\n\ntype channelOpenMsg struct {\n\tChanType         string `sshtype:\"90\"`\n\tPeersId          uint32\n\tPeersWindow      uint32\n\tMaxPacketSize    uint32\n\tTypeSpecificData []byte `ssh:\"rest\"`\n}\n\nconst msgChannelExtendedData = 95\nconst msgChannelData = 94\n\n// Used for debug print outs of packets.\ntype channelDataMsg struct {\n\tPeersId uint32 `sshtype:\"94\"`\n\tLength  uint32\n\tRest    []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpenConfirm = 91\n\ntype channelOpenConfirmMsg struct {\n\tPeersId          uint32 `sshtype:\"91\"`\n\tMyId             uint32\n\tMyWindow         uint32\n\tMaxPacketSize    uint32\n\tTypeSpecificData []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpenFailure = 92\n\ntype channelOpenFailureMsg struct {\n\tPeersId  uint32 `sshtype:\"92\"`\n\tReason   RejectionReason\n\tMessage  string\n\tLanguage string\n}\n\nconst msgChannelRequest = 98\n\ntype channelRequestMsg struct {\n\tPeersId             uint32 `sshtype:\"98\"`\n\tRequest             string\n\tWantReply           bool\n\tRequestSpecificData []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.4.\nconst msgChannelSuccess = 99\n\ntype channelRequestSuccessMsg struct {\n\tPeersId uint32 `sshtype:\"99\"`\n}\n\n// See RFC 4254, section 5.4.\nconst msgChannelFailure = 100\n\ntype channelRequestFailureMsg struct {\n\tPeersId uint32 `sshtype:\"100\"`\n}\n\n// See RFC 4254, section 5.3\nconst msgChannelClose = 97\n\ntype channelCloseMsg struct {\n\tPeersId uint32 `sshtype:\"97\"`\n}\n\n// See RFC 4254, section 5.3\nconst msgChannelEOF = 96\n\ntype channelEOFMsg struct {\n\tPeersId uint32 `sshtype:\"96\"`\n}\n\n// See RFC 4254, section 4\nconst msgGlobalRequest = 80\n\ntype globalRequestMsg struct {\n\tType      string `sshtype:\"80\"`\n\tWantReply bool\n\tData      []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 4\nconst msgRequestSuccess = 81\n\ntype globalRequestSuccessMsg struct {\n\tData []byte `ssh:\"rest\" sshtype:\"81\"`\n}\n\n// See RFC 4254, section 4\nconst msgRequestFailure = 82\n\ntype globalRequestFailureMsg struct {\n\tData []byte `ssh:\"rest\" sshtype:\"82\"`\n}\n\n// See RFC 4254, section 5.2\nconst msgChannelWindowAdjust = 93\n\ntype windowAdjustMsg struct {\n\tPeersId         uint32 `sshtype:\"93\"`\n\tAdditionalBytes uint32\n}\n\n// See RFC 4252, section 7\nconst msgUserAuthPubKeyOk = 60\n\ntype userAuthPubKeyOkMsg struct {\n\tAlgo   string `sshtype:\"60\"`\n\tPubKey []byte\n}\n\n// typeTags returns the possible type bytes for the given reflect.Type, which\n// should be a struct. The possible values are separated by a '|' character.\nfunc typeTags(structType reflect.Type) (tags []byte) {\n\ttagStr := structType.Field(0).Tag.Get(\"sshtype\")\n\n\tfor _, tag := range strings.Split(tagStr, \"|\") {\n\t\ti, err := strconv.Atoi(tag)\n\t\tif err == nil {\n\t\t\ttags = append(tags, byte(i))\n\t\t}\n\t}\n\n\treturn tags\n}\n\nfunc fieldError(t reflect.Type, field int, problem string) error {\n\tif problem != \"\" {\n\t\tproblem = \": \" + problem\n\t}\n\treturn fmt.Errorf(\"ssh: unmarshal error for field %s of type %s%s\", t.Field(field).Name, t.Name(), problem)\n}\n\nvar errShortRead = errors.New(\"ssh: short read\")\n\n// Unmarshal parses data in SSH wire format into a structure. The out\n// argument should be a pointer to struct. If the first member of the\n// struct has the \"sshtype\" tag set to a '|'-separated set of numbers\n// in decimal, the packet must start with one of those numbers. In\n// case of error, Unmarshal returns a ParseError or\n// UnexpectedMessageError.\nfunc Unmarshal(data []byte, out interface{}) error {\n\tv := reflect.ValueOf(out).Elem()\n\tstructType := v.Type()\n\texpectedTypes := typeTags(structType)\n\n\tvar expectedType byte\n\tif len(expectedTypes) > 0 {\n\t\texpectedType = expectedTypes[0]\n\t}\n\n\tif len(data) == 0 {\n\t\treturn parseError(expectedType)\n\t}\n\n\tif len(expectedTypes) > 0 {\n\t\tgoodType := false\n\t\tfor _, e := range expectedTypes {\n\t\t\tif e > 0 && data[0] == e {\n\t\t\t\tgoodType = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !goodType {\n\t\t\treturn fmt.Errorf(\"ssh: unexpected message type %d (expected one of %v)\", data[0], expectedTypes)\n\t\t}\n\t\tdata = data[1:]\n\t}\n\n\tvar ok bool\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tfield := v.Field(i)\n\t\tt := field.Type()\n\t\tswitch t.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tif len(data) < 1 {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetBool(data[0] != 0)\n\t\t\tdata = data[1:]\n\t\tcase reflect.Array:\n\t\t\tif t.Elem().Kind() != reflect.Uint8 {\n\t\t\t\treturn fieldError(structType, i, \"array of unsupported type\")\n\t\t\t}\n\t\t\tif len(data) < t.Len() {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfor j, n := 0, t.Len(); j < n; j++ {\n\t\t\t\tfield.Index(j).Set(reflect.ValueOf(data[j]))\n\t\t\t}\n\t\t\tdata = data[t.Len():]\n\t\tcase reflect.Uint64:\n\t\t\tvar u64 uint64\n\t\t\tif u64, data, ok = parseUint64(data); !ok {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(u64)\n\t\tcase reflect.Uint32:\n\t\t\tvar u32 uint32\n\t\t\tif u32, data, ok = parseUint32(data); !ok {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(uint64(u32))\n\t\tcase reflect.Uint8:\n\t\t\tif len(data) < 1 {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(uint64(data[0]))\n\t\t\tdata = data[1:]\n\t\tcase reflect.String:\n\t\t\tvar s []byte\n\t\t\tif s, data, ok = parseString(data); !ok {\n\t\t\t\treturn fieldError(structType, i, \"\")\n\t\t\t}\n\t\t\tfield.SetString(string(s))\n\t\tcase reflect.Slice:\n\t\t\tswitch t.Elem().Kind() {\n\t\t\tcase reflect.Uint8:\n\t\t\t\tif structType.Field(i).Tag.Get(\"ssh\") == \"rest\" {\n\t\t\t\t\tfield.Set(reflect.ValueOf(data))\n\t\t\t\t\tdata = nil\n\t\t\t\t} else {\n\t\t\t\t\tvar s []byte\n\t\t\t\t\tif s, data, ok = parseString(data); !ok {\n\t\t\t\t\t\treturn errShortRead\n\t\t\t\t\t}\n\t\t\t\t\tfield.Set(reflect.ValueOf(s))\n\t\t\t\t}\n\t\t\tcase reflect.String:\n\t\t\t\tvar nl []string\n\t\t\t\tif nl, data, ok = parseNameList(data); !ok {\n\t\t\t\t\treturn errShortRead\n\t\t\t\t}\n\t\t\t\tfield.Set(reflect.ValueOf(nl))\n\t\t\tdefault:\n\t\t\t\treturn fieldError(structType, i, \"slice of unsupported type\")\n\t\t\t}\n\t\tcase reflect.Ptr:\n\t\t\tif t == bigIntType {\n\t\t\t\tvar n *big.Int\n\t\t\t\tif n, data, ok = parseInt(data); !ok {\n\t\t\t\t\treturn errShortRead\n\t\t\t\t}\n\t\t\t\tfield.Set(reflect.ValueOf(n))\n\t\t\t} else {\n\t\t\t\treturn fieldError(structType, i, \"pointer to unsupported type\")\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fieldError(structType, i, fmt.Sprintf(\"unsupported type: %v\", t))\n\t\t}\n\t}\n\n\tif len(data) != 0 {\n\t\treturn parseError(expectedType)\n\t}\n\n\treturn nil\n}\n\n// Marshal serializes the message in msg to SSH wire format.  The msg\n// argument should be a struct or pointer to struct. If the first\n// member has the \"sshtype\" tag set to a number in decimal, that\n// number is prepended to the result. If the last of member has the\n// \"ssh\" tag set to \"rest\", its contents are appended to the output.\nfunc Marshal(msg interface{}) []byte {\n\tout := make([]byte, 0, 64)\n\treturn marshalStruct(out, msg)\n}\n\nfunc marshalStruct(out []byte, msg interface{}) []byte {\n\tv := reflect.Indirect(reflect.ValueOf(msg))\n\tmsgTypes := typeTags(v.Type())\n\tif len(msgTypes) > 0 {\n\t\tout = append(out, msgTypes[0])\n\t}\n\n\tfor i, n := 0, v.NumField(); i < n; i++ {\n\t\tfield := v.Field(i)\n\t\tswitch t := field.Type(); t.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tvar v uint8\n\t\t\tif field.Bool() {\n\t\t\t\tv = 1\n\t\t\t}\n\t\t\tout = append(out, v)\n\t\tcase reflect.Array:\n\t\t\tif t.Elem().Kind() != reflect.Uint8 {\n\t\t\t\tpanic(fmt.Sprintf(\"array of non-uint8 in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\t\tfor j, l := 0, t.Len(); j < l; j++ {\n\t\t\t\tout = append(out, uint8(field.Index(j).Uint()))\n\t\t\t}\n\t\tcase reflect.Uint32:\n\t\t\tout = appendU32(out, uint32(field.Uint()))\n\t\tcase reflect.Uint64:\n\t\t\tout = appendU64(out, uint64(field.Uint()))\n\t\tcase reflect.Uint8:\n\t\t\tout = append(out, uint8(field.Uint()))\n\t\tcase reflect.String:\n\t\t\ts := field.String()\n\t\t\tout = appendInt(out, len(s))\n\t\t\tout = append(out, s...)\n\t\tcase reflect.Slice:\n\t\t\tswitch t.Elem().Kind() {\n\t\t\tcase reflect.Uint8:\n\t\t\t\tif v.Type().Field(i).Tag.Get(\"ssh\") != \"rest\" {\n\t\t\t\t\tout = appendInt(out, field.Len())\n\t\t\t\t}\n\t\t\t\tout = append(out, field.Bytes()...)\n\t\t\tcase reflect.String:\n\t\t\t\toffset := len(out)\n\t\t\t\tout = appendU32(out, 0)\n\t\t\t\tif n := field.Len(); n > 0 {\n\t\t\t\t\tfor j := 0; j < n; j++ {\n\t\t\t\t\t\tf := field.Index(j)\n\t\t\t\t\t\tif j != 0 {\n\t\t\t\t\t\t\tout = append(out, ',')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tout = append(out, f.String()...)\n\t\t\t\t\t}\n\t\t\t\t\t// overwrite length value\n\t\t\t\t\tbinary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4))\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"slice of unknown type in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\tcase reflect.Ptr:\n\t\t\tif t == bigIntType {\n\t\t\t\tvar n *big.Int\n\t\t\t\tnValue := reflect.ValueOf(&n)\n\t\t\t\tnValue.Elem().Set(field)\n\t\t\t\tneeded := intLength(n)\n\t\t\t\toldLength := len(out)\n\n\t\t\t\tif cap(out)-len(out) < needed {\n\t\t\t\t\tnewOut := make([]byte, len(out), 2*(len(out)+needed))\n\t\t\t\t\tcopy(newOut, out)\n\t\t\t\t\tout = newOut\n\t\t\t\t}\n\t\t\t\tout = out[:oldLength+needed]\n\t\t\t\tmarshalInt(out[oldLength:], n)\n\t\t\t} else {\n\t\t\t\tpanic(fmt.Sprintf(\"pointer to unknown type in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out\n}\n\nvar bigOne = big.NewInt(1)\n\nfunc parseString(in []byte) (out, rest []byte, ok bool) {\n\tif len(in) < 4 {\n\t\treturn\n\t}\n\tlength := binary.BigEndian.Uint32(in)\n\tin = in[4:]\n\tif uint32(len(in)) < length {\n\t\treturn\n\t}\n\tout = in[:length]\n\trest = in[length:]\n\tok = true\n\treturn\n}\n\nvar (\n\tcomma         = []byte{','}\n\temptyNameList = []string{}\n)\n\nfunc parseNameList(in []byte) (out []string, rest []byte, ok bool) {\n\tcontents, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\tif len(contents) == 0 {\n\t\tout = emptyNameList\n\t\treturn\n\t}\n\tparts := bytes.Split(contents, comma)\n\tout = make([]string, len(parts))\n\tfor i, part := range parts {\n\t\tout[i] = string(part)\n\t}\n\treturn\n}\n\nfunc parseInt(in []byte) (out *big.Int, rest []byte, ok bool) {\n\tcontents, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\tout = new(big.Int)\n\n\tif len(contents) > 0 && contents[0]&0x80 == 0x80 {\n\t\t// This is a negative number\n\t\tnotBytes := make([]byte, len(contents))\n\t\tfor i := range notBytes {\n\t\t\tnotBytes[i] = ^contents[i]\n\t\t}\n\t\tout.SetBytes(notBytes)\n\t\tout.Add(out, bigOne)\n\t\tout.Neg(out)\n\t} else {\n\t\t// Positive number\n\t\tout.SetBytes(contents)\n\t}\n\tok = true\n\treturn\n}\n\nfunc parseUint32(in []byte) (uint32, []byte, bool) {\n\tif len(in) < 4 {\n\t\treturn 0, nil, false\n\t}\n\treturn binary.BigEndian.Uint32(in), in[4:], true\n}\n\nfunc parseUint64(in []byte) (uint64, []byte, bool) {\n\tif len(in) < 8 {\n\t\treturn 0, nil, false\n\t}\n\treturn binary.BigEndian.Uint64(in), in[8:], true\n}\n\nfunc intLength(n *big.Int) int {\n\tlength := 4 /* length bytes */\n\tif n.Sign() < 0 {\n\t\tnMinus1 := new(big.Int).Neg(n)\n\t\tnMinus1.Sub(nMinus1, bigOne)\n\t\tbitLen := nMinus1.BitLen()\n\t\tif bitLen%8 == 0 {\n\t\t\t// The number will need 0xff padding\n\t\t\tlength++\n\t\t}\n\t\tlength += (bitLen + 7) / 8\n\t} else if n.Sign() == 0 {\n\t\t// A zero is the zero length string\n\t} else {\n\t\tbitLen := n.BitLen()\n\t\tif bitLen%8 == 0 {\n\t\t\t// The number will need 0x00 padding\n\t\t\tlength++\n\t\t}\n\t\tlength += (bitLen + 7) / 8\n\t}\n\n\treturn length\n}\n\nfunc marshalUint32(to []byte, n uint32) []byte {\n\tbinary.BigEndian.PutUint32(to, n)\n\treturn to[4:]\n}\n\nfunc marshalUint64(to []byte, n uint64) []byte {\n\tbinary.BigEndian.PutUint64(to, n)\n\treturn to[8:]\n}\n\nfunc marshalInt(to []byte, n *big.Int) []byte {\n\tlengthBytes := to\n\tto = to[4:]\n\tlength := 0\n\n\tif n.Sign() < 0 {\n\t\t// A negative number has to be converted to two's-complement\n\t\t// form. So we'll subtract 1 and invert. If the\n\t\t// most-significant-bit isn't set then we'll need to pad the\n\t\t// beginning with 0xff in order to keep the number negative.\n\t\tnMinus1 := new(big.Int).Neg(n)\n\t\tnMinus1.Sub(nMinus1, bigOne)\n\t\tbytes := nMinus1.Bytes()\n\t\tfor i := range bytes {\n\t\t\tbytes[i] ^= 0xff\n\t\t}\n\t\tif len(bytes) == 0 || bytes[0]&0x80 == 0 {\n\t\t\tto[0] = 0xff\n\t\t\tto = to[1:]\n\t\t\tlength++\n\t\t}\n\t\tnBytes := copy(to, bytes)\n\t\tto = to[nBytes:]\n\t\tlength += nBytes\n\t} else if n.Sign() == 0 {\n\t\t// A zero is the zero length string\n\t} else {\n\t\tbytes := n.Bytes()\n\t\tif len(bytes) > 0 && bytes[0]&0x80 != 0 {\n\t\t\t// We'll have to pad this with a 0x00 in order to\n\t\t\t// stop it looking like a negative number.\n\t\t\tto[0] = 0\n\t\t\tto = to[1:]\n\t\t\tlength++\n\t\t}\n\t\tnBytes := copy(to, bytes)\n\t\tto = to[nBytes:]\n\t\tlength += nBytes\n\t}\n\n\tlengthBytes[0] = byte(length >> 24)\n\tlengthBytes[1] = byte(length >> 16)\n\tlengthBytes[2] = byte(length >> 8)\n\tlengthBytes[3] = byte(length)\n\treturn to\n}\n\nfunc writeInt(w io.Writer, n *big.Int) {\n\tlength := intLength(n)\n\tbuf := make([]byte, length)\n\tmarshalInt(buf, n)\n\tw.Write(buf)\n}\n\nfunc writeString(w io.Writer, s []byte) {\n\tvar lengthBytes [4]byte\n\tlengthBytes[0] = byte(len(s) >> 24)\n\tlengthBytes[1] = byte(len(s) >> 16)\n\tlengthBytes[2] = byte(len(s) >> 8)\n\tlengthBytes[3] = byte(len(s))\n\tw.Write(lengthBytes[:])\n\tw.Write(s)\n}\n\nfunc stringLength(n int) int {\n\treturn 4 + n\n}\n\nfunc marshalString(to []byte, s []byte) []byte {\n\tto[0] = byte(len(s) >> 24)\n\tto[1] = byte(len(s) >> 16)\n\tto[2] = byte(len(s) >> 8)\n\tto[3] = byte(len(s))\n\tto = to[4:]\n\tcopy(to, s)\n\treturn to[len(s):]\n}\n\nvar bigIntType = reflect.TypeOf((*big.Int)(nil))\n\n// Decode a packet into its corresponding message.\nfunc decode(packet []byte) (interface{}, error) {\n\tvar msg interface{}\n\tswitch packet[0] {\n\tcase msgDisconnect:\n\t\tmsg = new(disconnectMsg)\n\tcase msgServiceRequest:\n\t\tmsg = new(serviceRequestMsg)\n\tcase msgServiceAccept:\n\t\tmsg = new(serviceAcceptMsg)\n\tcase msgKexInit:\n\t\tmsg = new(kexInitMsg)\n\tcase msgKexDHInit:\n\t\tmsg = new(kexDHInitMsg)\n\tcase msgKexDHReply:\n\t\tmsg = new(kexDHReplyMsg)\n\tcase msgUserAuthRequest:\n\t\tmsg = new(userAuthRequestMsg)\n\tcase msgUserAuthSuccess:\n\t\treturn new(userAuthSuccessMsg), nil\n\tcase msgUserAuthFailure:\n\t\tmsg = new(userAuthFailureMsg)\n\tcase msgUserAuthPubKeyOk:\n\t\tmsg = new(userAuthPubKeyOkMsg)\n\tcase msgGlobalRequest:\n\t\tmsg = new(globalRequestMsg)\n\tcase msgRequestSuccess:\n\t\tmsg = new(globalRequestSuccessMsg)\n\tcase msgRequestFailure:\n\t\tmsg = new(globalRequestFailureMsg)\n\tcase msgChannelOpen:\n\t\tmsg = new(channelOpenMsg)\n\tcase msgChannelData:\n\t\tmsg = new(channelDataMsg)\n\tcase msgChannelOpenConfirm:\n\t\tmsg = new(channelOpenConfirmMsg)\n\tcase msgChannelOpenFailure:\n\t\tmsg = new(channelOpenFailureMsg)\n\tcase msgChannelWindowAdjust:\n\t\tmsg = new(windowAdjustMsg)\n\tcase msgChannelEOF:\n\t\tmsg = new(channelEOFMsg)\n\tcase msgChannelClose:\n\t\tmsg = new(channelCloseMsg)\n\tcase msgChannelRequest:\n\t\tmsg = new(channelRequestMsg)\n\tcase msgChannelSuccess:\n\t\tmsg = new(channelRequestSuccessMsg)\n\tcase msgChannelFailure:\n\t\tmsg = new(channelRequestFailureMsg)\n\tdefault:\n\t\treturn nil, unexpectedMessageError(0, packet[0])\n\t}\n\tif err := Unmarshal(packet, msg); err != nil {\n\t\treturn nil, err\n\t}\n\treturn msg, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/mux.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 ssh\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// debugMux, if set, causes messages in the connection protocol to be\n// logged.\nconst debugMux = false\n\n// chanList is a thread safe channel list.\ntype chanList struct {\n\t// protects concurrent access to chans\n\tsync.Mutex\n\n\t// chans are indexed by the local id of the channel, which the\n\t// other side should send in the PeersId field.\n\tchans []*channel\n\n\t// This is a debugging aid: it offsets all IDs by this\n\t// amount. This helps distinguish otherwise identical\n\t// server/client muxes\n\toffset uint32\n}\n\n// Assigns a channel ID to the given channel.\nfunc (c *chanList) add(ch *channel) uint32 {\n\tc.Lock()\n\tdefer c.Unlock()\n\tfor i := range c.chans {\n\t\tif c.chans[i] == nil {\n\t\t\tc.chans[i] = ch\n\t\t\treturn uint32(i) + c.offset\n\t\t}\n\t}\n\tc.chans = append(c.chans, ch)\n\treturn uint32(len(c.chans)-1) + c.offset\n}\n\n// getChan returns the channel for the given ID.\nfunc (c *chanList) getChan(id uint32) *channel {\n\tid -= c.offset\n\n\tc.Lock()\n\tdefer c.Unlock()\n\tif id < uint32(len(c.chans)) {\n\t\treturn c.chans[id]\n\t}\n\treturn nil\n}\n\nfunc (c *chanList) remove(id uint32) {\n\tid -= c.offset\n\tc.Lock()\n\tif id < uint32(len(c.chans)) {\n\t\tc.chans[id] = nil\n\t}\n\tc.Unlock()\n}\n\n// dropAll forgets all channels it knows, returning them in a slice.\nfunc (c *chanList) dropAll() []*channel {\n\tc.Lock()\n\tdefer c.Unlock()\n\tvar r []*channel\n\n\tfor _, ch := range c.chans {\n\t\tif ch == nil {\n\t\t\tcontinue\n\t\t}\n\t\tr = append(r, ch)\n\t}\n\tc.chans = nil\n\treturn r\n}\n\n// mux represents the state for the SSH connection protocol, which\n// multiplexes many channels onto a single packet transport.\ntype mux struct {\n\tconn     packetConn\n\tchanList chanList\n\n\tincomingChannels chan NewChannel\n\n\tglobalSentMu     sync.Mutex\n\tglobalResponses  chan interface{}\n\tincomingRequests chan *Request\n\n\terrCond *sync.Cond\n\terr     error\n}\n\n// When debugging, each new chanList instantiation has a different\n// offset.\nvar globalOff uint32\n\nfunc (m *mux) Wait() error {\n\tm.errCond.L.Lock()\n\tdefer m.errCond.L.Unlock()\n\tfor m.err == nil {\n\t\tm.errCond.Wait()\n\t}\n\treturn m.err\n}\n\n// newMux returns a mux that runs over the given connection.\nfunc newMux(p packetConn) *mux {\n\tm := &mux{\n\t\tconn:             p,\n\t\tincomingChannels: make(chan NewChannel, chanSize),\n\t\tglobalResponses:  make(chan interface{}, 1),\n\t\tincomingRequests: make(chan *Request, chanSize),\n\t\terrCond:          newCond(),\n\t}\n\tif debugMux {\n\t\tm.chanList.offset = atomic.AddUint32(&globalOff, 1)\n\t}\n\n\tgo m.loop()\n\treturn m\n}\n\nfunc (m *mux) sendMessage(msg interface{}) error {\n\tp := Marshal(msg)\n\tif debugMux {\n\t\tlog.Printf(\"send global(%d): %#v\", m.chanList.offset, msg)\n\t}\n\treturn m.conn.writePacket(p)\n}\n\nfunc (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) {\n\tif wantReply {\n\t\tm.globalSentMu.Lock()\n\t\tdefer m.globalSentMu.Unlock()\n\t}\n\n\tif err := m.sendMessage(globalRequestMsg{\n\t\tType:      name,\n\t\tWantReply: wantReply,\n\t\tData:      payload,\n\t}); err != nil {\n\t\treturn false, nil, err\n\t}\n\n\tif !wantReply {\n\t\treturn false, nil, nil\n\t}\n\n\tmsg, ok := <-m.globalResponses\n\tif !ok {\n\t\treturn false, nil, io.EOF\n\t}\n\tswitch msg := msg.(type) {\n\tcase *globalRequestFailureMsg:\n\t\treturn false, msg.Data, nil\n\tcase *globalRequestSuccessMsg:\n\t\treturn true, msg.Data, nil\n\tdefault:\n\t\treturn false, nil, fmt.Errorf(\"ssh: unexpected response to request: %#v\", msg)\n\t}\n}\n\n// ackRequest must be called after processing a global request that\n// has WantReply set.\nfunc (m *mux) ackRequest(ok bool, data []byte) error {\n\tif ok {\n\t\treturn m.sendMessage(globalRequestSuccessMsg{Data: data})\n\t}\n\treturn m.sendMessage(globalRequestFailureMsg{Data: data})\n}\n\nfunc (m *mux) Close() error {\n\treturn m.conn.Close()\n}\n\n// loop runs the connection machine. It will process packets until an\n// error is encountered. To synchronize on loop exit, use mux.Wait.\nfunc (m *mux) loop() {\n\tvar err error\n\tfor err == nil {\n\t\terr = m.onePacket()\n\t}\n\n\tfor _, ch := range m.chanList.dropAll() {\n\t\tch.close()\n\t}\n\n\tclose(m.incomingChannels)\n\tclose(m.incomingRequests)\n\tclose(m.globalResponses)\n\n\tm.conn.Close()\n\n\tm.errCond.L.Lock()\n\tm.err = err\n\tm.errCond.Broadcast()\n\tm.errCond.L.Unlock()\n\n\tif debugMux {\n\t\tlog.Println(\"loop exit\", err)\n\t}\n}\n\n// onePacket reads and processes one packet.\nfunc (m *mux) onePacket() error {\n\tpacket, err := m.conn.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif debugMux {\n\t\tif packet[0] == msgChannelData || packet[0] == msgChannelExtendedData {\n\t\t\tlog.Printf(\"decoding(%d): data packet - %d bytes\", m.chanList.offset, len(packet))\n\t\t} else {\n\t\t\tp, _ := decode(packet)\n\t\t\tlog.Printf(\"decoding(%d): %d %#v - %d bytes\", m.chanList.offset, packet[0], p, len(packet))\n\t\t}\n\t}\n\n\tswitch packet[0] {\n\tcase msgChannelOpen:\n\t\treturn m.handleChannelOpen(packet)\n\tcase msgGlobalRequest, msgRequestSuccess, msgRequestFailure:\n\t\treturn m.handleGlobalPacket(packet)\n\t}\n\n\t// assume a channel packet.\n\tif len(packet) < 5 {\n\t\treturn parseError(packet[0])\n\t}\n\tid := binary.BigEndian.Uint32(packet[1:])\n\tch := m.chanList.getChan(id)\n\tif ch == nil {\n\t\treturn fmt.Errorf(\"ssh: invalid channel %d\", id)\n\t}\n\n\treturn ch.handlePacket(packet)\n}\n\nfunc (m *mux) handleGlobalPacket(packet []byte) error {\n\tmsg, err := decode(packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch msg := msg.(type) {\n\tcase *globalRequestMsg:\n\t\tm.incomingRequests <- &Request{\n\t\t\tType:      msg.Type,\n\t\t\tWantReply: msg.WantReply,\n\t\t\tPayload:   msg.Data,\n\t\t\tmux:       m,\n\t\t}\n\tcase *globalRequestSuccessMsg, *globalRequestFailureMsg:\n\t\tm.globalResponses <- msg\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"not a global message %#v\", msg))\n\t}\n\n\treturn nil\n}\n\n// handleChannelOpen schedules a channel to be Accept()ed.\nfunc (m *mux) handleChannelOpen(packet []byte) error {\n\tvar msg channelOpenMsg\n\tif err := Unmarshal(packet, &msg); err != nil {\n\t\treturn err\n\t}\n\n\tif msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {\n\t\tfailMsg := channelOpenFailureMsg{\n\t\t\tPeersId:  msg.PeersId,\n\t\t\tReason:   ConnectionFailed,\n\t\t\tMessage:  \"invalid request\",\n\t\t\tLanguage: \"en_US.UTF-8\",\n\t\t}\n\t\treturn m.sendMessage(failMsg)\n\t}\n\n\tc := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData)\n\tc.remoteId = msg.PeersId\n\tc.maxRemotePayload = msg.MaxPacketSize\n\tc.remoteWin.add(msg.PeersWindow)\n\tm.incomingChannels <- c\n\treturn nil\n}\n\nfunc (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) {\n\tch, err := m.openChannel(chanType, extra)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn ch, ch.incomingRequests, nil\n}\n\nfunc (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {\n\tch := m.newChannel(chanType, channelOutbound, extra)\n\n\tch.maxIncomingPayload = channelMaxPacket\n\n\topen := channelOpenMsg{\n\t\tChanType:         chanType,\n\t\tPeersWindow:      ch.myWindow,\n\t\tMaxPacketSize:    ch.maxIncomingPayload,\n\t\tTypeSpecificData: extra,\n\t\tPeersId:          ch.localId,\n\t}\n\tif err := m.sendMessage(open); err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch msg := (<-ch.msg).(type) {\n\tcase *channelOpenConfirmMsg:\n\t\treturn ch, nil\n\tcase *channelOpenFailureMsg:\n\t\treturn nil, &OpenChannelError{msg.Reason, msg.Message}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unexpected packet in response to channel open: %T\", msg)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/server.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 ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// The Permissions type holds fine-grained permissions that are\n// specific to a user or a specific authentication method for a\n// user. Permissions, except for \"source-address\", must be enforced in\n// the server application layer, after successful authentication. The\n// Permissions are passed on in ServerConn so a server implementation\n// can honor them.\ntype Permissions struct {\n\t// Critical options restrict default permissions. Common\n\t// restrictions are \"source-address\" and \"force-command\". If\n\t// the server cannot enforce the restriction, or does not\n\t// recognize it, the user should not authenticate.\n\tCriticalOptions map[string]string\n\n\t// Extensions are extra functionality that the server may\n\t// offer on authenticated connections. Common extensions are\n\t// \"permit-agent-forwarding\", \"permit-X11-forwarding\". Lack of\n\t// support for an extension does not preclude authenticating a\n\t// user.\n\tExtensions map[string]string\n}\n\n// ServerConfig holds server specific configuration data.\ntype ServerConfig struct {\n\t// Config contains configuration shared between client and server.\n\tConfig\n\n\thostKeys []Signer\n\n\t// NoClientAuth is true if clients are allowed to connect without\n\t// authenticating.\n\tNoClientAuth bool\n\n\t// MaxAuthTries specifies the maximum number of authentication attempts\n\t// permitted per connection. If set to a negative number, the number of\n\t// attempts are unlimited. If set to zero, the number of attempts are limited\n\t// to 6.\n\tMaxAuthTries int\n\n\t// PasswordCallback, if non-nil, is called when a user\n\t// attempts to authenticate using a password.\n\tPasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error)\n\n\t// PublicKeyCallback, if non-nil, is called when a client attempts public\n\t// key authentication. It must return true if the given public key is\n\t// valid for the given user. For example, see CertChecker.Authenticate.\n\tPublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)\n\n\t// KeyboardInteractiveCallback, if non-nil, is called when\n\t// keyboard-interactive authentication is selected (RFC\n\t// 4256). The client object's Challenge function should be\n\t// used to query the user. The callback may offer multiple\n\t// Challenge rounds. To avoid information leaks, the client\n\t// should be presented a challenge even if the user is\n\t// unknown.\n\tKeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error)\n\n\t// AuthLogCallback, if non-nil, is called to log all authentication\n\t// attempts.\n\tAuthLogCallback func(conn ConnMetadata, method string, err error)\n\n\t// ServerVersion is the version identification string to announce in\n\t// the public handshake.\n\t// If empty, a reasonable default is used.\n\t// Note that RFC 4253 section 4.2 requires that this string start with\n\t// \"SSH-2.0-\".\n\tServerVersion string\n}\n\n// AddHostKey adds a private key as a host key. If an existing host\n// key exists with the same algorithm, it is overwritten. Each server\n// config must have at least one host key.\nfunc (s *ServerConfig) AddHostKey(key Signer) {\n\tfor i, k := range s.hostKeys {\n\t\tif k.PublicKey().Type() == key.PublicKey().Type() {\n\t\t\ts.hostKeys[i] = key\n\t\t\treturn\n\t\t}\n\t}\n\n\ts.hostKeys = append(s.hostKeys, key)\n}\n\n// cachedPubKey contains the results of querying whether a public key is\n// acceptable for a user.\ntype cachedPubKey struct {\n\tuser       string\n\tpubKeyData []byte\n\tresult     error\n\tperms      *Permissions\n}\n\nconst maxCachedPubKeys = 16\n\n// pubKeyCache caches tests for public keys.  Since SSH clients\n// will query whether a public key is acceptable before attempting to\n// authenticate with it, we end up with duplicate queries for public\n// key validity.  The cache only applies to a single ServerConn.\ntype pubKeyCache struct {\n\tkeys []cachedPubKey\n}\n\n// get returns the result for a given user/algo/key tuple.\nfunc (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {\n\tfor _, k := range c.keys {\n\t\tif k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) {\n\t\t\treturn k, true\n\t\t}\n\t}\n\treturn cachedPubKey{}, false\n}\n\n// add adds the given tuple to the cache.\nfunc (c *pubKeyCache) add(candidate cachedPubKey) {\n\tif len(c.keys) < maxCachedPubKeys {\n\t\tc.keys = append(c.keys, candidate)\n\t}\n}\n\n// ServerConn is an authenticated SSH connection, as seen from the\n// server\ntype ServerConn struct {\n\tConn\n\n\t// If the succeeding authentication callback returned a\n\t// non-nil Permissions pointer, it is stored here.\n\tPermissions *Permissions\n}\n\n// NewServerConn starts a new SSH server with c as the underlying\n// transport.  It starts with a handshake and, if the handshake is\n// unsuccessful, it closes the connection and returns an error.  The\n// Request and NewChannel channels must be serviced, or the connection\n// will hang.\nfunc NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) {\n\tif config.MaxAuthTries == 0 {\n\t\tconfig.MaxAuthTries = 6\n\t}\n\n\tfullConf := *config\n\tfullConf.SetDefaults()\n\ts := &connection{\n\t\tsshConn: sshConn{conn: c},\n\t}\n\tperms, err := s.serverHandshake(&fullConf)\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, err\n\t}\n\treturn &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil\n}\n\n// signAndMarshal signs the data with the appropriate algorithm,\n// and serializes the result in SSH wire format.\nfunc signAndMarshal(k Signer, rand io.Reader, data []byte) ([]byte, error) {\n\tsig, err := k.Sign(rand, data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn Marshal(sig), nil\n}\n\n// handshake performs key exchange and user authentication.\nfunc (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) {\n\tif len(config.hostKeys) == 0 {\n\t\treturn nil, errors.New(\"ssh: server has no host keys\")\n\t}\n\n\tif !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil && config.KeyboardInteractiveCallback == nil {\n\t\treturn nil, errors.New(\"ssh: no authentication methods configured but NoClientAuth is also false\")\n\t}\n\n\tif config.ServerVersion != \"\" {\n\t\ts.serverVersion = []byte(config.ServerVersion)\n\t} else {\n\t\ts.serverVersion = []byte(packageVersion)\n\t}\n\tvar err error\n\ts.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttr := newTransport(s.sshConn.conn, config.Rand, false /* not client */)\n\ts.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config)\n\n\tif err := s.transport.waitSession(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We just did the key change, so the session ID is established.\n\ts.sessionID = s.transport.getSessionID()\n\n\tvar packet []byte\n\tif packet, err = s.transport.readPacket(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar serviceRequest serviceRequestMsg\n\tif err = Unmarshal(packet, &serviceRequest); err != nil {\n\t\treturn nil, err\n\t}\n\tif serviceRequest.Service != serviceUserAuth {\n\t\treturn nil, errors.New(\"ssh: requested service '\" + serviceRequest.Service + \"' before authenticating\")\n\t}\n\tserviceAccept := serviceAcceptMsg{\n\t\tService: serviceUserAuth,\n\t}\n\tif err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil {\n\t\treturn nil, err\n\t}\n\n\tperms, err := s.serverAuthenticate(config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.mux = newMux(s.transport)\n\treturn perms, err\n}\n\nfunc isAcceptableAlgo(algo string) bool {\n\tswitch algo {\n\tcase KeyAlgoRSA, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoED25519,\n\t\tCertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc checkSourceAddress(addr net.Addr, sourceAddrs string) error {\n\tif addr == nil {\n\t\treturn errors.New(\"ssh: no address known for client, but source-address match required\")\n\t}\n\n\ttcpAddr, ok := addr.(*net.TCPAddr)\n\tif !ok {\n\t\treturn fmt.Errorf(\"ssh: remote address %v is not an TCP address when checking source-address match\", addr)\n\t}\n\n\tfor _, sourceAddr := range strings.Split(sourceAddrs, \",\") {\n\t\tif allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {\n\t\t\tif allowedIP.Equal(tcpAddr.IP) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t} else {\n\t\t\t_, ipNet, err := net.ParseCIDR(sourceAddr)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"ssh: error parsing source-address restriction %q: %v\", sourceAddr, err)\n\t\t\t}\n\n\t\t\tif ipNet.Contains(tcpAddr.IP) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"ssh: remote address %v is not allowed because of source-address restriction\", addr)\n}\n\nfunc (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) {\n\tsessionID := s.transport.getSessionID()\n\tvar cache pubKeyCache\n\tvar perms *Permissions\n\n\tauthFailures := 0\n\nuserAuthLoop:\n\tfor {\n\t\tif authFailures >= config.MaxAuthTries && config.MaxAuthTries > 0 {\n\t\t\tdiscMsg := &disconnectMsg{\n\t\t\t\tReason:  2,\n\t\t\t\tMessage: \"too many authentication failures\",\n\t\t\t}\n\n\t\t\tif err := s.transport.writePacket(Marshal(discMsg)); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn nil, discMsg\n\t\t}\n\n\t\tvar userAuthReq userAuthRequestMsg\n\t\tif packet, err := s.transport.readPacket(); err != nil {\n\t\t\treturn nil, err\n\t\t} else if err = Unmarshal(packet, &userAuthReq); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif userAuthReq.Service != serviceSSH {\n\t\t\treturn nil, errors.New(\"ssh: client attempted to negotiate for unknown service: \" + userAuthReq.Service)\n\t\t}\n\n\t\ts.user = userAuthReq.User\n\t\tperms = nil\n\t\tauthErr := errors.New(\"no auth passed yet\")\n\n\t\tswitch userAuthReq.Method {\n\t\tcase \"none\":\n\t\t\tif config.NoClientAuth {\n\t\t\t\tauthErr = nil\n\t\t\t}\n\n\t\t\t// allow initial attempt of 'none' without penalty\n\t\t\tif authFailures == 0 {\n\t\t\t\tauthFailures--\n\t\t\t}\n\t\tcase \"password\":\n\t\t\tif config.PasswordCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: password auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tpayload := userAuthReq.Payload\n\t\t\tif len(payload) < 1 || payload[0] != 0 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\tpayload = payload[1:]\n\t\t\tpassword, payload, ok := parseString(payload)\n\t\t\tif !ok || len(payload) > 0 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\n\t\t\tperms, authErr = config.PasswordCallback(s, password)\n\t\tcase \"keyboard-interactive\":\n\t\t\tif config.KeyboardInteractiveCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: keyboard-interactive auth not configubred\")\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tprompter := &sshClientKeyboardInteractive{s}\n\t\t\tperms, authErr = config.KeyboardInteractiveCallback(s, prompter.Challenge)\n\t\tcase \"publickey\":\n\t\t\tif config.PublicKeyCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: publickey auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tpayload := userAuthReq.Payload\n\t\t\tif len(payload) < 1 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\tisQuery := payload[0] == 0\n\t\t\tpayload = payload[1:]\n\t\t\talgoBytes, payload, ok := parseString(payload)\n\t\t\tif !ok {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\talgo := string(algoBytes)\n\t\t\tif !isAcceptableAlgo(algo) {\n\t\t\t\tauthErr = fmt.Errorf(\"ssh: algorithm %q not accepted\", algo)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tpubKeyData, payload, ok := parseString(payload)\n\t\t\tif !ok {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\n\t\t\tpubKey, err := ParsePublicKey(pubKeyData)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tcandidate, ok := cache.get(s.user, pubKeyData)\n\t\t\tif !ok {\n\t\t\t\tcandidate.user = s.user\n\t\t\t\tcandidate.pubKeyData = pubKeyData\n\t\t\t\tcandidate.perms, candidate.result = config.PublicKeyCallback(s, pubKey)\n\t\t\t\tif candidate.result == nil && candidate.perms != nil && candidate.perms.CriticalOptions != nil && candidate.perms.CriticalOptions[sourceAddressCriticalOption] != \"\" {\n\t\t\t\t\tcandidate.result = checkSourceAddress(\n\t\t\t\t\t\ts.RemoteAddr(),\n\t\t\t\t\t\tcandidate.perms.CriticalOptions[sourceAddressCriticalOption])\n\t\t\t\t}\n\t\t\t\tcache.add(candidate)\n\t\t\t}\n\n\t\t\tif isQuery {\n\t\t\t\t// The client can query if the given public key\n\t\t\t\t// would be okay.\n\n\t\t\t\tif len(payload) > 0 {\n\t\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t\t}\n\n\t\t\t\tif candidate.result == nil {\n\t\t\t\t\tokMsg := userAuthPubKeyOkMsg{\n\t\t\t\t\t\tAlgo:   algo,\n\t\t\t\t\t\tPubKey: pubKeyData,\n\t\t\t\t\t}\n\t\t\t\t\tif err = s.transport.writePacket(Marshal(&okMsg)); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tcontinue userAuthLoop\n\t\t\t\t}\n\t\t\t\tauthErr = candidate.result\n\t\t\t} else {\n\t\t\t\tsig, payload, ok := parseSignature(payload)\n\t\t\t\tif !ok || len(payload) > 0 {\n\t\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t\t}\n\t\t\t\t// Ensure the public key algo and signature algo\n\t\t\t\t// are supported.  Compare the private key\n\t\t\t\t// algorithm name that corresponds to algo with\n\t\t\t\t// sig.Format.  This is usually the same, but\n\t\t\t\t// for certs, the names differ.\n\t\t\t\tif !isAcceptableAlgo(sig.Format) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tsignedData := buildDataSignedForAuth(sessionID, userAuthReq, algoBytes, pubKeyData)\n\n\t\t\t\tif err := pubKey.Verify(signedData, sig); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tauthErr = candidate.result\n\t\t\t\tperms = candidate.perms\n\t\t\t}\n\t\tdefault:\n\t\t\tauthErr = fmt.Errorf(\"ssh: unknown method %q\", userAuthReq.Method)\n\t\t}\n\n\t\tif config.AuthLogCallback != nil {\n\t\t\tconfig.AuthLogCallback(s, userAuthReq.Method, authErr)\n\t\t}\n\n\t\tif authErr == nil {\n\t\t\tbreak userAuthLoop\n\t\t}\n\n\t\tauthFailures++\n\n\t\tvar failureMsg userAuthFailureMsg\n\t\tif config.PasswordCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"password\")\n\t\t}\n\t\tif config.PublicKeyCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"publickey\")\n\t\t}\n\t\tif config.KeyboardInteractiveCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"keyboard-interactive\")\n\t\t}\n\n\t\tif len(failureMsg.Methods) == 0 {\n\t\t\treturn nil, errors.New(\"ssh: no authentication methods configured but NoClientAuth is also false\")\n\t\t}\n\n\t\tif err := s.transport.writePacket(Marshal(&failureMsg)); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err := s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil {\n\t\treturn nil, err\n\t}\n\treturn perms, nil\n}\n\n// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by\n// asking the client on the other side of a ServerConn.\ntype sshClientKeyboardInteractive struct {\n\t*connection\n}\n\nfunc (c *sshClientKeyboardInteractive) Challenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) {\n\tif len(questions) != len(echos) {\n\t\treturn nil, errors.New(\"ssh: echos and questions must have equal length\")\n\t}\n\n\tvar prompts []byte\n\tfor i := range questions {\n\t\tprompts = appendString(prompts, questions[i])\n\t\tprompts = appendBool(prompts, echos[i])\n\t}\n\n\tif err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{\n\t\tInstruction: instruction,\n\t\tNumPrompts:  uint32(len(questions)),\n\t\tPrompts:     prompts,\n\t})); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.transport.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif packet[0] != msgUserAuthInfoResponse {\n\t\treturn nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0])\n\t}\n\tpacket = packet[1:]\n\n\tn, packet, ok := parseUint32(packet)\n\tif !ok || int(n) != len(questions) {\n\t\treturn nil, parseError(msgUserAuthInfoResponse)\n\t}\n\n\tfor i := uint32(0); i < n; i++ {\n\t\tans, rest, ok := parseString(packet)\n\t\tif !ok {\n\t\t\treturn nil, parseError(msgUserAuthInfoResponse)\n\t\t}\n\n\t\tanswers = append(answers, string(ans))\n\t\tpacket = rest\n\t}\n\tif len(packet) != 0 {\n\t\treturn nil, errors.New(\"ssh: junk at end of message\")\n\t}\n\n\treturn answers, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/session.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 ssh\n\n// Session implements an interactive session described in\n// \"RFC 4254, section 6\".\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"sync\"\n)\n\ntype Signal string\n\n// POSIX signals as listed in RFC 4254 Section 6.10.\nconst (\n\tSIGABRT Signal = \"ABRT\"\n\tSIGALRM Signal = \"ALRM\"\n\tSIGFPE  Signal = \"FPE\"\n\tSIGHUP  Signal = \"HUP\"\n\tSIGILL  Signal = \"ILL\"\n\tSIGINT  Signal = \"INT\"\n\tSIGKILL Signal = \"KILL\"\n\tSIGPIPE Signal = \"PIPE\"\n\tSIGQUIT Signal = \"QUIT\"\n\tSIGSEGV Signal = \"SEGV\"\n\tSIGTERM Signal = \"TERM\"\n\tSIGUSR1 Signal = \"USR1\"\n\tSIGUSR2 Signal = \"USR2\"\n)\n\nvar signals = map[Signal]int{\n\tSIGABRT: 6,\n\tSIGALRM: 14,\n\tSIGFPE:  8,\n\tSIGHUP:  1,\n\tSIGILL:  4,\n\tSIGINT:  2,\n\tSIGKILL: 9,\n\tSIGPIPE: 13,\n\tSIGQUIT: 3,\n\tSIGSEGV: 11,\n\tSIGTERM: 15,\n}\n\ntype TerminalModes map[uint8]uint32\n\n// POSIX terminal mode flags as listed in RFC 4254 Section 8.\nconst (\n\ttty_OP_END    = 0\n\tVINTR         = 1\n\tVQUIT         = 2\n\tVERASE        = 3\n\tVKILL         = 4\n\tVEOF          = 5\n\tVEOL          = 6\n\tVEOL2         = 7\n\tVSTART        = 8\n\tVSTOP         = 9\n\tVSUSP         = 10\n\tVDSUSP        = 11\n\tVREPRINT      = 12\n\tVWERASE       = 13\n\tVLNEXT        = 14\n\tVFLUSH        = 15\n\tVSWTCH        = 16\n\tVSTATUS       = 17\n\tVDISCARD      = 18\n\tIGNPAR        = 30\n\tPARMRK        = 31\n\tINPCK         = 32\n\tISTRIP        = 33\n\tINLCR         = 34\n\tIGNCR         = 35\n\tICRNL         = 36\n\tIUCLC         = 37\n\tIXON          = 38\n\tIXANY         = 39\n\tIXOFF         = 40\n\tIMAXBEL       = 41\n\tISIG          = 50\n\tICANON        = 51\n\tXCASE         = 52\n\tECHO          = 53\n\tECHOE         = 54\n\tECHOK         = 55\n\tECHONL        = 56\n\tNOFLSH        = 57\n\tTOSTOP        = 58\n\tIEXTEN        = 59\n\tECHOCTL       = 60\n\tECHOKE        = 61\n\tPENDIN        = 62\n\tOPOST         = 70\n\tOLCUC         = 71\n\tONLCR         = 72\n\tOCRNL         = 73\n\tONOCR         = 74\n\tONLRET        = 75\n\tCS7           = 90\n\tCS8           = 91\n\tPARENB        = 92\n\tPARODD        = 93\n\tTTY_OP_ISPEED = 128\n\tTTY_OP_OSPEED = 129\n)\n\n// A Session represents a connection to a remote command or shell.\ntype Session struct {\n\t// Stdin specifies the remote process's standard input.\n\t// If Stdin is nil, the remote process reads from an empty\n\t// bytes.Buffer.\n\tStdin io.Reader\n\n\t// Stdout and Stderr specify the remote process's standard\n\t// output and error.\n\t//\n\t// If either is nil, Run connects the corresponding file\n\t// descriptor to an instance of ioutil.Discard. There is a\n\t// fixed amount of buffering that is shared for the two streams.\n\t// If either blocks it may eventually cause the remote\n\t// command to block.\n\tStdout io.Writer\n\tStderr io.Writer\n\n\tch        Channel // the channel backing this session\n\tstarted   bool    // true once Start, Run or Shell is invoked.\n\tcopyFuncs []func() error\n\terrors    chan error // one send per copyFunc\n\n\t// true if pipe method is active\n\tstdinpipe, stdoutpipe, stderrpipe bool\n\n\t// stdinPipeWriter is non-nil if StdinPipe has not been called\n\t// and Stdin was specified by the user; it is the write end of\n\t// a pipe connecting Session.Stdin to the stdin channel.\n\tstdinPipeWriter io.WriteCloser\n\n\texitStatus chan error\n}\n\n// SendRequest sends an out-of-band channel request on the SSH channel\n// underlying the session.\nfunc (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {\n\treturn s.ch.SendRequest(name, wantReply, payload)\n}\n\nfunc (s *Session) Close() error {\n\treturn s.ch.Close()\n}\n\n// RFC 4254 Section 6.4.\ntype setenvRequest struct {\n\tName  string\n\tValue string\n}\n\n// Setenv sets an environment variable that will be applied to any\n// command executed by Shell or Run.\nfunc (s *Session) Setenv(name, value string) error {\n\tmsg := setenvRequest{\n\t\tName:  name,\n\t\tValue: value,\n\t}\n\tok, err := s.ch.SendRequest(\"env\", true, Marshal(&msg))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: setenv failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.2.\ntype ptyRequestMsg struct {\n\tTerm     string\n\tColumns  uint32\n\tRows     uint32\n\tWidth    uint32\n\tHeight   uint32\n\tModelist string\n}\n\n// RequestPty requests the association of a pty with the session on the remote host.\nfunc (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error {\n\tvar tm []byte\n\tfor k, v := range termmodes {\n\t\tkv := struct {\n\t\t\tKey byte\n\t\t\tVal uint32\n\t\t}{k, v}\n\n\t\ttm = append(tm, Marshal(&kv)...)\n\t}\n\ttm = append(tm, tty_OP_END)\n\treq := ptyRequestMsg{\n\t\tTerm:     term,\n\t\tColumns:  uint32(w),\n\t\tRows:     uint32(h),\n\t\tWidth:    uint32(w * 8),\n\t\tHeight:   uint32(h * 8),\n\t\tModelist: string(tm),\n\t}\n\tok, err := s.ch.SendRequest(\"pty-req\", true, Marshal(&req))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: pty-req failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.5.\ntype subsystemRequestMsg struct {\n\tSubsystem string\n}\n\n// RequestSubsystem requests the association of a subsystem with the session on the remote host.\n// A subsystem is a predefined command that runs in the background when the ssh session is initiated\nfunc (s *Session) RequestSubsystem(subsystem string) error {\n\tmsg := subsystemRequestMsg{\n\t\tSubsystem: subsystem,\n\t}\n\tok, err := s.ch.SendRequest(\"subsystem\", true, Marshal(&msg))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: subsystem request failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.9.\ntype signalMsg struct {\n\tSignal string\n}\n\n// Signal sends the given signal to the remote process.\n// sig is one of the SIG* constants.\nfunc (s *Session) Signal(sig Signal) error {\n\tmsg := signalMsg{\n\t\tSignal: string(sig),\n\t}\n\n\t_, err := s.ch.SendRequest(\"signal\", false, Marshal(&msg))\n\treturn err\n}\n\n// RFC 4254 Section 6.5.\ntype execMsg struct {\n\tCommand string\n}\n\n// Start runs cmd on the remote host. Typically, the remote\n// server passes cmd to the shell for interpretation.\n// A Session only accepts one call to Run, Start or Shell.\nfunc (s *Session) Start(cmd string) error {\n\tif s.started {\n\t\treturn errors.New(\"ssh: session already started\")\n\t}\n\treq := execMsg{\n\t\tCommand: cmd,\n\t}\n\n\tok, err := s.ch.SendRequest(\"exec\", true, Marshal(&req))\n\tif err == nil && !ok {\n\t\terr = fmt.Errorf(\"ssh: command %v failed\", cmd)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.start()\n}\n\n// Run runs cmd on the remote host. Typically, the remote\n// server passes cmd to the shell for interpretation.\n// A Session only accepts one call to Run, Start, Shell, Output,\n// or CombinedOutput.\n//\n// The returned error is nil if the command runs, has no problems\n// copying stdin, stdout, and stderr, and exits with a zero exit\n// status.\n//\n// If the remote server does not send an exit status, an error of type\n// *ExitMissingError is returned. If the command completes\n// unsuccessfully or is interrupted by a signal, the error is of type\n// *ExitError. Other error types may be returned for I/O problems.\nfunc (s *Session) Run(cmd string) error {\n\terr := s.Start(cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.Wait()\n}\n\n// Output runs cmd on the remote host and returns its standard output.\nfunc (s *Session) Output(cmd string) ([]byte, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tvar b bytes.Buffer\n\ts.Stdout = &b\n\terr := s.Run(cmd)\n\treturn b.Bytes(), err\n}\n\ntype singleWriter struct {\n\tb  bytes.Buffer\n\tmu sync.Mutex\n}\n\nfunc (w *singleWriter) Write(p []byte) (int, error) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\treturn w.b.Write(p)\n}\n\n// CombinedOutput runs cmd on the remote host and returns its combined\n// standard output and standard error.\nfunc (s *Session) CombinedOutput(cmd string) ([]byte, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tif s.Stderr != nil {\n\t\treturn nil, errors.New(\"ssh: Stderr already set\")\n\t}\n\tvar b singleWriter\n\ts.Stdout = &b\n\ts.Stderr = &b\n\terr := s.Run(cmd)\n\treturn b.b.Bytes(), err\n}\n\n// Shell starts a login shell on the remote host. A Session only\n// accepts one call to Run, Start, Shell, Output, or CombinedOutput.\nfunc (s *Session) Shell() error {\n\tif s.started {\n\t\treturn errors.New(\"ssh: session already started\")\n\t}\n\n\tok, err := s.ch.SendRequest(\"shell\", true, nil)\n\tif err == nil && !ok {\n\t\treturn errors.New(\"ssh: could not start shell\")\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.start()\n}\n\nfunc (s *Session) start() error {\n\ts.started = true\n\n\ttype F func(*Session)\n\tfor _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} {\n\t\tsetupFd(s)\n\t}\n\n\ts.errors = make(chan error, len(s.copyFuncs))\n\tfor _, fn := range s.copyFuncs {\n\t\tgo func(fn func() error) {\n\t\t\ts.errors <- fn()\n\t\t}(fn)\n\t}\n\treturn nil\n}\n\n// Wait waits for the remote command to exit.\n//\n// The returned error is nil if the command runs, has no problems\n// copying stdin, stdout, and stderr, and exits with a zero exit\n// status.\n//\n// If the remote server does not send an exit status, an error of type\n// *ExitMissingError is returned. If the command completes\n// unsuccessfully or is interrupted by a signal, the error is of type\n// *ExitError. Other error types may be returned for I/O problems.\nfunc (s *Session) Wait() error {\n\tif !s.started {\n\t\treturn errors.New(\"ssh: session not started\")\n\t}\n\twaitErr := <-s.exitStatus\n\n\tif s.stdinPipeWriter != nil {\n\t\ts.stdinPipeWriter.Close()\n\t}\n\tvar copyError error\n\tfor _ = range s.copyFuncs {\n\t\tif err := <-s.errors; err != nil && copyError == nil {\n\t\t\tcopyError = err\n\t\t}\n\t}\n\tif waitErr != nil {\n\t\treturn waitErr\n\t}\n\treturn copyError\n}\n\nfunc (s *Session) wait(reqs <-chan *Request) error {\n\twm := Waitmsg{status: -1}\n\t// Wait for msg channel to be closed before returning.\n\tfor msg := range reqs {\n\t\tswitch msg.Type {\n\t\tcase \"exit-status\":\n\t\t\twm.status = int(binary.BigEndian.Uint32(msg.Payload))\n\t\tcase \"exit-signal\":\n\t\t\tvar sigval struct {\n\t\t\t\tSignal     string\n\t\t\t\tCoreDumped bool\n\t\t\t\tError      string\n\t\t\t\tLang       string\n\t\t\t}\n\t\t\tif err := Unmarshal(msg.Payload, &sigval); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Must sanitize strings?\n\t\t\twm.signal = sigval.Signal\n\t\t\twm.msg = sigval.Error\n\t\t\twm.lang = sigval.Lang\n\t\tdefault:\n\t\t\t// This handles keepalives and matches\n\t\t\t// OpenSSH's behaviour.\n\t\t\tif msg.WantReply {\n\t\t\t\tmsg.Reply(false, nil)\n\t\t\t}\n\t\t}\n\t}\n\tif wm.status == 0 {\n\t\treturn nil\n\t}\n\tif wm.status == -1 {\n\t\t// exit-status was never sent from server\n\t\tif wm.signal == \"\" {\n\t\t\t// signal was not sent either.  RFC 4254\n\t\t\t// section 6.10 recommends against this\n\t\t\t// behavior, but it is allowed, so we let\n\t\t\t// clients handle it.\n\t\t\treturn &ExitMissingError{}\n\t\t}\n\t\twm.status = 128\n\t\tif _, ok := signals[Signal(wm.signal)]; ok {\n\t\t\twm.status += signals[Signal(wm.signal)]\n\t\t}\n\t}\n\n\treturn &ExitError{wm}\n}\n\n// ExitMissingError is returned if a session is torn down cleanly, but\n// the server sends no confirmation of the exit status.\ntype ExitMissingError struct{}\n\nfunc (e *ExitMissingError) Error() string {\n\treturn \"wait: remote command exited without exit status or exit signal\"\n}\n\nfunc (s *Session) stdin() {\n\tif s.stdinpipe {\n\t\treturn\n\t}\n\tvar stdin io.Reader\n\tif s.Stdin == nil {\n\t\tstdin = new(bytes.Buffer)\n\t} else {\n\t\tr, w := io.Pipe()\n\t\tgo func() {\n\t\t\t_, err := io.Copy(w, s.Stdin)\n\t\t\tw.CloseWithError(err)\n\t\t}()\n\t\tstdin, s.stdinPipeWriter = r, w\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.ch, stdin)\n\t\tif err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF {\n\t\t\terr = err1\n\t\t}\n\t\treturn err\n\t})\n}\n\nfunc (s *Session) stdout() {\n\tif s.stdoutpipe {\n\t\treturn\n\t}\n\tif s.Stdout == nil {\n\t\ts.Stdout = ioutil.Discard\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.Stdout, s.ch)\n\t\treturn err\n\t})\n}\n\nfunc (s *Session) stderr() {\n\tif s.stderrpipe {\n\t\treturn\n\t}\n\tif s.Stderr == nil {\n\t\ts.Stderr = ioutil.Discard\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.Stderr, s.ch.Stderr())\n\t\treturn err\n\t})\n}\n\n// sessionStdin reroutes Close to CloseWrite.\ntype sessionStdin struct {\n\tio.Writer\n\tch Channel\n}\n\nfunc (s *sessionStdin) Close() error {\n\treturn s.ch.CloseWrite()\n}\n\n// StdinPipe returns a pipe that will be connected to the\n// remote command's standard input when the command starts.\nfunc (s *Session) StdinPipe() (io.WriteCloser, error) {\n\tif s.Stdin != nil {\n\t\treturn nil, errors.New(\"ssh: Stdin already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StdinPipe after process started\")\n\t}\n\ts.stdinpipe = true\n\treturn &sessionStdin{s.ch, s.ch}, nil\n}\n\n// StdoutPipe returns a pipe that will be connected to the\n// remote command's standard output when the command starts.\n// There is a fixed amount of buffering that is shared between\n// stdout and stderr streams. If the StdoutPipe reader is\n// not serviced fast enough it may eventually cause the\n// remote command to block.\nfunc (s *Session) StdoutPipe() (io.Reader, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StdoutPipe after process started\")\n\t}\n\ts.stdoutpipe = true\n\treturn s.ch, nil\n}\n\n// StderrPipe returns a pipe that will be connected to the\n// remote command's standard error when the command starts.\n// There is a fixed amount of buffering that is shared between\n// stdout and stderr streams. If the StderrPipe reader is\n// not serviced fast enough it may eventually cause the\n// remote command to block.\nfunc (s *Session) StderrPipe() (io.Reader, error) {\n\tif s.Stderr != nil {\n\t\treturn nil, errors.New(\"ssh: Stderr already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StderrPipe after process started\")\n\t}\n\ts.stderrpipe = true\n\treturn s.ch.Stderr(), nil\n}\n\n// newSession returns a new interactive session on the remote host.\nfunc newSession(ch Channel, reqs <-chan *Request) (*Session, error) {\n\ts := &Session{\n\t\tch: ch,\n\t}\n\ts.exitStatus = make(chan error, 1)\n\tgo func() {\n\t\ts.exitStatus <- s.wait(reqs)\n\t}()\n\n\treturn s, nil\n}\n\n// An ExitError reports unsuccessful completion of a remote command.\ntype ExitError struct {\n\tWaitmsg\n}\n\nfunc (e *ExitError) Error() string {\n\treturn e.Waitmsg.String()\n}\n\n// Waitmsg stores the information about an exited remote command\n// as reported by Wait.\ntype Waitmsg struct {\n\tstatus int\n\tsignal string\n\tmsg    string\n\tlang   string\n}\n\n// ExitStatus returns the exit status of the remote command.\nfunc (w Waitmsg) ExitStatus() int {\n\treturn w.status\n}\n\n// Signal returns the exit signal of the remote command if\n// it was terminated violently.\nfunc (w Waitmsg) Signal() string {\n\treturn w.signal\n}\n\n// Msg returns the exit message given by the remote command\nfunc (w Waitmsg) Msg() string {\n\treturn w.msg\n}\n\n// Lang returns the language tag. See RFC 3066\nfunc (w Waitmsg) Lang() string {\n\treturn w.lang\n}\n\nfunc (w Waitmsg) String() string {\n\tstr := fmt.Sprintf(\"Process exited with status %v\", w.status)\n\tif w.signal != \"\" {\n\t\tstr += fmt.Sprintf(\" from signal %v\", w.signal)\n\t}\n\tif w.msg != \"\" {\n\t\tstr += fmt.Sprintf(\". Reason was: %v\", w.msg)\n\t}\n\treturn str\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/streamlocal.go",
    "content": "package ssh\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n)\n\n// streamLocalChannelOpenDirectMsg is a struct used for SSH_MSG_CHANNEL_OPEN message\n// with \"direct-streamlocal@openssh.com\" string.\n//\n// See openssh-portable/PROTOCOL, section 2.4. connection: Unix domain socket forwarding\n// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L235\ntype streamLocalChannelOpenDirectMsg struct {\n\tsocketPath string\n\treserved0  string\n\treserved1  uint32\n}\n\n// forwardedStreamLocalPayload is a struct used for SSH_MSG_CHANNEL_OPEN message\n// with \"forwarded-streamlocal@openssh.com\" string.\ntype forwardedStreamLocalPayload struct {\n\tSocketPath string\n\tReserved0  string\n}\n\n// streamLocalChannelForwardMsg is a struct used for SSH2_MSG_GLOBAL_REQUEST message\n// with \"streamlocal-forward@openssh.com\"/\"cancel-streamlocal-forward@openssh.com\" string.\ntype streamLocalChannelForwardMsg struct {\n\tsocketPath string\n}\n\n// ListenUnix is similar to ListenTCP but uses a Unix domain socket.\nfunc (c *Client) ListenUnix(socketPath string) (net.Listener, error) {\n\tm := streamLocalChannelForwardMsg{\n\t\tsocketPath,\n\t}\n\t// send message\n\tok, _, err := c.SendRequest(\"streamlocal-forward@openssh.com\", true, Marshal(&m))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: streamlocal-forward@openssh.com request denied by peer\")\n\t}\n\tch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: \"unix\"})\n\n\treturn &unixListener{socketPath, c, ch}, nil\n}\n\nfunc (c *Client) dialStreamLocal(socketPath string) (Channel, error) {\n\tmsg := streamLocalChannelOpenDirectMsg{\n\t\tsocketPath: socketPath,\n\t}\n\tch, in, err := c.OpenChannel(\"direct-streamlocal@openssh.com\", Marshal(&msg))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(in)\n\treturn ch, err\n}\n\ntype unixListener struct {\n\tsocketPath string\n\n\tconn *Client\n\tin   <-chan forward\n}\n\n// Accept waits for and returns the next connection to the listener.\nfunc (l *unixListener) Accept() (net.Conn, error) {\n\ts, ok := <-l.in\n\tif !ok {\n\t\treturn nil, io.EOF\n\t}\n\tch, incoming, err := s.newCh.Accept()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(incoming)\n\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr: &net.UnixAddr{\n\t\t\tName: l.socketPath,\n\t\t\tNet:  \"unix\",\n\t\t},\n\t\traddr: &net.UnixAddr{\n\t\t\tName: \"@\",\n\t\t\tNet:  \"unix\",\n\t\t},\n\t}, nil\n}\n\n// Close closes the listener.\nfunc (l *unixListener) Close() error {\n\t// this also closes the listener.\n\tl.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: \"unix\"})\n\tm := streamLocalChannelForwardMsg{\n\t\tl.socketPath,\n\t}\n\tok, _, err := l.conn.SendRequest(\"cancel-streamlocal-forward@openssh.com\", true, Marshal(&m))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: cancel-streamlocal-forward@openssh.com failed\")\n\t}\n\treturn err\n}\n\n// Addr returns the listener's network address.\nfunc (l *unixListener) Addr() net.Addr {\n\treturn &net.UnixAddr{\n\t\tName: l.socketPath,\n\t\tNet:  \"unix\",\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/tcpip.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 ssh\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Listen requests the remote peer open a listening socket on\n// addr. Incoming connections will be available by calling Accept on\n// the returned net.Listener. The listener must be serviced, or the\n// SSH connection may hang.\n// N must be \"tcp\", \"tcp4\", \"tcp6\", or \"unix\".\nfunc (c *Client) Listen(n, addr string) (net.Listener, error) {\n\tswitch n {\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\tladdr, err := net.ResolveTCPAddr(n, addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn c.ListenTCP(laddr)\n\tcase \"unix\":\n\t\treturn c.ListenUnix(addr)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported protocol: %s\", n)\n\t}\n}\n\n// Automatic port allocation is broken with OpenSSH before 6.0. See\n// also https://bugzilla.mindrot.org/show_bug.cgi?id=2017.  In\n// particular, OpenSSH 5.9 sends a channelOpenMsg with port number 0,\n// rather than the actual port number. This means you can never open\n// two different listeners with auto allocated ports. We work around\n// this by trying explicit ports until we succeed.\n\nconst openSSHPrefix = \"OpenSSH_\"\n\nvar portRandomizer = rand.New(rand.NewSource(time.Now().UnixNano()))\n\n// isBrokenOpenSSHVersion returns true if the given version string\n// specifies a version of OpenSSH that is known to have a bug in port\n// forwarding.\nfunc isBrokenOpenSSHVersion(versionStr string) bool {\n\ti := strings.Index(versionStr, openSSHPrefix)\n\tif i < 0 {\n\t\treturn false\n\t}\n\ti += len(openSSHPrefix)\n\tj := i\n\tfor ; j < len(versionStr); j++ {\n\t\tif versionStr[j] < '0' || versionStr[j] > '9' {\n\t\t\tbreak\n\t\t}\n\t}\n\tversion, _ := strconv.Atoi(versionStr[i:j])\n\treturn version < 6\n}\n\n// autoPortListenWorkaround simulates automatic port allocation by\n// trying random ports repeatedly.\nfunc (c *Client) autoPortListenWorkaround(laddr *net.TCPAddr) (net.Listener, error) {\n\tvar sshListener net.Listener\n\tvar err error\n\tconst tries = 10\n\tfor i := 0; i < tries; i++ {\n\t\taddr := *laddr\n\t\taddr.Port = 1024 + portRandomizer.Intn(60000)\n\t\tsshListener, err = c.ListenTCP(&addr)\n\t\tif err == nil {\n\t\t\tladdr.Port = addr.Port\n\t\t\treturn sshListener, err\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"ssh: listen on random port failed after %d tries: %v\", tries, err)\n}\n\n// RFC 4254 7.1\ntype channelForwardMsg struct {\n\taddr  string\n\trport uint32\n}\n\n// ListenTCP requests the remote peer open a listening socket\n// on laddr. Incoming connections will be available by calling\n// Accept on the returned net.Listener.\nfunc (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {\n\tif laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) {\n\t\treturn c.autoPortListenWorkaround(laddr)\n\t}\n\n\tm := channelForwardMsg{\n\t\tladdr.IP.String(),\n\t\tuint32(laddr.Port),\n\t}\n\t// send message\n\tok, resp, err := c.SendRequest(\"tcpip-forward\", true, Marshal(&m))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: tcpip-forward request denied by peer\")\n\t}\n\n\t// If the original port was 0, then the remote side will\n\t// supply a real port number in the response.\n\tif laddr.Port == 0 {\n\t\tvar p struct {\n\t\t\tPort uint32\n\t\t}\n\t\tif err := Unmarshal(resp, &p); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tladdr.Port = int(p.Port)\n\t}\n\n\t// Register this forward, using the port number we obtained.\n\tch := c.forwards.add(laddr)\n\n\treturn &tcpListener{laddr, c, ch}, nil\n}\n\n// forwardList stores a mapping between remote\n// forward requests and the tcpListeners.\ntype forwardList struct {\n\tsync.Mutex\n\tentries []forwardEntry\n}\n\n// forwardEntry represents an established mapping of a laddr on a\n// remote ssh server to a channel connected to a tcpListener.\ntype forwardEntry struct {\n\tladdr net.Addr\n\tc     chan forward\n}\n\n// forward represents an incoming forwarded tcpip connection. The\n// arguments to add/remove/lookup should be address as specified in\n// the original forward-request.\ntype forward struct {\n\tnewCh NewChannel // the ssh client channel underlying this forward\n\traddr net.Addr   // the raddr of the incoming connection\n}\n\nfunc (l *forwardList) add(addr net.Addr) chan forward {\n\tl.Lock()\n\tdefer l.Unlock()\n\tf := forwardEntry{\n\t\tladdr: addr,\n\t\tc:     make(chan forward, 1),\n\t}\n\tl.entries = append(l.entries, f)\n\treturn f.c\n}\n\n// See RFC 4254, section 7.2\ntype forwardedTCPPayload struct {\n\tAddr       string\n\tPort       uint32\n\tOriginAddr string\n\tOriginPort uint32\n}\n\n// parseTCPAddr parses the originating address from the remote into a *net.TCPAddr.\nfunc parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) {\n\tif port == 0 || port > 65535 {\n\t\treturn nil, fmt.Errorf(\"ssh: port number out of range: %d\", port)\n\t}\n\tip := net.ParseIP(string(addr))\n\tif ip == nil {\n\t\treturn nil, fmt.Errorf(\"ssh: cannot parse IP address %q\", addr)\n\t}\n\treturn &net.TCPAddr{IP: ip, Port: int(port)}, nil\n}\n\nfunc (l *forwardList) handleChannels(in <-chan NewChannel) {\n\tfor ch := range in {\n\t\tvar (\n\t\t\tladdr net.Addr\n\t\t\traddr net.Addr\n\t\t\terr   error\n\t\t)\n\t\tswitch channelType := ch.ChannelType(); channelType {\n\t\tcase \"forwarded-tcpip\":\n\t\t\tvar payload forwardedTCPPayload\n\t\t\tif err = Unmarshal(ch.ExtraData(), &payload); err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, \"could not parse forwarded-tcpip payload: \"+err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// RFC 4254 section 7.2 specifies that incoming\n\t\t\t// addresses should list the address, in string\n\t\t\t// format. It is implied that this should be an IP\n\t\t\t// address, as it would be impossible to connect to it\n\t\t\t// otherwise.\n\t\t\tladdr, err = parseTCPAddr(payload.Addr, payload.Port)\n\t\t\tif err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\traddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort)\n\t\t\tif err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\tcase \"forwarded-streamlocal@openssh.com\":\n\t\t\tvar payload forwardedStreamLocalPayload\n\t\t\tif err = Unmarshal(ch.ExtraData(), &payload); err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, \"could not parse forwarded-streamlocal@openssh.com payload: \"+err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tladdr = &net.UnixAddr{\n\t\t\t\tName: payload.SocketPath,\n\t\t\t\tNet:  \"unix\",\n\t\t\t}\n\t\t\traddr = &net.UnixAddr{\n\t\t\t\tName: \"@\",\n\t\t\t\tNet:  \"unix\",\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"ssh: unknown channel type %s\", channelType))\n\t\t}\n\t\tif ok := l.forward(laddr, raddr, ch); !ok {\n\t\t\t// Section 7.2, implementations MUST reject spurious incoming\n\t\t\t// connections.\n\t\t\tch.Reject(Prohibited, \"no forward for address\")\n\t\t\tcontinue\n\t\t}\n\n\t}\n}\n\n// remove removes the forward entry, and the channel feeding its\n// listener.\nfunc (l *forwardList) remove(addr net.Addr) {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor i, f := range l.entries {\n\t\tif addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() {\n\t\t\tl.entries = append(l.entries[:i], l.entries[i+1:]...)\n\t\t\tclose(f.c)\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// closeAll closes and clears all forwards.\nfunc (l *forwardList) closeAll() {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor _, f := range l.entries {\n\t\tclose(f.c)\n\t}\n\tl.entries = nil\n}\n\nfunc (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor _, f := range l.entries {\n\t\tif laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() {\n\t\t\tf.c <- forward{newCh: ch, raddr: raddr}\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype tcpListener struct {\n\tladdr *net.TCPAddr\n\n\tconn *Client\n\tin   <-chan forward\n}\n\n// Accept waits for and returns the next connection to the listener.\nfunc (l *tcpListener) Accept() (net.Conn, error) {\n\ts, ok := <-l.in\n\tif !ok {\n\t\treturn nil, io.EOF\n\t}\n\tch, incoming, err := s.newCh.Accept()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(incoming)\n\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr:   l.laddr,\n\t\traddr:   s.raddr,\n\t}, nil\n}\n\n// Close closes the listener.\nfunc (l *tcpListener) Close() error {\n\tm := channelForwardMsg{\n\t\tl.laddr.IP.String(),\n\t\tuint32(l.laddr.Port),\n\t}\n\n\t// this also closes the listener.\n\tl.conn.forwards.remove(l.laddr)\n\tok, _, err := l.conn.SendRequest(\"cancel-tcpip-forward\", true, Marshal(&m))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: cancel-tcpip-forward failed\")\n\t}\n\treturn err\n}\n\n// Addr returns the listener's network address.\nfunc (l *tcpListener) Addr() net.Addr {\n\treturn l.laddr\n}\n\n// Dial initiates a connection to the addr from the remote host.\n// The resulting connection has a zero LocalAddr() and RemoteAddr().\nfunc (c *Client) Dial(n, addr string) (net.Conn, error) {\n\tvar ch Channel\n\tswitch n {\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\t// Parse the address into host and numeric port.\n\t\thost, portString, err := net.SplitHostPort(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tport, err := strconv.ParseUint(portString, 10, 16)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tch, err = c.dial(net.IPv4zero.String(), 0, host, int(port))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// Use a zero address for local and remote address.\n\t\tzeroAddr := &net.TCPAddr{\n\t\t\tIP:   net.IPv4zero,\n\t\t\tPort: 0,\n\t\t}\n\t\treturn &chanConn{\n\t\t\tChannel: ch,\n\t\t\tladdr:   zeroAddr,\n\t\t\traddr:   zeroAddr,\n\t\t}, nil\n\tcase \"unix\":\n\t\tvar err error\n\t\tch, err = c.dialStreamLocal(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &chanConn{\n\t\t\tChannel: ch,\n\t\t\tladdr: &net.UnixAddr{\n\t\t\t\tName: \"@\",\n\t\t\t\tNet:  \"unix\",\n\t\t\t},\n\t\t\traddr: &net.UnixAddr{\n\t\t\t\tName: addr,\n\t\t\t\tNet:  \"unix\",\n\t\t\t},\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported protocol: %s\", n)\n\t}\n}\n\n// DialTCP connects to the remote address raddr on the network net,\n// which must be \"tcp\", \"tcp4\", or \"tcp6\".  If laddr is not nil, it is used\n// as the local address for the connection.\nfunc (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) {\n\tif laddr == nil {\n\t\tladdr = &net.TCPAddr{\n\t\t\tIP:   net.IPv4zero,\n\t\t\tPort: 0,\n\t\t}\n\t}\n\tch, err := c.dial(laddr.IP.String(), laddr.Port, raddr.IP.String(), raddr.Port)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr:   laddr,\n\t\traddr:   raddr,\n\t}, nil\n}\n\n// RFC 4254 7.2\ntype channelOpenDirectMsg struct {\n\traddr string\n\trport uint32\n\tladdr string\n\tlport uint32\n}\n\nfunc (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel, error) {\n\tmsg := channelOpenDirectMsg{\n\t\traddr: raddr,\n\t\trport: uint32(rport),\n\t\tladdr: laddr,\n\t\tlport: uint32(lport),\n\t}\n\tch, in, err := c.OpenChannel(\"direct-tcpip\", Marshal(&msg))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(in)\n\treturn ch, err\n}\n\ntype tcpChan struct {\n\tChannel // the backing channel\n}\n\n// chanConn fulfills the net.Conn interface without\n// the tcpChan having to hold laddr or raddr directly.\ntype chanConn struct {\n\tChannel\n\tladdr, raddr net.Addr\n}\n\n// LocalAddr returns the local network address.\nfunc (t *chanConn) LocalAddr() net.Addr {\n\treturn t.laddr\n}\n\n// RemoteAddr returns the remote network address.\nfunc (t *chanConn) RemoteAddr() net.Addr {\n\treturn t.raddr\n}\n\n// SetDeadline sets the read and write deadlines associated\n// with the connection.\nfunc (t *chanConn) SetDeadline(deadline time.Time) error {\n\tif err := t.SetReadDeadline(deadline); err != nil {\n\t\treturn err\n\t}\n\treturn t.SetWriteDeadline(deadline)\n}\n\n// SetReadDeadline sets the read deadline.\n// A zero value for t means Read will not time out.\n// After the deadline, the error from Read will implement net.Error\n// with Timeout() == true.\nfunc (t *chanConn) SetReadDeadline(deadline time.Time) error {\n\t// for compatibility with previous version,\n\t// the error message contains \"tcpChan\"\n\treturn errors.New(\"ssh: tcpChan: deadline not supported\")\n}\n\n// SetWriteDeadline exists to satisfy the net.Conn interface\n// but is not implemented by this type.  It always returns an error.\nfunc (t *chanConn) SetWriteDeadline(deadline time.Time) error {\n\treturn errors.New(\"ssh: tcpChan: deadline not supported\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/terminal.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 terminal\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"sync\"\n\t\"unicode/utf8\"\n)\n\n// EscapeCodes contains escape sequences that can be written to the terminal in\n// order to achieve different styles of text.\ntype EscapeCodes struct {\n\t// Foreground colors\n\tBlack, Red, Green, Yellow, Blue, Magenta, Cyan, White []byte\n\n\t// Reset all attributes\n\tReset []byte\n}\n\nvar vt100EscapeCodes = EscapeCodes{\n\tBlack:   []byte{keyEscape, '[', '3', '0', 'm'},\n\tRed:     []byte{keyEscape, '[', '3', '1', 'm'},\n\tGreen:   []byte{keyEscape, '[', '3', '2', 'm'},\n\tYellow:  []byte{keyEscape, '[', '3', '3', 'm'},\n\tBlue:    []byte{keyEscape, '[', '3', '4', 'm'},\n\tMagenta: []byte{keyEscape, '[', '3', '5', 'm'},\n\tCyan:    []byte{keyEscape, '[', '3', '6', 'm'},\n\tWhite:   []byte{keyEscape, '[', '3', '7', 'm'},\n\n\tReset: []byte{keyEscape, '[', '0', 'm'},\n}\n\n// Terminal contains the state for running a VT100 terminal that is capable of\n// reading lines of input.\ntype Terminal struct {\n\t// AutoCompleteCallback, if non-null, is called for each keypress with\n\t// the full input line and the current position of the cursor (in\n\t// bytes, as an index into |line|). If it returns ok=false, the key\n\t// press is processed normally. Otherwise it returns a replacement line\n\t// and the new cursor position.\n\tAutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool)\n\n\t// Escape contains a pointer to the escape codes for this terminal.\n\t// It's always a valid pointer, although the escape codes themselves\n\t// may be empty if the terminal doesn't support them.\n\tEscape *EscapeCodes\n\n\t// lock protects the terminal and the state in this object from\n\t// concurrent processing of a key press and a Write() call.\n\tlock sync.Mutex\n\n\tc      io.ReadWriter\n\tprompt []rune\n\n\t// line is the current line being entered.\n\tline []rune\n\t// pos is the logical position of the cursor in line\n\tpos int\n\t// echo is true if local echo is enabled\n\techo bool\n\t// pasteActive is true iff there is a bracketed paste operation in\n\t// progress.\n\tpasteActive bool\n\n\t// cursorX contains the current X value of the cursor where the left\n\t// edge is 0. cursorY contains the row number where the first row of\n\t// the current line is 0.\n\tcursorX, cursorY int\n\t// maxLine is the greatest value of cursorY so far.\n\tmaxLine int\n\n\ttermWidth, termHeight int\n\n\t// outBuf contains the terminal data to be sent.\n\toutBuf []byte\n\t// remainder contains the remainder of any partial key sequences after\n\t// a read. It aliases into inBuf.\n\tremainder []byte\n\tinBuf     [256]byte\n\n\t// history contains previously entered commands so that they can be\n\t// accessed with the up and down keys.\n\thistory stRingBuffer\n\t// historyIndex stores the currently accessed history entry, where zero\n\t// means the immediately previous entry.\n\thistoryIndex int\n\t// When navigating up and down the history it's possible to return to\n\t// the incomplete, initial line. That value is stored in\n\t// historyPending.\n\thistoryPending string\n}\n\n// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is\n// a local terminal, that terminal must first have been put into raw mode.\n// prompt is a string that is written at the start of each input line (i.e.\n// \"> \").\nfunc NewTerminal(c io.ReadWriter, prompt string) *Terminal {\n\treturn &Terminal{\n\t\tEscape:       &vt100EscapeCodes,\n\t\tc:            c,\n\t\tprompt:       []rune(prompt),\n\t\ttermWidth:    80,\n\t\ttermHeight:   24,\n\t\techo:         true,\n\t\thistoryIndex: -1,\n\t}\n}\n\nconst (\n\tkeyCtrlD     = 4\n\tkeyCtrlU     = 21\n\tkeyEnter     = '\\r'\n\tkeyEscape    = 27\n\tkeyBackspace = 127\n\tkeyUnknown   = 0xd800 /* UTF-16 surrogate area */ + iota\n\tkeyUp\n\tkeyDown\n\tkeyLeft\n\tkeyRight\n\tkeyAltLeft\n\tkeyAltRight\n\tkeyHome\n\tkeyEnd\n\tkeyDeleteWord\n\tkeyDeleteLine\n\tkeyClearScreen\n\tkeyPasteStart\n\tkeyPasteEnd\n)\n\nvar (\n\tcrlf       = []byte{'\\r', '\\n'}\n\tpasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'}\n\tpasteEnd   = []byte{keyEscape, '[', '2', '0', '1', '~'}\n)\n\n// bytesToKey tries to parse a key sequence from b. If successful, it returns\n// the key and the remainder of the input. Otherwise it returns utf8.RuneError.\nfunc bytesToKey(b []byte, pasteActive bool) (rune, []byte) {\n\tif len(b) == 0 {\n\t\treturn utf8.RuneError, nil\n\t}\n\n\tif !pasteActive {\n\t\tswitch b[0] {\n\t\tcase 1: // ^A\n\t\t\treturn keyHome, b[1:]\n\t\tcase 5: // ^E\n\t\t\treturn keyEnd, b[1:]\n\t\tcase 8: // ^H\n\t\t\treturn keyBackspace, b[1:]\n\t\tcase 11: // ^K\n\t\t\treturn keyDeleteLine, b[1:]\n\t\tcase 12: // ^L\n\t\t\treturn keyClearScreen, b[1:]\n\t\tcase 23: // ^W\n\t\t\treturn keyDeleteWord, b[1:]\n\t\t}\n\t}\n\n\tif b[0] != keyEscape {\n\t\tif !utf8.FullRune(b) {\n\t\t\treturn utf8.RuneError, b\n\t\t}\n\t\tr, l := utf8.DecodeRune(b)\n\t\treturn r, b[l:]\n\t}\n\n\tif !pasteActive && len(b) >= 3 && b[0] == keyEscape && b[1] == '[' {\n\t\tswitch b[2] {\n\t\tcase 'A':\n\t\t\treturn keyUp, b[3:]\n\t\tcase 'B':\n\t\t\treturn keyDown, b[3:]\n\t\tcase 'C':\n\t\t\treturn keyRight, b[3:]\n\t\tcase 'D':\n\t\t\treturn keyLeft, b[3:]\n\t\tcase 'H':\n\t\t\treturn keyHome, b[3:]\n\t\tcase 'F':\n\t\t\treturn keyEnd, b[3:]\n\t\t}\n\t}\n\n\tif !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' {\n\t\tswitch b[5] {\n\t\tcase 'C':\n\t\t\treturn keyAltRight, b[6:]\n\t\tcase 'D':\n\t\t\treturn keyAltLeft, b[6:]\n\t\t}\n\t}\n\n\tif !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) {\n\t\treturn keyPasteStart, b[6:]\n\t}\n\n\tif pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteEnd) {\n\t\treturn keyPasteEnd, b[6:]\n\t}\n\n\t// If we get here then we have a key that we don't recognise, or a\n\t// partial sequence. It's not clear how one should find the end of a\n\t// sequence without knowing them all, but it seems that [a-zA-Z~] only\n\t// appears at the end of a sequence.\n\tfor i, c := range b[0:] {\n\t\tif c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '~' {\n\t\t\treturn keyUnknown, b[i+1:]\n\t\t}\n\t}\n\n\treturn utf8.RuneError, b\n}\n\n// queue appends data to the end of t.outBuf\nfunc (t *Terminal) queue(data []rune) {\n\tt.outBuf = append(t.outBuf, []byte(string(data))...)\n}\n\nvar eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'}\nvar space = []rune{' '}\n\nfunc isPrintable(key rune) bool {\n\tisInSurrogateArea := key >= 0xd800 && key <= 0xdbff\n\treturn key >= 32 && !isInSurrogateArea\n}\n\n// moveCursorToPos appends data to t.outBuf which will move the cursor to the\n// given, logical position in the text.\nfunc (t *Terminal) moveCursorToPos(pos int) {\n\tif !t.echo {\n\t\treturn\n\t}\n\n\tx := visualLength(t.prompt) + pos\n\ty := x / t.termWidth\n\tx = x % t.termWidth\n\n\tup := 0\n\tif y < t.cursorY {\n\t\tup = t.cursorY - y\n\t}\n\n\tdown := 0\n\tif y > t.cursorY {\n\t\tdown = y - t.cursorY\n\t}\n\n\tleft := 0\n\tif x < t.cursorX {\n\t\tleft = t.cursorX - x\n\t}\n\n\tright := 0\n\tif x > t.cursorX {\n\t\tright = x - t.cursorX\n\t}\n\n\tt.cursorX = x\n\tt.cursorY = y\n\tt.move(up, down, left, right)\n}\n\nfunc (t *Terminal) move(up, down, left, right int) {\n\tmovement := make([]rune, 3*(up+down+left+right))\n\tm := movement\n\tfor i := 0; i < up; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'A'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < down; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'B'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < left; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'D'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < right; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'C'\n\t\tm = m[3:]\n\t}\n\n\tt.queue(movement)\n}\n\nfunc (t *Terminal) clearLineToRight() {\n\top := []rune{keyEscape, '[', 'K'}\n\tt.queue(op)\n}\n\nconst maxLineLength = 4096\n\nfunc (t *Terminal) setLine(newLine []rune, newPos int) {\n\tif t.echo {\n\t\tt.moveCursorToPos(0)\n\t\tt.writeLine(newLine)\n\t\tfor i := len(newLine); i < len(t.line); i++ {\n\t\t\tt.writeLine(space)\n\t\t}\n\t\tt.moveCursorToPos(newPos)\n\t}\n\tt.line = newLine\n\tt.pos = newPos\n}\n\nfunc (t *Terminal) advanceCursor(places int) {\n\tt.cursorX += places\n\tt.cursorY += t.cursorX / t.termWidth\n\tif t.cursorY > t.maxLine {\n\t\tt.maxLine = t.cursorY\n\t}\n\tt.cursorX = t.cursorX % t.termWidth\n\n\tif places > 0 && t.cursorX == 0 {\n\t\t// Normally terminals will advance the current position\n\t\t// when writing a character. But that doesn't happen\n\t\t// for the last character in a line. However, when\n\t\t// writing a character (except a new line) that causes\n\t\t// a line wrap, the position will be advanced two\n\t\t// places.\n\t\t//\n\t\t// So, if we are stopping at the end of a line, we\n\t\t// need to write a newline so that our cursor can be\n\t\t// advanced to the next line.\n\t\tt.outBuf = append(t.outBuf, '\\r', '\\n')\n\t}\n}\n\nfunc (t *Terminal) eraseNPreviousChars(n int) {\n\tif n == 0 {\n\t\treturn\n\t}\n\n\tif t.pos < n {\n\t\tn = t.pos\n\t}\n\tt.pos -= n\n\tt.moveCursorToPos(t.pos)\n\n\tcopy(t.line[t.pos:], t.line[n+t.pos:])\n\tt.line = t.line[:len(t.line)-n]\n\tif t.echo {\n\t\tt.writeLine(t.line[t.pos:])\n\t\tfor i := 0; i < n; i++ {\n\t\t\tt.queue(space)\n\t\t}\n\t\tt.advanceCursor(n)\n\t\tt.moveCursorToPos(t.pos)\n\t}\n}\n\n// countToLeftWord returns then number of characters from the cursor to the\n// start of the previous word.\nfunc (t *Terminal) countToLeftWord() int {\n\tif t.pos == 0 {\n\t\treturn 0\n\t}\n\n\tpos := t.pos - 1\n\tfor pos > 0 {\n\t\tif t.line[pos] != ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos--\n\t}\n\tfor pos > 0 {\n\t\tif t.line[pos] == ' ' {\n\t\t\tpos++\n\t\t\tbreak\n\t\t}\n\t\tpos--\n\t}\n\n\treturn t.pos - pos\n}\n\n// countToRightWord returns then number of characters from the cursor to the\n// start of the next word.\nfunc (t *Terminal) countToRightWord() int {\n\tpos := t.pos\n\tfor pos < len(t.line) {\n\t\tif t.line[pos] == ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos++\n\t}\n\tfor pos < len(t.line) {\n\t\tif t.line[pos] != ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos++\n\t}\n\treturn pos - t.pos\n}\n\n// visualLength returns the number of visible glyphs in s.\nfunc visualLength(runes []rune) int {\n\tinEscapeSeq := false\n\tlength := 0\n\n\tfor _, r := range runes {\n\t\tswitch {\n\t\tcase inEscapeSeq:\n\t\t\tif (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') {\n\t\t\t\tinEscapeSeq = false\n\t\t\t}\n\t\tcase r == '\\x1b':\n\t\t\tinEscapeSeq = true\n\t\tdefault:\n\t\t\tlength++\n\t\t}\n\t}\n\n\treturn length\n}\n\n// handleKey processes the given key and, optionally, returns a line of text\n// that the user has entered.\nfunc (t *Terminal) handleKey(key rune) (line string, ok bool) {\n\tif t.pasteActive && key != keyEnter {\n\t\tt.addKeyToLine(key)\n\t\treturn\n\t}\n\n\tswitch key {\n\tcase keyBackspace:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.eraseNPreviousChars(1)\n\tcase keyAltLeft:\n\t\t// move left by a word.\n\t\tt.pos -= t.countToLeftWord()\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyAltRight:\n\t\t// move right by a word.\n\t\tt.pos += t.countToRightWord()\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyLeft:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.pos--\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyRight:\n\t\tif t.pos == len(t.line) {\n\t\t\treturn\n\t\t}\n\t\tt.pos++\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyHome:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.pos = 0\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyEnd:\n\t\tif t.pos == len(t.line) {\n\t\t\treturn\n\t\t}\n\t\tt.pos = len(t.line)\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyUp:\n\t\tentry, ok := t.history.NthPreviousEntry(t.historyIndex + 1)\n\t\tif !ok {\n\t\t\treturn \"\", false\n\t\t}\n\t\tif t.historyIndex == -1 {\n\t\t\tt.historyPending = string(t.line)\n\t\t}\n\t\tt.historyIndex++\n\t\trunes := []rune(entry)\n\t\tt.setLine(runes, len(runes))\n\tcase keyDown:\n\t\tswitch t.historyIndex {\n\t\tcase -1:\n\t\t\treturn\n\t\tcase 0:\n\t\t\trunes := []rune(t.historyPending)\n\t\t\tt.setLine(runes, len(runes))\n\t\t\tt.historyIndex--\n\t\tdefault:\n\t\t\tentry, ok := t.history.NthPreviousEntry(t.historyIndex - 1)\n\t\t\tif ok {\n\t\t\t\tt.historyIndex--\n\t\t\t\trunes := []rune(entry)\n\t\t\t\tt.setLine(runes, len(runes))\n\t\t\t}\n\t\t}\n\tcase keyEnter:\n\t\tt.moveCursorToPos(len(t.line))\n\t\tt.queue([]rune(\"\\r\\n\"))\n\t\tline = string(t.line)\n\t\tok = true\n\t\tt.line = t.line[:0]\n\t\tt.pos = 0\n\t\tt.cursorX = 0\n\t\tt.cursorY = 0\n\t\tt.maxLine = 0\n\tcase keyDeleteWord:\n\t\t// Delete zero or more spaces and then one or more characters.\n\t\tt.eraseNPreviousChars(t.countToLeftWord())\n\tcase keyDeleteLine:\n\t\t// Delete everything from the current cursor position to the\n\t\t// end of line.\n\t\tfor i := t.pos; i < len(t.line); i++ {\n\t\t\tt.queue(space)\n\t\t\tt.advanceCursor(1)\n\t\t}\n\t\tt.line = t.line[:t.pos]\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyCtrlD:\n\t\t// Erase the character under the current position.\n\t\t// The EOF case when the line is empty is handled in\n\t\t// readLine().\n\t\tif t.pos < len(t.line) {\n\t\t\tt.pos++\n\t\t\tt.eraseNPreviousChars(1)\n\t\t}\n\tcase keyCtrlU:\n\t\tt.eraseNPreviousChars(t.pos)\n\tcase keyClearScreen:\n\t\t// Erases the screen and moves the cursor to the home position.\n\t\tt.queue([]rune(\"\\x1b[2J\\x1b[H\"))\n\t\tt.queue(t.prompt)\n\t\tt.cursorX, t.cursorY = 0, 0\n\t\tt.advanceCursor(visualLength(t.prompt))\n\t\tt.setLine(t.line, t.pos)\n\tdefault:\n\t\tif t.AutoCompleteCallback != nil {\n\t\t\tprefix := string(t.line[:t.pos])\n\t\t\tsuffix := string(t.line[t.pos:])\n\n\t\t\tt.lock.Unlock()\n\t\t\tnewLine, newPos, completeOk := t.AutoCompleteCallback(prefix+suffix, len(prefix), key)\n\t\t\tt.lock.Lock()\n\n\t\t\tif completeOk {\n\t\t\t\tt.setLine([]rune(newLine), utf8.RuneCount([]byte(newLine)[:newPos]))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif !isPrintable(key) {\n\t\t\treturn\n\t\t}\n\t\tif len(t.line) == maxLineLength {\n\t\t\treturn\n\t\t}\n\t\tt.addKeyToLine(key)\n\t}\n\treturn\n}\n\n// addKeyToLine inserts the given key at the current position in the current\n// line.\nfunc (t *Terminal) addKeyToLine(key rune) {\n\tif len(t.line) == cap(t.line) {\n\t\tnewLine := make([]rune, len(t.line), 2*(1+len(t.line)))\n\t\tcopy(newLine, t.line)\n\t\tt.line = newLine\n\t}\n\tt.line = t.line[:len(t.line)+1]\n\tcopy(t.line[t.pos+1:], t.line[t.pos:])\n\tt.line[t.pos] = key\n\tif t.echo {\n\t\tt.writeLine(t.line[t.pos:])\n\t}\n\tt.pos++\n\tt.moveCursorToPos(t.pos)\n}\n\nfunc (t *Terminal) writeLine(line []rune) {\n\tfor len(line) != 0 {\n\t\tremainingOnLine := t.termWidth - t.cursorX\n\t\ttodo := len(line)\n\t\tif todo > remainingOnLine {\n\t\t\ttodo = remainingOnLine\n\t\t}\n\t\tt.queue(line[:todo])\n\t\tt.advanceCursor(visualLength(line[:todo]))\n\t\tline = line[todo:]\n\t}\n}\n\n// writeWithCRLF writes buf to w but replaces all occurrences of \\n with \\r\\n.\nfunc writeWithCRLF(w io.Writer, buf []byte) (n int, err error) {\n\tfor len(buf) > 0 {\n\t\ti := bytes.IndexByte(buf, '\\n')\n\t\ttodo := len(buf)\n\t\tif i >= 0 {\n\t\t\ttodo = i\n\t\t}\n\n\t\tvar nn int\n\t\tnn, err = w.Write(buf[:todo])\n\t\tn += nn\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tbuf = buf[todo:]\n\n\t\tif i >= 0 {\n\t\t\tif _, err = w.Write(crlf); err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t\tn += 1\n\t\t\tbuf = buf[1:]\n\t\t}\n\t}\n\n\treturn n, nil\n}\n\nfunc (t *Terminal) Write(buf []byte) (n int, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.cursorX == 0 && t.cursorY == 0 {\n\t\t// This is the easy case: there's nothing on the screen that we\n\t\t// have to move out of the way.\n\t\treturn writeWithCRLF(t.c, buf)\n\t}\n\n\t// We have a prompt and possibly user input on the screen. We\n\t// have to clear it first.\n\tt.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */)\n\tt.cursorX = 0\n\tt.clearLineToRight()\n\n\tfor t.cursorY > 0 {\n\t\tt.move(1 /* up */, 0, 0, 0)\n\t\tt.cursorY--\n\t\tt.clearLineToRight()\n\t}\n\n\tif _, err = t.c.Write(t.outBuf); err != nil {\n\t\treturn\n\t}\n\tt.outBuf = t.outBuf[:0]\n\n\tif n, err = writeWithCRLF(t.c, buf); err != nil {\n\t\treturn\n\t}\n\n\tt.writeLine(t.prompt)\n\tif t.echo {\n\t\tt.writeLine(t.line)\n\t}\n\n\tt.moveCursorToPos(t.pos)\n\n\tif _, err = t.c.Write(t.outBuf); err != nil {\n\t\treturn\n\t}\n\tt.outBuf = t.outBuf[:0]\n\treturn\n}\n\n// ReadPassword temporarily changes the prompt and reads a password, without\n// echo, from the terminal.\nfunc (t *Terminal) ReadPassword(prompt string) (line string, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\toldPrompt := t.prompt\n\tt.prompt = []rune(prompt)\n\tt.echo = false\n\n\tline, err = t.readLine()\n\n\tt.prompt = oldPrompt\n\tt.echo = true\n\n\treturn\n}\n\n// ReadLine returns a line of input from the terminal.\nfunc (t *Terminal) ReadLine() (line string, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\treturn t.readLine()\n}\n\nfunc (t *Terminal) readLine() (line string, err error) {\n\t// t.lock must be held at this point\n\n\tif t.cursorX == 0 && t.cursorY == 0 {\n\t\tt.writeLine(t.prompt)\n\t\tt.c.Write(t.outBuf)\n\t\tt.outBuf = t.outBuf[:0]\n\t}\n\n\tlineIsPasted := t.pasteActive\n\n\tfor {\n\t\trest := t.remainder\n\t\tlineOk := false\n\t\tfor !lineOk {\n\t\t\tvar key rune\n\t\t\tkey, rest = bytesToKey(rest, t.pasteActive)\n\t\t\tif key == utf8.RuneError {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif !t.pasteActive {\n\t\t\t\tif key == keyCtrlD {\n\t\t\t\t\tif len(t.line) == 0 {\n\t\t\t\t\t\treturn \"\", io.EOF\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif key == keyPasteStart {\n\t\t\t\t\tt.pasteActive = true\n\t\t\t\t\tif len(t.line) == 0 {\n\t\t\t\t\t\tlineIsPasted = true\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t} else if key == keyPasteEnd {\n\t\t\t\tt.pasteActive = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !t.pasteActive {\n\t\t\t\tlineIsPasted = false\n\t\t\t}\n\t\t\tline, lineOk = t.handleKey(key)\n\t\t}\n\t\tif len(rest) > 0 {\n\t\t\tn := copy(t.inBuf[:], rest)\n\t\t\tt.remainder = t.inBuf[:n]\n\t\t} else {\n\t\t\tt.remainder = nil\n\t\t}\n\t\tt.c.Write(t.outBuf)\n\t\tt.outBuf = t.outBuf[:0]\n\t\tif lineOk {\n\t\t\tif t.echo {\n\t\t\t\tt.historyIndex = -1\n\t\t\t\tt.history.Add(line)\n\t\t\t}\n\t\t\tif lineIsPasted {\n\t\t\t\terr = ErrPasteIndicator\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// t.remainder is a slice at the beginning of t.inBuf\n\t\t// containing a partial key sequence\n\t\treadBuf := t.inBuf[len(t.remainder):]\n\t\tvar n int\n\n\t\tt.lock.Unlock()\n\t\tn, err = t.c.Read(readBuf)\n\t\tt.lock.Lock()\n\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tt.remainder = t.inBuf[:n+len(t.remainder)]\n\t}\n}\n\n// SetPrompt sets the prompt to be used when reading subsequent lines.\nfunc (t *Terminal) SetPrompt(prompt string) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tt.prompt = []rune(prompt)\n}\n\nfunc (t *Terminal) clearAndRepaintLinePlusNPrevious(numPrevLines int) {\n\t// Move cursor to column zero at the start of the line.\n\tt.move(t.cursorY, 0, t.cursorX, 0)\n\tt.cursorX, t.cursorY = 0, 0\n\tt.clearLineToRight()\n\tfor t.cursorY < numPrevLines {\n\t\t// Move down a line\n\t\tt.move(0, 1, 0, 0)\n\t\tt.cursorY++\n\t\tt.clearLineToRight()\n\t}\n\t// Move back to beginning.\n\tt.move(t.cursorY, 0, 0, 0)\n\tt.cursorX, t.cursorY = 0, 0\n\n\tt.queue(t.prompt)\n\tt.advanceCursor(visualLength(t.prompt))\n\tt.writeLine(t.line)\n\tt.moveCursorToPos(t.pos)\n}\n\nfunc (t *Terminal) SetSize(width, height int) error {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif width == 0 {\n\t\twidth = 1\n\t}\n\n\toldWidth := t.termWidth\n\tt.termWidth, t.termHeight = width, height\n\n\tswitch {\n\tcase width == oldWidth:\n\t\t// If the width didn't change then nothing else needs to be\n\t\t// done.\n\t\treturn nil\n\tcase len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0:\n\t\t// If there is nothing on current line and no prompt printed,\n\t\t// just do nothing\n\t\treturn nil\n\tcase width < oldWidth:\n\t\t// Some terminals (e.g. xterm) will truncate lines that were\n\t\t// too long when shinking. Others, (e.g. gnome-terminal) will\n\t\t// attempt to wrap them. For the former, repainting t.maxLine\n\t\t// works great, but that behaviour goes badly wrong in the case\n\t\t// of the latter because they have doubled every full line.\n\n\t\t// We assume that we are working on a terminal that wraps lines\n\t\t// and adjust the cursor position based on every previous line\n\t\t// wrapping and turning into two. This causes the prompt on\n\t\t// xterms to move upwards, which isn't great, but it avoids a\n\t\t// huge mess with gnome-terminal.\n\t\tif t.cursorX >= t.termWidth {\n\t\t\tt.cursorX = t.termWidth - 1\n\t\t}\n\t\tt.cursorY *= 2\n\t\tt.clearAndRepaintLinePlusNPrevious(t.maxLine * 2)\n\tcase width > oldWidth:\n\t\t// If the terminal expands then our position calculations will\n\t\t// be wrong in the future because we think the cursor is\n\t\t// |t.pos| chars into the string, but there will be a gap at\n\t\t// the end of any wrapped line.\n\t\t//\n\t\t// But the position will actually be correct until we move, so\n\t\t// we can move back to the beginning and repaint everything.\n\t\tt.clearAndRepaintLinePlusNPrevious(t.maxLine)\n\t}\n\n\t_, err := t.c.Write(t.outBuf)\n\tt.outBuf = t.outBuf[:0]\n\treturn err\n}\n\ntype pasteIndicatorError struct{}\n\nfunc (pasteIndicatorError) Error() string {\n\treturn \"terminal: ErrPasteIndicator not correctly handled\"\n}\n\n// ErrPasteIndicator may be returned from ReadLine as the error, in addition\n// to valid line data. It indicates that bracketed paste mode is enabled and\n// that the returned line consists only of pasted data. Programs may wish to\n// interpret pasted data more literally than typed data.\nvar ErrPasteIndicator = pasteIndicatorError{}\n\n// SetBracketedPasteMode requests that the terminal bracket paste operations\n// with markers. Not all terminals support this but, if it is supported, then\n// enabling this mode will stop any autocomplete callback from running due to\n// pastes. Additionally, any lines that are completely pasted will be returned\n// from ReadLine with the error set to ErrPasteIndicator.\nfunc (t *Terminal) SetBracketedPasteMode(on bool) {\n\tif on {\n\t\tio.WriteString(t.c, \"\\x1b[?2004h\")\n\t} else {\n\t\tio.WriteString(t.c, \"\\x1b[?2004l\")\n\t}\n}\n\n// stRingBuffer is a ring buffer of strings.\ntype stRingBuffer struct {\n\t// entries contains max elements.\n\tentries []string\n\tmax     int\n\t// head contains the index of the element most recently added to the ring.\n\thead int\n\t// size contains the number of elements in the ring.\n\tsize int\n}\n\nfunc (s *stRingBuffer) Add(a string) {\n\tif s.entries == nil {\n\t\tconst defaultNumEntries = 100\n\t\ts.entries = make([]string, defaultNumEntries)\n\t\ts.max = defaultNumEntries\n\t}\n\n\ts.head = (s.head + 1) % s.max\n\ts.entries[s.head] = a\n\tif s.size < s.max {\n\t\ts.size++\n\t}\n}\n\n// NthPreviousEntry returns the value passed to the nth previous call to Add.\n// If n is zero then the immediately prior value is returned, if one, then the\n// next most recent, and so on. If such an element doesn't exist then ok is\n// false.\nfunc (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) {\n\tif n >= s.size {\n\t\treturn \"\", false\n\t}\n\tindex := s.head - n\n\tif index < 0 {\n\t\tindex += s.max\n\t}\n\treturn s.entries[index], true\n}\n\n// readPasswordLine reads from reader until it finds \\n or io.EOF.\n// The slice returned does not include the \\n.\n// readPasswordLine also ignores any \\r it finds.\nfunc readPasswordLine(reader io.Reader) ([]byte, error) {\n\tvar buf [1]byte\n\tvar ret []byte\n\n\tfor {\n\t\tn, err := reader.Read(buf[:])\n\t\tif n > 0 {\n\t\t\tswitch buf[0] {\n\t\t\tcase '\\n':\n\t\t\t\treturn ret, nil\n\t\t\tcase '\\r':\n\t\t\t\t// remove \\r from passwords on Windows\n\t\t\tdefault:\n\t\t\t\tret = append(ret, buf[0])\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\tif err == io.EOF && len(ret) > 0 {\n\t\t\t\treturn ret, nil\n\t\t\t}\n\t\t\treturn ret, err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util.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 darwin dragonfly freebsd linux,!appengine netbsd openbsd\n\n// Package terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal // import \"golang.org/x/crypto/ssh/terminal\"\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// State contains the state of a terminal.\ntype State struct {\n\ttermios syscall.Termios\n}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\tvar termios syscall.Termios\n\t_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)\n\treturn err == 0\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\tvar oldState State\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tnewState := oldState.termios\n\t// This attempts to replicate the behaviour documented for cfmakeraw in\n\t// the termios(3) manpage.\n\tnewState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON\n\tnewState.Oflag &^= syscall.OPOST\n\tnewState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN\n\tnewState.Cflag &^= syscall.CSIZE | syscall.PARENB\n\tnewState.Cflag |= syscall.CS8\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\treturn &oldState, nil\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\tvar oldState State\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\treturn &oldState, nil\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0); err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\tvar dimensions [4]uint16\n\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 {\n\t\treturn -1, -1, err\n\t}\n\treturn int(dimensions[1]), int(dimensions[0]), nil\n}\n\n// passwordReader is an io.Reader that reads from a specific file descriptor.\ntype passwordReader int\n\nfunc (r passwordReader) Read(buf []byte) (int, error) {\n\treturn syscall.Read(int(r), buf)\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\tvar oldState syscall.Termios\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tnewState := oldState\n\tnewState.Lflag &^= syscall.ECHO\n\tnewState.Lflag |= syscall.ICANON | syscall.ISIG\n\tnewState.Iflag |= syscall.ICRNL\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tdefer func() {\n\t\tsyscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0)\n\t}()\n\n\treturn readPasswordLine(passwordReader(fd))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.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 darwin dragonfly freebsd netbsd openbsd\n\npackage terminal\n\nimport \"syscall\"\n\nconst ioctlReadTermios = syscall.TIOCGETA\nconst ioctlWriteTermios = syscall.TIOCSETA\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util_linux.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 terminal\n\n// These constants are declared here, rather than importing\n// them from the syscall package as some syscall packages, even\n// on linux, for example gccgo, do not declare them.\nconst ioctlReadTermios = 0x5401  // syscall.TCGETS\nconst ioctlWriteTermios = 0x5402 // syscall.TCSETS\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.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 terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype State struct{}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\treturn false\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\treturn nil, fmt.Errorf(\"terminal: MakeRaw not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\treturn nil, fmt.Errorf(\"terminal: GetState not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\treturn fmt.Errorf(\"terminal: Restore not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\treturn 0, 0, fmt.Errorf(\"terminal: GetSize not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\treturn nil, fmt.Errorf(\"terminal: ReadPassword not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.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 solaris\n\npackage terminal // import \"golang.org/x/crypto/ssh/terminal\"\n\nimport (\n\t\"golang.org/x/sys/unix\"\n\t\"io\"\n\t\"syscall\"\n)\n\n// State contains the state of a terminal.\ntype State struct {\n\ttermios syscall.Termios\n}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\t// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c\n\tvar termio unix.Termio\n\terr := unix.IoctlSetTermio(fd, unix.TCGETA, &termio)\n\treturn err == nil\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\t// see also: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libast/common/uwin/getpass.c\n\tval, err := unix.IoctlGetTermios(fd, unix.TCGETS)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\toldState := *val\n\n\tnewState := oldState\n\tnewState.Lflag &^= syscall.ECHO\n\tnewState.Lflag |= syscall.ICANON | syscall.ISIG\n\tnewState.Iflag |= syscall.ICRNL\n\terr = unix.IoctlSetTermios(fd, unix.TCSETS, &newState)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdefer unix.IoctlSetTermios(fd, unix.TCSETS, &oldState)\n\n\tvar buf [16]byte\n\tvar ret []byte\n\tfor {\n\t\tn, err := syscall.Read(fd, buf[:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n == 0 {\n\t\t\tif len(ret) == 0 {\n\t\t\t\treturn nil, io.EOF\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif buf[n-1] == '\\n' {\n\t\t\tn--\n\t\t}\n\t\tret = append(ret, buf[:n]...)\n\t\tif n < len(buf) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/terminal/util_windows.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 windows\n\n// Package terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst (\n\tenableLineInput       = 2\n\tenableEchoInput       = 4\n\tenableProcessedInput  = 1\n\tenableWindowInput     = 8\n\tenableMouseInput      = 16\n\tenableInsertMode      = 32\n\tenableQuickEditMode   = 64\n\tenableExtendedFlags   = 128\n\tenableAutoPosition    = 256\n\tenableProcessedOutput = 1\n\tenableWrapAtEolOutput = 2\n)\n\nvar kernel32 = syscall.NewLazyDLL(\"kernel32.dll\")\n\nvar (\n\tprocGetConsoleMode             = kernel32.NewProc(\"GetConsoleMode\")\n\tprocSetConsoleMode             = kernel32.NewProc(\"SetConsoleMode\")\n\tprocGetConsoleScreenBufferInfo = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n)\n\ntype (\n\tshort int16\n\tword  uint16\n\n\tcoord struct {\n\t\tx short\n\t\ty short\n\t}\n\tsmallRect struct {\n\t\tleft   short\n\t\ttop    short\n\t\tright  short\n\t\tbottom short\n\t}\n\tconsoleScreenBufferInfo struct {\n\t\tsize              coord\n\t\tcursorPosition    coord\n\t\tattributes        word\n\t\twindow            smallRect\n\t\tmaximumWindowSize coord\n\t}\n)\n\ntype State struct {\n\tmode uint32\n}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\tvar st uint32\n\tr, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\treturn r != 0 && e == 0\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\traw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput)\n\t_, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(raw), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\treturn &State{st}, nil\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\treturn &State{st}, nil\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\t_, _, err := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(state.mode), 0)\n\treturn err\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\tvar info consoleScreenBufferInfo\n\t_, _, e := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&info)), 0)\n\tif e != 0 {\n\t\treturn 0, 0, error(e)\n\t}\n\treturn int(info.size.x), int(info.size.y), nil\n}\n\n// passwordReader is an io.Reader that reads from a specific Windows HANDLE.\ntype passwordReader int\n\nfunc (r passwordReader) Read(buf []byte) (int, error) {\n\treturn syscall.Read(syscall.Handle(r), buf)\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\told := st\n\n\tst &^= (enableEchoInput)\n\tst |= (enableProcessedInput | enableLineInput | enableProcessedOutput)\n\t_, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(st), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\n\tdefer func() {\n\t\tsyscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(old), 0)\n\t}()\n\n\treturn readPasswordLine(passwordReader(fd))\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/test/doc.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// This package contains integration tests for the\n// golang.org/x/crypto/ssh package.\npackage test // import \"golang.org/x/crypto/ssh/test\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/crypto/ssh/transport.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 ssh\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"io\"\n\t\"log\"\n)\n\n// debugTransport if set, will print packet types as they go over the\n// wire. No message decoding is done, to minimize the impact on timing.\nconst debugTransport = false\n\nconst (\n\tgcmCipherID    = \"aes128-gcm@openssh.com\"\n\taes128cbcID    = \"aes128-cbc\"\n\ttripledescbcID = \"3des-cbc\"\n)\n\n// packetConn represents a transport that implements packet based\n// operations.\ntype packetConn interface {\n\t// Encrypt and send a packet of data to the remote peer.\n\twritePacket(packet []byte) error\n\n\t// Read a packet from the connection. The read is blocking,\n\t// i.e. if error is nil, then the returned byte slice is\n\t// always non-empty.\n\treadPacket() ([]byte, error)\n\n\t// Close closes the write-side of the connection.\n\tClose() error\n}\n\n// transport is the keyingTransport that implements the SSH packet\n// protocol.\ntype transport struct {\n\treader connectionState\n\twriter connectionState\n\n\tbufReader *bufio.Reader\n\tbufWriter *bufio.Writer\n\trand      io.Reader\n\tisClient  bool\n\tio.Closer\n}\n\n// packetCipher represents a combination of SSH encryption/MAC\n// protocol.  A single instance should be used for one direction only.\ntype packetCipher interface {\n\t// writePacket encrypts the packet and writes it to w. The\n\t// contents of the packet are generally scrambled.\n\twritePacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error\n\n\t// readPacket reads and decrypts a packet of data. The\n\t// returned packet may be overwritten by future calls of\n\t// readPacket.\n\treadPacket(seqnum uint32, r io.Reader) ([]byte, error)\n}\n\n// connectionState represents one side (read or write) of the\n// connection. This is necessary because each direction has its own\n// keys, and can even have its own algorithms\ntype connectionState struct {\n\tpacketCipher\n\tseqNum           uint32\n\tdir              direction\n\tpendingKeyChange chan packetCipher\n}\n\n// prepareKeyChange sets up key material for a keychange. The key changes in\n// both directions are triggered by reading and writing a msgNewKey packet\n// respectively.\nfunc (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error {\n\tif ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult); err != nil {\n\t\treturn err\n\t} else {\n\t\tt.reader.pendingKeyChange <- ciph\n\t}\n\n\tif ciph, err := newPacketCipher(t.writer.dir, algs.w, kexResult); err != nil {\n\t\treturn err\n\t} else {\n\t\tt.writer.pendingKeyChange <- ciph\n\t}\n\n\treturn nil\n}\n\nfunc (t *transport) printPacket(p []byte, write bool) {\n\tif len(p) == 0 {\n\t\treturn\n\t}\n\twho := \"server\"\n\tif t.isClient {\n\t\twho = \"client\"\n\t}\n\twhat := \"read\"\n\tif write {\n\t\twhat = \"write\"\n\t}\n\n\tlog.Println(what, who, p[0])\n}\n\n// Read and decrypt next packet.\nfunc (t *transport) readPacket() (p []byte, err error) {\n\tfor {\n\t\tp, err = t.reader.readPacket(t.bufReader)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif len(p) == 0 || (p[0] != msgIgnore && p[0] != msgDebug) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif debugTransport {\n\t\tt.printPacket(p, false)\n\t}\n\n\treturn p, err\n}\n\nfunc (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) {\n\tpacket, err := s.packetCipher.readPacket(s.seqNum, r)\n\ts.seqNum++\n\tif err == nil && len(packet) == 0 {\n\t\terr = errors.New(\"ssh: zero length packet\")\n\t}\n\n\tif len(packet) > 0 {\n\t\tswitch packet[0] {\n\t\tcase msgNewKeys:\n\t\t\tselect {\n\t\t\tcase cipher := <-s.pendingKeyChange:\n\t\t\t\ts.packetCipher = cipher\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"ssh: got bogus newkeys message.\")\n\t\t\t}\n\n\t\tcase msgDisconnect:\n\t\t\t// Transform a disconnect message into an\n\t\t\t// error. Since this is lowest level at which\n\t\t\t// we interpret message types, doing it here\n\t\t\t// ensures that we don't have to handle it\n\t\t\t// elsewhere.\n\t\t\tvar msg disconnectMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, &msg\n\t\t}\n\t}\n\n\t// The packet may point to an internal buffer, so copy the\n\t// packet out here.\n\tfresh := make([]byte, len(packet))\n\tcopy(fresh, packet)\n\n\treturn fresh, err\n}\n\nfunc (t *transport) writePacket(packet []byte) error {\n\tif debugTransport {\n\t\tt.printPacket(packet, true)\n\t}\n\treturn t.writer.writePacket(t.bufWriter, t.rand, packet)\n}\n\nfunc (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte) error {\n\tchangeKeys := len(packet) > 0 && packet[0] == msgNewKeys\n\n\terr := s.packetCipher.writePacket(s.seqNum, w, rand, packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = w.Flush(); err != nil {\n\t\treturn err\n\t}\n\ts.seqNum++\n\tif changeKeys {\n\t\tselect {\n\t\tcase cipher := <-s.pendingKeyChange:\n\t\t\ts.packetCipher = cipher\n\t\tdefault:\n\t\t\tpanic(\"ssh: no key material for msgNewKeys\")\n\t\t}\n\t}\n\treturn err\n}\n\nfunc newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transport {\n\tt := &transport{\n\t\tbufReader: bufio.NewReader(rwc),\n\t\tbufWriter: bufio.NewWriter(rwc),\n\t\trand:      rand,\n\t\treader: connectionState{\n\t\t\tpacketCipher:     &streamPacketCipher{cipher: noneCipher{}},\n\t\t\tpendingKeyChange: make(chan packetCipher, 1),\n\t\t},\n\t\twriter: connectionState{\n\t\t\tpacketCipher:     &streamPacketCipher{cipher: noneCipher{}},\n\t\t\tpendingKeyChange: make(chan packetCipher, 1),\n\t\t},\n\t\tCloser: rwc,\n\t}\n\tt.isClient = isClient\n\n\tif isClient {\n\t\tt.reader.dir = serverKeys\n\t\tt.writer.dir = clientKeys\n\t} else {\n\t\tt.reader.dir = clientKeys\n\t\tt.writer.dir = serverKeys\n\t}\n\n\treturn t\n}\n\ntype direction struct {\n\tivTag     []byte\n\tkeyTag    []byte\n\tmacKeyTag []byte\n}\n\nvar (\n\tserverKeys = direction{[]byte{'B'}, []byte{'D'}, []byte{'F'}}\n\tclientKeys = direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}}\n)\n\n// generateKeys generates key material for IV, MAC and encryption.\nfunc generateKeys(d direction, algs directionAlgorithms, kex *kexResult) (iv, key, macKey []byte) {\n\tcipherMode := cipherModes[algs.Cipher]\n\tmacMode := macModes[algs.MAC]\n\n\tiv = make([]byte, cipherMode.ivSize)\n\tkey = make([]byte, cipherMode.keySize)\n\tmacKey = make([]byte, macMode.keySize)\n\n\tgenerateKeyMaterial(iv, d.ivTag, kex)\n\tgenerateKeyMaterial(key, d.keyTag, kex)\n\tgenerateKeyMaterial(macKey, d.macKeyTag, kex)\n\treturn\n}\n\n// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as\n// described in RFC 4253, section 6.4. direction should either be serverKeys\n// (to setup server->client keys) or clientKeys (for client->server keys).\nfunc newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) {\n\tiv, key, macKey := generateKeys(d, algs, kex)\n\n\tif algs.Cipher == gcmCipherID {\n\t\treturn newGCMCipher(iv, key, macKey)\n\t}\n\n\tif algs.Cipher == aes128cbcID {\n\t\treturn newAESCBCCipher(iv, key, macKey, algs)\n\t}\n\n\tif algs.Cipher == tripledescbcID {\n\t\treturn newTripleDESCBCCipher(iv, key, macKey, algs)\n\t}\n\n\tc := &streamPacketCipher{\n\t\tmac: macModes[algs.MAC].new(macKey),\n\t\tetm: macModes[algs.MAC].etm,\n\t}\n\tc.macResult = make([]byte, c.mac.Size())\n\n\tvar err error\n\tc.cipher, err = cipherModes[algs.Cipher].createStream(key, iv)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn c, nil\n}\n\n// generateKeyMaterial fills out with key material generated from tag, K, H\n// and sessionId, as specified in RFC 4253, section 7.2.\nfunc generateKeyMaterial(out, tag []byte, r *kexResult) {\n\tvar digestsSoFar []byte\n\n\th := r.Hash.New()\n\tfor len(out) > 0 {\n\t\th.Reset()\n\t\th.Write(r.K)\n\t\th.Write(r.H)\n\n\t\tif len(digestsSoFar) == 0 {\n\t\t\th.Write(tag)\n\t\t\th.Write(r.SessionID)\n\t\t} else {\n\t\t\th.Write(digestsSoFar)\n\t\t}\n\n\t\tdigest := h.Sum(nil)\n\t\tn := copy(out, digest)\n\t\tout = out[n:]\n\t\tif len(out) > 0 {\n\t\t\tdigestsSoFar = append(digestsSoFar, digest...)\n\t\t}\n\t}\n}\n\nconst packageVersion = \"SSH-2.0-Go\"\n\n// Sends and receives a version line.  The versionLine string should\n// be US ASCII, start with \"SSH-2.0-\", and should not include a\n// newline. exchangeVersions returns the other side's version line.\nfunc exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) {\n\t// Contrary to the RFC, we do not ignore lines that don't\n\t// start with \"SSH-2.0-\" to make the library usable with\n\t// nonconforming servers.\n\tfor _, c := range versionLine {\n\t\t// The spec disallows non US-ASCII chars, and\n\t\t// specifically forbids null chars.\n\t\tif c < 32 {\n\t\t\treturn nil, errors.New(\"ssh: junk character in version line\")\n\t\t}\n\t}\n\tif _, err = rw.Write(append(versionLine, '\\r', '\\n')); err != nil {\n\t\treturn\n\t}\n\n\tthem, err = readVersion(rw)\n\treturn them, err\n}\n\n// maxVersionStringBytes is the maximum number of bytes that we'll\n// accept as a version string. RFC 4253 section 4.2 limits this at 255\n// chars\nconst maxVersionStringBytes = 255\n\n// Read version string as specified by RFC 4253, section 4.2.\nfunc readVersion(r io.Reader) ([]byte, error) {\n\tversionString := make([]byte, 0, 64)\n\tvar ok bool\n\tvar buf [1]byte\n\n\tfor len(versionString) < maxVersionStringBytes {\n\t\t_, err := io.ReadFull(r, buf[:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// The RFC says that the version should be terminated with \\r\\n\n\t\t// but several SSH servers actually only send a \\n.\n\t\tif buf[0] == '\\n' {\n\t\t\tok = true\n\t\t\tbreak\n\t\t}\n\n\t\t// non ASCII chars are disallowed, but we are lenient,\n\t\t// since Go doesn't use null-terminated strings.\n\n\t\t// The RFC allows a comment after a space, however,\n\t\t// all of it (version and comments) goes into the\n\t\t// session hash.\n\t\tversionString = append(versionString, buf[0])\n\t}\n\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: overflow reading version string\")\n\t}\n\n\t// There might be a '\\r' on the end which we should remove.\n\tif len(versionString) > 0 && versionString[len(versionString)-1] == '\\r' {\n\t\tversionString = versionString[:len(versionString)-1]\n\t}\n\treturn versionString, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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-64\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-112\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-64\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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// 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 ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\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": "12fa-docker-golang/chapter3/viper/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\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\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 ·gettimeofday(SB),NOSPLIT,$0-16\n\tJMP\tsyscall·gettimeofday(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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 ·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-32\n\tB\tsyscall·seek(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\t·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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·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": "12fa-docker-golang/chapter3/viper/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\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP syscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP syscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP syscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·RawSyscall6(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\t·Syscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·Syscall6(SB)\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 ·RawSyscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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-64\n\tJMP\tsyscall·sysvicall6(SB)\n\nTEXT ·rawSysvicall6(SB),NOSPLIT,$0-64\n\tJMP\tsyscall·rawSysvicall6(SB)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 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": "12fa-docker-golang/chapter3/viper/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris\n\npackage unix\n\nimport \"unsafe\"\n\n// readInt returns the size-bytes unsigned integer in native byte order at offset off.\nfunc readInt(b []byte, off, size uintptr) (u uint64, ok bool) {\n\tif len(b) < int(off+size) {\n\t\treturn 0, false\n\t}\n\tif isBigEndian {\n\t\treturn readIntBE(b[off:], size), true\n\t}\n\treturn readIntLE(b[off:], size), true\n}\n\nfunc readIntBE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[1]) | uint64(b[0])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\n\nfunc readIntLE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\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\toriglen := len(buf)\n\tcount = 0\n\tfor max != 0 && len(buf) > 0 {\n\t\treclen, ok := direntReclen(buf)\n\t\tif !ok || reclen > uint64(len(buf)) {\n\t\t\treturn origlen, count, names\n\t\t}\n\t\trec := buf[:reclen]\n\t\tbuf = buf[reclen:]\n\t\tino, ok := direntIno(rec)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tif ino == 0 { // File absent in directory.\n\t\t\tcontinue\n\t\t}\n\t\tconst namoff = uint64(unsafe.Offsetof(Dirent{}.Name))\n\t\tnamlen, ok := direntNamlen(rec)\n\t\tif !ok || namoff+namlen > uint64(len(rec)) {\n\t\t\tbreak\n\t\t}\n\t\tname := rec[namoff : namoff+namlen]\n\t\tfor i, c := range name {\n\t\t\tif c == 0 {\n\t\t\t\tname = name[:i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Check for useless names before allocating a string.\n\t\tif string(name) == \".\" || string(name) == \"..\" {\n\t\t\tcontinue\n\t\t}\n\t\tmax--\n\t\tcount++\n\t\tnames = append(names, string(name))\n\t}\n\treturn origlen - len(buf), count, names\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/env_unset.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.4\n\npackage unix\n\nimport \"syscall\"\n\nfunc Unsetenv(key string) error {\n\t// This was added in Go 1.4.\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/flock.go",
    "content": "// +build linux darwin freebsd openbsd netbsd dragonfly\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\n// +build darwin 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// 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/flock_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": "12fa-docker-golang/chapter3/viper/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\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 gccgoRealSyscall\nfunc realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)\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 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": "12fa-docker-golang/chapter3/viper/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\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\n// Define the use function in C so that it is not inlined.\n\nextern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH \".use\") __attribute__((noinline));\n\nvoid\nuse(void *p __attribute__ ((unused)))\n{\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.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 gccgo,linux,sparc64\n\npackage unix\n\nimport \"syscall\"\n\n//extern sysconf\nfunc realSysconf(name int) int64\n\nfunc sysconf(name int) (n int64, err syscall.Errno) {\n\tr := realSysconf(name)\n\tif r < 0 {\n\t\treturn 0, syscall.GetErrno()\n\t}\n\treturn r, 0\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 by mkall.sh.\npackage main\n\nimport (\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\tb, err := ioutil.ReadAll(os.Stdin)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\ts := string(b)\n\n\tgoarch := os.Getenv(\"GOARCH\")\n\tgoos := os.Getenv(\"GOOS\")\n\tif goarch == \"s390x\" && goos == \"linux\" {\n\t\t// Export the types of PtraceRegs fields.\n\t\tre := regexp.MustCompile(\"ptrace(Psw|Fpregs|Per)\")\n\t\ts = re.ReplaceAllString(s, \"Ptrace$1\")\n\n\t\t// Replace padding fields inserted by cgo with blank identifiers.\n\t\tre = regexp.MustCompile(\"Pad_cgo[A-Za-z0-9_]*\")\n\t\ts = re.ReplaceAllString(s, \"_\")\n\n\t\t// Replace other unwanted fields with blank identifiers.\n\t\tre = regexp.MustCompile(\"X_[A-Za-z0-9_]*\")\n\t\ts = re.ReplaceAllString(s, \"_\")\n\n\t\t// Replace the control_regs union with a blank identifier for now.\n\t\tre = regexp.MustCompile(\"(Control_regs)\\\\s+\\\\[0\\\\]uint64\")\n\t\ts = re.ReplaceAllString(s, \"_ [0]uint64\")\n\t}\n\n\t// gofmt\n\tb, err = format.Source([]byte(s))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Append this command to the header to show where the new file\n\t// came from.\n\tre := regexp.MustCompile(\"(cgo -godefs [a-zA-Z0-9_]+\\\\.go.*)\")\n\tb = re.ReplaceAll(b, []byte(\"$1 | go run mkpost.go\"))\n\n\tfmt.Printf(\"%s\", b)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/openbsd_pledge.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 openbsd\n// +build 386 amd64 arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst (\n\tSYS_PLEDGE = 108\n)\n\n// Pledge implements the pledge syscall. For more information see pledge(2).\nfunc Pledge(promises string, paths []string) error {\n\tpromisesPtr, err := syscall.BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\tpromisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)\n\tif paths != nil {\n\t\tvar pathsPtr []*byte\n\t\tif pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpathsUnsafe = unsafe.Pointer(&pathsPtr[0])\n\t}\n\t_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 darwin dragonfly freebsd linux netbsd openbsd solaris\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := sizeofPtr\n\t// NOTE: It seems like 64-bit Darwin and DragonFly BSD kernels\n\t// still require 32-bit aligned access to network subsystem.\n\tif darwin64Bit || dragonfly64Bit {\n\t\tsalign = 4\n\t}\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": "12fa-docker-golang/chapter3/viper/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 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": "12fa-docker-golang/chapter3/viper/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 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// 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// For details of the functions and data types in this package consult\n// the manuals for the appropriate operating system.\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\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\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] == 0 {\n\t\t\treturn nil, EINVAL\n\t\t}\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.\n// See mkunix.pl.\nvar _zero uintptr\n\nfunc (ts *Timespec) Unix() (sec int64, nsec int64) {\n\treturn int64(ts.Sec), int64(ts.Nsec)\n}\n\nfunc (tv *Timeval) Unix() (sec int64, nsec int64) {\n\treturn int64(tv.Sec), int64(tv.Usec) * 1000\n}\n\nfunc (ts *Timespec) Nano() int64 {\n\treturn int64(ts.Sec)*1e9 + int64(ts.Nsec)\n}\n\nfunc (tv *Timeval) Nano() int64 {\n\treturn int64(tv.Sec)*1e9 + int64(tv.Usec)*1000\n}\n\nfunc TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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(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(&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(&rsa)\n}\n\n//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\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 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\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(&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\treturn utimes(path, nil)\n\t}\n\t// TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it\n\t// isn't supported by darwin so this uses utimes instead\n\tif len(ts) != 2 {\n\t\treturn EINVAL\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\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// TODO: wrap\n//\tAcct(name nil-string) (err error)\n//\tGethostuuid(uuid *byte, timeout *Timespec) (err error)\n//\tMadvise(addr *byte, len int, behav int) (err error)\n//\tMprotect(addr *byte, len int, prot int) (err error)\n//\tMsync(addr *byte, len int, flags int) (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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\terrorspkg \"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\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\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\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, errorspkg.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\t_, _, e1 := Syscall6(\n\t\tSYS_GETATTRLIST,\n\t\tuintptr(unsafe.Pointer(_p0)),\n\t\tuintptr(unsafe.Pointer(&attrList)),\n\t\tuintptr(unsafe.Pointer(&attrBuf[0])),\n\t\tuintptr(len(attrBuf)),\n\t\tuintptr(options),\n\t\t0,\n\t)\n\tif e1 != 0 {\n\t\treturn nil, e1\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, errorspkg.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, errorspkg.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//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\tr0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\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/*\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\tExchangedata(path1 string, path2 string, options int) (err error)\n//sys\tExit(code int)\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\tFchown(fd int, uid int, gid 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) = SYS_FSTAT64\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64\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) = SYS_GETDIRENTRIES64\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\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tMkdir(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\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n//sys\tOpen(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\tRename(from string, 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\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tStatfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64\n//sys\tSymlink(path string, link 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\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// Mmap\n// Mlock\n// Munlock\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Poll\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// Mlockall\n// Munlockall\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// Msync_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": "12fa-docker-golang/chapter3/viper/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\t\"unsafe\"\n)\n\nfunc Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int32(nsec / 1e9)\n\treturn\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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar length = uint64(count)\n\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)\n\n\twritten = int(length)\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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\t\"unsafe\"\n)\n\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n\nfunc Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar length = uint64(count)\n\n\t_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)\n\n\twritten = int(length)\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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\t\"unsafe\"\n)\n\nfunc Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int32(nsec / 1e9)\n\treturn\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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar length = uint64(count)\n\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)\n\n\twritten = int(length)\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) // sic\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\t\"unsafe\"\n)\n\nfunc Getpagesize() int { return 16384 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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 sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar length = uint64(count)\n\n\t_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)\n\n\twritten = int(length)\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) // 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/syscall_dragonfly.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 \"unsafe\"\n\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\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\tnamlen, ok := direntNamlen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn (16 + namlen + 1 + 7) & ^7, true\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\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 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\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\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\tFchown(fd int, uid int, gid 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\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\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\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(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\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\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\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\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\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 * TODO(jsing): Update this list for DragonFly.\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// Mmap\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Poll\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// Msync_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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = nsec % 1e9 / 1e3\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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 \"unsafe\"\n\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 direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\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 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(&rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\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\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\n// Derive extattr namespace and attribute name\n\nfunc xattrnamespace(fullattr string) (ns int, attr string, err error) {\n\ts := -1\n\tfor idx, val := range fullattr {\n\t\tif val == '.' {\n\t\t\ts = idx\n\t\t\tbreak\n\t\t}\n\t}\n\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 implements its 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\td := unsafe.Pointer(&data[0])\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\td := unsafe.Pointer(&data[0])\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\td := unsafe.Pointer(&data[0])\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\tvar e error\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\te = nil\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, e\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\tvar e error\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\te = nil\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, e\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\tvar e error\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\te = nil\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, e\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\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\tFchown(fd int, uid int, gid 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\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\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\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(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\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\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\tRename(from string, 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\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\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\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// Mmap\n// Mlock\n// Munlock\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Poll\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// Mlockall\n// Munlockall\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// Msync_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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int32(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = nsec % 1e9 / 1e3\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = nsec / 1e9\n\treturn\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": "12fa-docker-golang/chapter3/viper/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\"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\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\n//sys\tutimes(path string, times *[2]Timeval) (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\n//sys\tfutimesat(dirfd 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\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) (err error) {\n\treturn Mknod(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\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\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\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// 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\nfunc anyToSockaddr(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\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(&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(&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(&rsa)\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 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 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 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\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 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(&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)(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// 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 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\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\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\n// Sendto\n// Recvfrom\n// Socketpair\n\n/*\n * Direct access\n */\n//sys\tAcct(path string) (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\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd 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\tEpollCreate(size int) (fd 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\tExit(code int) = SYS_EXIT_GROUP\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\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\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\tfcntl(fd int, cmd int, arg int) (val int, err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFlock(fd int, how 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\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\tListxattr(path string, dest []byte) (sz 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\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\tread(fd int, p []byte) (n int, err error)\n//sys\tRemovexattr(path string, attr string) (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//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\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\tSync()\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\tUstat(dev int, ubuf *Ustat_t) (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\tMunlock(b []byte) (err error)\n//sys\tMlockall(flags int) (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\tn, _, errno := Syscall6(\n\t\tSYS_VMSPLICE,\n\t\tuintptr(fd),\n\t\tuintptr(unsafe.Pointer(&iovs[0])),\n\t\tuintptr(len(iovs)),\n\t\tuintptr(flags),\n\t\t0,\n\t\t0,\n\t)\n\tif errno != 0 {\n\t\treturn 0, syscall.Errno(errno)\n\t}\n\n\treturn int(n), nil\n}\n\n/*\n * Unimplemented\n */\n// AddKey\n// AfsSyscall\n// Alarm\n// ArchPrctl\n// Brk\n// Capget\n// Capset\n// ClockGetres\n// ClockNanosleep\n// ClockSettime\n// Clone\n// CreateModule\n// DeleteModule\n// EpollCtlOld\n// EpollPwait\n// EpollWaitOld\n// Eventfd\n// Execve\n// Fgetxattr\n// Flistxattr\n// Fork\n// Fremovexattr\n// Fsetxattr\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// Ioctl\n// IoprioGet\n// IoprioSet\n// KexecLoad\n// Keyctl\n// Lgetxattr\n// Llistxattr\n// LookupDcookie\n// Lremovexattr\n// Lsetxattr\n// Mbind\n// MigratePages\n// Mincore\n// ModifyLdt\n// Mount\n// MovePages\n// Mprotect\n// MqGetsetattr\n// MqNotify\n// MqOpen\n// MqTimedreceive\n// MqTimedsend\n// MqUnlink\n// Mremap\n// Msgctl\n// Msgget\n// Msgrcv\n// Msgsnd\n// Msync\n// Newfstatat\n// Nfsservctl\n// Personality\n// Pselect6\n// Ptrace\n// Putpmsg\n// QueryModule\n// Quotactl\n// Readahead\n// Readv\n// RemapFilePages\n// RequestKey\n// RestartSyscall\n// RtSigaction\n// RtSigpending\n// RtSigprocmask\n// RtSigqueueinfo\n// RtSigreturn\n// RtSigsuspend\n// RtSigtimedwait\n// SchedGetPriorityMax\n// SchedGetPriorityMin\n// SchedGetaffinity\n// SchedGetparam\n// SchedGetscheduler\n// SchedRrGetInterval\n// SchedSetaffinity\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// Signalfd\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": "12fa-docker-golang/chapter3/viper/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\"syscall\"\n\t\"unsafe\"\n)\n\nfunc Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = int32(nsec / 1e9)\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\treturn\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//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\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\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//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\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, 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\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// Vsyscalls on amd64.\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n\n//sys\tUtime(path string, buf *Utimbuf) (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 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\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": "12fa-docker-golang/chapter3/viper/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//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\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\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\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 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 Getpagesize() int { return 4096 }\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\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = nsec % 1e9 / 1e3\n\treturn\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = int32(nsec / 1e9)\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\treturn\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\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//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//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\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\n// Vsyscalls on amd64.\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tPause() (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   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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\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//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6\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//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 Getpagesize() int { return 65536 }\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = nsec % 1e9 / 1e3\n\treturn\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 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() (err error) {\n\t_, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove\n// these when the deprecated syscalls that the syscall package relies on\n// are removed.\nconst (\n\tSYS_GETPGRP      = 1060\n\tSYS_UTIMES       = 1037\n\tSYS_FUTIMESAT    = 1066\n\tSYS_PAUSE        = 1061\n\tSYS_USTAT        = 1070\n\tSYS_UTIME        = 1063\n\tSYS_LCHOWN       = 1032\n\tSYS_TIME         = 1062\n\tSYS_EPOLL_CREATE = 1042\n\tSYS_EPOLL_WAIT   = 1069\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\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\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_PSELECT6\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\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 Getpagesize() int { return 65536 }\n\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\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = nsec % 1e9 / 1e3\n\treturn\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\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 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.Regs[64] }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Regs[64] = 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": "12fa-docker-golang/chapter3/viper/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//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\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\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\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\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//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, 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\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\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 TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int32(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = int32(nsec / 1e9)\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\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 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//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 uint64(r.Regs[64]) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Regs[64] = 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\nfunc Getpagesize() int { return 4096 }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\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\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\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) = SYS_SYNC_FILE_RANGE2\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 Getpagesize() int { return 65536 }\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = nsec % 1e9 / 1e3\n\treturn\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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//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\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\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//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n\nfunc Getpagesize() int { return 4096 }\n\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\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = nsec % 1e9 / 1e3\n\treturn\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\nimport (\n\t\"sync/atomic\"\n\t\"syscall\"\n)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\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\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\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 sysconf(name int) (n int64, err syscall.Errno)\n\n// pageSize caches the value of Getpagesize, since it can't change\n// once the system is booted.\nvar pageSize int64 // accessed atomically\n\nfunc Getpagesize() int {\n\tn := atomic.LoadInt64(&pageSize)\n\tif n == 0 {\n\t\tn, _ = sysconf(_SC_PAGESIZE)\n\t\tatomic.StoreInt64(&pageSize, n)\n\t}\n\treturn int(n)\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\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\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Sec = nsec / 1e9\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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\"syscall\"\n\t\"unsafe\"\n)\n\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\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 direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\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\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\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\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\tFchown(fd int, uid int, gid 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\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\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\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(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\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\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\tRename(from string, 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\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\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\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_fadvise50\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// ioctl\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// poll\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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int64(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int64(nsec / 1e9)\n\tts.Nsec = int64(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int64(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/syscall_no_getwd.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 dragonfly freebsd netbsd openbsd\n\npackage unix\n\nconst ImplementsGetwd = false\n\nfunc Getwd() (string, error) { return \"\", ENOTSUP }\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\"syscall\"\n\t\"unsafe\"\n)\n\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\n\t// Perform lookup via a binary search\n\tleft := 0\n\tright := len(sysctlMib) - 1\n\tfor {\n\t\tidx := left + (right-left)/2\n\t\tswitch {\n\t\tcase name == sysctlMib[idx].ctlname:\n\t\t\treturn sysctlMib[idx].ctloid, nil\n\t\tcase name > sysctlMib[idx].ctlname:\n\t\t\tleft = idx + 1\n\t\tdefault:\n\t\t\tright = idx - 1\n\t\t}\n\t\tif left > right {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nil, EINVAL\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\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\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\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\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\tFchown(fd int, uid int, gid 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\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\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\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\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(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\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\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\tRename(from string, 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\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\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\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// faccessat\n// fchmodat\n// fchownat\n// fcntl\n// fhopen\n// fhstat\n// fhstatfs\n// fork\n// fstatat\n// futimens\n// getfh\n// getgid\n// getitimer\n// getlogin\n// getresgid\n// getresuid\n// getrtable\n// getthrid\n// ioctl\n// ktrace\n// lfs_bmapv\n// lfs_markv\n// lfs_segclean\n// lfs_segwait\n// linkat\n// mincore\n// minherit\n// mkdirat\n// mkfifoat\n// mknodat\n// mount\n// mquery\n// msgctl\n// msgget\n// msgrcv\n// msgsnd\n// nfssvc\n// nnpfspioctl\n// openat\n// poll\n// preadv\n// profil\n// pwritev\n// quotactl\n// readlinkat\n// readv\n// reboot\n// renameat\n// rfork\n// sched_yield\n// semget\n// semop\n// setgroups\n// setitimer\n// setrtable\n// setsockopt\n// shmat\n// shmctl\n// shmdt\n// shmget\n// sigaction\n// sigaltstack\n// sigpending\n// sigprocmask\n// sigreturn\n// sigsuspend\n// symlinkat\n// sysarch\n// syscall\n// threxit\n// thrsigdivert\n// thrsleep\n// thrwakeup\n// unlinkat\n// utimensat\n// vfork\n// writev\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = int64(nsec / 1e9)\n\tts.Nsec = int32(nsec % 1e9)\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 Getpagesize() int { return 4096 }\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = nsec % 1e9 / 1e3\n\ttv.Sec = nsec / 1e9\n\treturn\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\"sync/atomic\"\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\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\nfunc clen(n []byte) int {\n\tfor i := 0; i < len(n); i++ {\n\t\tif n[i] == 0 {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn len(n)\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\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(&rsa)\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// 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(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(&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.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.Accrights = (*int8)(unsafe.Pointer(&oob[0]))\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(&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.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.Accrights = (*int8)(unsafe.Pointer(&oob[0]))\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/*\n * Expose the ioctl function\n */\n\n//sys\tioctl(fd int, req int, arg uintptr) (err error)\n\nfunc IoctlSetInt(fd int, req int, value int) (err error) {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc IoctlSetWinsize(fd int, req int, value *Winsize) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlSetTermios(fd int, req int, value *Termios) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlSetTermio(fd int, req int, value *Termio) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlGetInt(fd int, req int) (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 int) (*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 int) (*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 int) (*Termio, error) {\n\tvar value Termio\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\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\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\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_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.listen\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\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//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\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.bind\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.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\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.sendto\n//sys\tsocket(domain int, typ int, proto int) (fd int, err error) = libsocket.socket\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.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.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\n//sys\tsysconf(name int) (n int64, err error)\n\n// pageSize caches the value of Getpagesize, since it can't change\n// once the system is booted.\nvar pageSize int64 // accessed atomically\n\nfunc Getpagesize() int {\n\tn := atomic.LoadInt64(&pageSize)\n\tif n == 0 {\n\t\tn, _ = sysconf(_SC_PAGESIZE)\n\t\tatomic.StoreInt64(&pageSize, n)\n\t}\n\treturn int(n)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = nsec % 1e9 / 1e3\n\ttv.Sec = int64(nsec / 1e9)\n\treturn\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\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\t// TODO(aram): implement this, see issue 5847.\n\tpanic(\"unimplemented\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\nconst (\n\tdarwin64Bit    = runtime.GOOS == \"darwin\" && sizeofPtr == 8\n\tdragonfly64Bit = runtime.GOOS == \"dragonfly\" && sizeofPtr == 8\n\tnetbsd32Bit    = runtime.GOOS == \"netbsd\" && sizeofPtr == 4\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\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// 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\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\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(&rsa)\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 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(&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\treturn setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), 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 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\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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\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": "12fa-docker-golang/chapter3/viper/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 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#define __DARWIN_UNIX03 0\n#define KERNEL\n#define _DARWIN_USE_64_BIT_INODE\n#include <dirent.h>\n#include <fcntl.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/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; for internal use.\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\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 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#define KERNEL\n#include <dirent.h>\n#include <fcntl.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/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; for internal use.\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 ( // Directory mode bits\n\tS_IFMT   = C.S_IFMT\n\tS_IFIFO  = C.S_IFIFO\n\tS_IFCHR  = C.S_IFCHR\n\tS_IFDIR  = C.S_IFDIR\n\tS_IFBLK  = C.S_IFBLK\n\tS_IFREG  = C.S_IFREG\n\tS_IFLNK  = C.S_IFLNK\n\tS_IFSOCK = C.S_IFSOCK\n\tS_ISUID  = C.S_ISUID\n\tS_ISGID  = C.S_ISGID\n\tS_ISVTX  = C.S_ISVTX\n\tS_IRUSR  = C.S_IRUSR\n\tS_IWUSR  = C.S_IWUSR\n\tS_IXUSR  = C.S_IXUSR\n)\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// 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 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#define KERNEL\n#include <dirent.h>\n#include <fcntl.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/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 stat on FreeBSD 8-STABLE.\n// See /usr/include/sys/stat.h.\nstruct stat8 {\n#undef st_atimespec\tst_atim\n#undef st_mtimespec\tst_mtim\n#undef st_ctimespec\tst_ctim\n#undef st_birthtimespec\tst_birthtim\n\t__dev_t   st_dev;\n\tino_t     st_ino;\n\tmode_t    st_mode;\n\tnlink_t   st_nlink;\n\tuid_t     st_uid;\n\tgid_t     st_gid;\n\t__dev_t   st_rdev;\n#if __BSD_VISIBLE\n\tstruct  timespec st_atimespec;\n\tstruct  timespec st_mtimespec;\n\tstruct  timespec st_ctimespec;\n#else\n\ttime_t    st_atime;\n\tlong      __st_atimensec;\n\ttime_t    st_mtime;\n\tlong      __st_mtimensec;\n\ttime_t    st_ctime;\n\tlong      __st_ctimensec;\n#endif\n\toff_t     st_size;\n\tblkcnt_t st_blocks;\n\tblksize_t st_blksize;\n\tfflags_t  st_flags;\n\t__uint32_t st_gen;\n\t__int32_t st_lspare;\n#if __BSD_VISIBLE\n\tstruct timespec st_birthtimespec;\n\tunsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));\n\tunsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));\n#else\n\ttime_t    st_birthtime;\n\tlong      st_birthtimensec;\n\tunsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));\n\tunsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));\n#endif\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\ttime_t  ifi_epoch;\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; for internal use.\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 ( // Directory mode bits\n\tS_IFMT   = C.S_IFMT\n\tS_IFIFO  = C.S_IFIFO\n\tS_IFCHR  = C.S_IFCHR\n\tS_IFDIR  = C.S_IFDIR\n\tS_IFBLK  = C.S_IFBLK\n\tS_IFREG  = C.S_IFREG\n\tS_IFLNK  = C.S_IFLNK\n\tS_IFSOCK = C.S_IFSOCK\n\tS_ISUID  = C.S_ISUID\n\tS_ISGID  = C.S_ISGID\n\tS_ISVTX  = C.S_ISVTX\n\tS_IRUSR  = C.S_IRUSR\n\tS_IWUSR  = C.S_IWUSR\n\tS_IXUSR  = C.S_IXUSR\n)\n\ntype Stat_t C.struct_stat8\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// 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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/types_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// +build ignore\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#define _LARGEFILE_SOURCE\n#define _LARGEFILE64_SOURCE\n#define _FILE_OFFSET_BITS 64\n#define _GNU_SOURCE\n\n#include <dirent.h>\n#include <fcntl.h>\n#include <netinet/in.h>\n#include <netinet/tcp.h>\n#include <netpacket/packet.h>\n#include <poll.h>\n#include <signal.h>\n#include <stdio.h>\n#include <sys/epoll.h>\n#include <sys/inotify.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/stat.h>\n#include <sys/statfs.h>\n#include <sys/sysinfo.h>\n#include <sys/time.h>\n#include <sys/times.h>\n#include <sys/timex.h>\n#include <sys/types.h>\n#include <sys/un.h>\n#include <sys/user.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <linux/filter.h>\n#include <linux/netlink.h>\n#include <linux/rtnetlink.h>\n#include <linux/icmpv6.h>\n#include <asm/termbits.h>\n#include <time.h>\n#include <unistd.h>\n#include <ustat.h>\n#include <utime.h>\n#include <bluetooth/bluetooth.h>\n#include <bluetooth/hci.h>\n#include <linux/can.h>\n#include <linux/if_alg.h>\n#include <linux/vm_sockets.h>\n\n#ifdef TCSETS2\n// On systems that have \"struct termios2\" use this as type Termios.\ntypedef struct termios2 termios_t;\n#else\ntypedef struct termios termios_t;\n#endif\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_ll s5;\n\tstruct sockaddr_nl s6;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n// copied from /usr/include/linux/un.h\nstruct my_sockaddr_un {\n\tsa_family_t sun_family;\n#if defined(__ARM_EABI__) || defined(__powerpc64__)\n\t// on ARM char is by default unsigned\n\tsigned char sun_path[108];\n#else\n\tchar sun_path[108];\n#endif\n};\n\n#ifdef __ARM_EABI__\ntypedef struct user_regs PtraceRegs;\n#elif defined(__aarch64__)\ntypedef struct user_pt_regs PtraceRegs;\n#elif defined(__powerpc64__)\ntypedef struct pt_regs PtraceRegs;\n#elif defined(__mips__)\ntypedef struct user PtraceRegs;\n#elif defined(__s390x__)\ntypedef struct _user_regs_struct PtraceRegs;\n#elif defined(__sparc__)\n#include <asm/ptrace.h>\ntypedef struct pt_regs PtraceRegs;\n#else\ntypedef struct user_regs_struct PtraceRegs;\n#endif\n\n#if defined(__s390x__)\ntypedef struct _user_psw_struct ptracePsw;\ntypedef struct _user_fpregs_struct ptraceFpregs;\ntypedef struct _user_per_struct ptracePer;\n#else\ntypedef struct {} ptracePsw;\ntypedef struct {} ptraceFpregs;\ntypedef struct {} ptracePer;\n#endif\n\n// The real epoll_event is a union, and godefs doesn't handle it well.\nstruct my_epoll_event {\n\tuint32_t events;\n#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32)\n\t// padding is not specified in linux/eventpoll.h but added to conform to the\n\t// alignment requirements of EABI\n\tint32_t padFd;\n#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__)\n\tint32_t _padFd;\n#endif\n\tint32_t fd;\n\tint32_t pad;\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics; for internal use.\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\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\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\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 Dirent C.struct_dirent\n\ntype Fsid C.fsid_t\n\ntype Flock_t C.struct_flock\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_my_sockaddr_un\n\ntype RawSockaddrLinklayer C.struct_sockaddr_ll\n\ntype RawSockaddrNetlink C.struct_sockaddr_nl\n\ntype RawSockaddrHCI C.struct_sockaddr_hci\n\ntype RawSockaddrCAN C.struct_sockaddr_can\n\ntype RawSockaddrALG C.struct_sockaddr_alg\n\ntype RawSockaddrVM C.struct_sockaddr_vm\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 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\ntype Ucred C.struct_ucred\n\ntype TCPInfo C.struct_tcp_info\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\tSizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll\n\tSizeofSockaddrNetlink   = C.sizeof_struct_sockaddr_nl\n\tSizeofSockaddrHCI       = C.sizeof_struct_sockaddr_hci\n\tSizeofSockaddrCAN       = C.sizeof_struct_sockaddr_can\n\tSizeofSockaddrALG       = C.sizeof_struct_sockaddr_alg\n\tSizeofSockaddrVM        = C.sizeof_struct_sockaddr_vm\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\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\tSizeofUcred             = C.sizeof_struct_ucred\n\tSizeofTCPInfo           = C.sizeof_struct_tcp_info\n)\n\n// Netlink routing and interface messages\n\nconst (\n\tIFA_UNSPEC          = C.IFA_UNSPEC\n\tIFA_ADDRESS         = C.IFA_ADDRESS\n\tIFA_LOCAL           = C.IFA_LOCAL\n\tIFA_LABEL           = C.IFA_LABEL\n\tIFA_BROADCAST       = C.IFA_BROADCAST\n\tIFA_ANYCAST         = C.IFA_ANYCAST\n\tIFA_CACHEINFO       = C.IFA_CACHEINFO\n\tIFA_MULTICAST       = C.IFA_MULTICAST\n\tIFLA_UNSPEC         = C.IFLA_UNSPEC\n\tIFLA_ADDRESS        = C.IFLA_ADDRESS\n\tIFLA_BROADCAST      = C.IFLA_BROADCAST\n\tIFLA_IFNAME         = C.IFLA_IFNAME\n\tIFLA_MTU            = C.IFLA_MTU\n\tIFLA_LINK           = C.IFLA_LINK\n\tIFLA_QDISC          = C.IFLA_QDISC\n\tIFLA_STATS          = C.IFLA_STATS\n\tIFLA_COST           = C.IFLA_COST\n\tIFLA_PRIORITY       = C.IFLA_PRIORITY\n\tIFLA_MASTER         = C.IFLA_MASTER\n\tIFLA_WIRELESS       = C.IFLA_WIRELESS\n\tIFLA_PROTINFO       = C.IFLA_PROTINFO\n\tIFLA_TXQLEN         = C.IFLA_TXQLEN\n\tIFLA_MAP            = C.IFLA_MAP\n\tIFLA_WEIGHT         = C.IFLA_WEIGHT\n\tIFLA_OPERSTATE      = C.IFLA_OPERSTATE\n\tIFLA_LINKMODE       = C.IFLA_LINKMODE\n\tIFLA_LINKINFO       = C.IFLA_LINKINFO\n\tIFLA_NET_NS_PID     = C.IFLA_NET_NS_PID\n\tIFLA_IFALIAS        = C.IFLA_IFALIAS\n\tIFLA_MAX            = C.IFLA_MAX\n\tRT_SCOPE_UNIVERSE   = C.RT_SCOPE_UNIVERSE\n\tRT_SCOPE_SITE       = C.RT_SCOPE_SITE\n\tRT_SCOPE_LINK       = C.RT_SCOPE_LINK\n\tRT_SCOPE_HOST       = C.RT_SCOPE_HOST\n\tRT_SCOPE_NOWHERE    = C.RT_SCOPE_NOWHERE\n\tRT_TABLE_UNSPEC     = C.RT_TABLE_UNSPEC\n\tRT_TABLE_COMPAT     = C.RT_TABLE_COMPAT\n\tRT_TABLE_DEFAULT    = C.RT_TABLE_DEFAULT\n\tRT_TABLE_MAIN       = C.RT_TABLE_MAIN\n\tRT_TABLE_LOCAL      = C.RT_TABLE_LOCAL\n\tRT_TABLE_MAX        = C.RT_TABLE_MAX\n\tRTA_UNSPEC          = C.RTA_UNSPEC\n\tRTA_DST             = C.RTA_DST\n\tRTA_SRC             = C.RTA_SRC\n\tRTA_IIF             = C.RTA_IIF\n\tRTA_OIF             = C.RTA_OIF\n\tRTA_GATEWAY         = C.RTA_GATEWAY\n\tRTA_PRIORITY        = C.RTA_PRIORITY\n\tRTA_PREFSRC         = C.RTA_PREFSRC\n\tRTA_METRICS         = C.RTA_METRICS\n\tRTA_MULTIPATH       = C.RTA_MULTIPATH\n\tRTA_FLOW            = C.RTA_FLOW\n\tRTA_CACHEINFO       = C.RTA_CACHEINFO\n\tRTA_TABLE           = C.RTA_TABLE\n\tRTN_UNSPEC          = C.RTN_UNSPEC\n\tRTN_UNICAST         = C.RTN_UNICAST\n\tRTN_LOCAL           = C.RTN_LOCAL\n\tRTN_BROADCAST       = C.RTN_BROADCAST\n\tRTN_ANYCAST         = C.RTN_ANYCAST\n\tRTN_MULTICAST       = C.RTN_MULTICAST\n\tRTN_BLACKHOLE       = C.RTN_BLACKHOLE\n\tRTN_UNREACHABLE     = C.RTN_UNREACHABLE\n\tRTN_PROHIBIT        = C.RTN_PROHIBIT\n\tRTN_THROW           = C.RTN_THROW\n\tRTN_NAT             = C.RTN_NAT\n\tRTN_XRESOLVE        = C.RTN_XRESOLVE\n\tRTNLGRP_NONE        = C.RTNLGRP_NONE\n\tRTNLGRP_LINK        = C.RTNLGRP_LINK\n\tRTNLGRP_NOTIFY      = C.RTNLGRP_NOTIFY\n\tRTNLGRP_NEIGH       = C.RTNLGRP_NEIGH\n\tRTNLGRP_TC          = C.RTNLGRP_TC\n\tRTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR\n\tRTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE\n\tRTNLGRP_IPV4_ROUTE  = C.RTNLGRP_IPV4_ROUTE\n\tRTNLGRP_IPV4_RULE   = C.RTNLGRP_IPV4_RULE\n\tRTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR\n\tRTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE\n\tRTNLGRP_IPV6_ROUTE  = C.RTNLGRP_IPV6_ROUTE\n\tRTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO\n\tRTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX\n\tRTNLGRP_IPV6_RULE   = C.RTNLGRP_IPV6_RULE\n\tRTNLGRP_ND_USEROPT  = C.RTNLGRP_ND_USEROPT\n\tSizeofNlMsghdr      = C.sizeof_struct_nlmsghdr\n\tSizeofNlMsgerr      = C.sizeof_struct_nlmsgerr\n\tSizeofRtGenmsg      = C.sizeof_struct_rtgenmsg\n\tSizeofNlAttr        = C.sizeof_struct_nlattr\n\tSizeofRtAttr        = C.sizeof_struct_rtattr\n\tSizeofIfInfomsg     = C.sizeof_struct_ifinfomsg\n\tSizeofIfAddrmsg     = C.sizeof_struct_ifaddrmsg\n\tSizeofRtMsg         = C.sizeof_struct_rtmsg\n\tSizeofRtNexthop     = C.sizeof_struct_rtnexthop\n)\n\ntype NlMsghdr C.struct_nlmsghdr\n\ntype NlMsgerr C.struct_nlmsgerr\n\ntype RtGenmsg C.struct_rtgenmsg\n\ntype NlAttr C.struct_nlattr\n\ntype RtAttr C.struct_rtattr\n\ntype IfInfomsg C.struct_ifinfomsg\n\ntype IfAddrmsg C.struct_ifaddrmsg\n\ntype RtMsg C.struct_rtmsg\n\ntype RtNexthop C.struct_rtnexthop\n\n// Linux socket filter\n\nconst (\n\tSizeofSockFilter = C.sizeof_struct_sock_filter\n\tSizeofSockFprog  = C.sizeof_struct_sock_fprog\n)\n\ntype SockFilter C.struct_sock_filter\n\ntype SockFprog C.struct_sock_fprog\n\n// Inotify\n\ntype InotifyEvent C.struct_inotify_event\n\nconst SizeofInotifyEvent = C.sizeof_struct_inotify_event\n\n// Ptrace\n\n// Register structures\ntype PtraceRegs C.PtraceRegs\n\n// Structures contained in PtraceRegs on s390x (exported by mkpost.go)\ntype ptracePsw C.ptracePsw\n\ntype ptraceFpregs C.ptraceFpregs\n\ntype ptracePer C.ptracePer\n\n// Misc\n\ntype FdSet C.fd_set\n\ntype Sysinfo_t C.struct_sysinfo\n\ntype Utsname C.struct_utsname\n\ntype Ustat_t C.struct_ustat\n\ntype EpollEvent C.struct_my_epoll_event\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\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLIN    = C.POLLIN\n\tPOLLPRI   = C.POLLPRI\n\tPOLLOUT   = C.POLLOUT\n\tPOLLRDHUP = C.POLLRDHUP\n\tPOLLERR   = C.POLLERR\n\tPOLLHUP   = C.POLLHUP\n\tPOLLNVAL  = C.POLLNVAL\n)\n\ntype Sigset_t C.sigset_t\n\n// sysconf information\n\nconst _SC_PAGESIZE = C._SC_PAGESIZE\n\n// Terminal handling\n\ntype Termios C.termios_t\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 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#define KERNEL\n#include <dirent.h>\n#include <fcntl.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/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; for internal use.\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// 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\n// Sysctl\n\ntype Sysctlnode C.struct_sysctlnode\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 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#define KERNEL\n#include <dirent.h>\n#include <fcntl.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/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; for internal use.\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 ( // Directory mode bits\n\tS_IFMT   = C.S_IFMT\n\tS_IFIFO  = C.S_IFIFO\n\tS_IFCHR  = C.S_IFCHR\n\tS_IFDIR  = C.S_IFDIR\n\tS_IFBLK  = C.S_IFBLK\n\tS_IFREG  = C.S_IFREG\n\tS_IFLNK  = C.S_IFLNK\n\tS_IFSOCK = C.S_IFSOCK\n\tS_ISUID  = C.S_ISUID\n\tS_ISGID  = C.S_ISGID\n\tS_ISVTX  = C.S_ISVTX\n\tS_IRUSR  = C.S_IRUSR\n\tS_IWUSR  = C.S_IWUSR\n\tS_IXUSR  = C.S_IXUSR\n)\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// 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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 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#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 <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/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; for internal use.\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\nconst ( // Directory mode bits\n\tS_IFMT   = C.S_IFMT\n\tS_IFIFO  = C.S_IFIFO\n\tS_IFCHR  = C.S_IFCHR\n\tS_IFDIR  = C.S_IFDIR\n\tS_IFBLK  = C.S_IFBLK\n\tS_IFREG  = C.S_IFREG\n\tS_IFLNK  = C.S_IFLNK\n\tS_IFSOCK = C.S_IFSOCK\n\tS_ISUID  = C.S_ISUID\n\tS_ISGID  = C.S_ISGID\n\tS_ISVTX  = C.S_ISVTX\n\tS_IRUSR  = C.S_IRUSR\n\tS_IWUSR  = C.S_IWUSR\n\tS_IXUSR  = C.S_IXUSR\n)\n\ntype Stat_t C.struct_stat\n\ntype Flock_t C.struct_flock\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 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// sysconf information\n\nconst _SC_PAGESIZE = C._SC_PAGESIZE\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Termio C.struct_termio\n\ntype Winsize C.struct_winsize\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go",
    "content": "// mkerrors.sh -m32\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\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_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_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xe\n\tEVFILT_THREADMARKER               = 0xe\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_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\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\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_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_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\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_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_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\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_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 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_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\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\tNOFLSH                            = 0x80000000\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_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\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\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_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_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_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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_ENABLE_ECN                    = 0x104\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\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)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"device not configured\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource deadlock avoided\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"resource busy\",\n\t17:  \"file exists\",\n\t18:  \"cross-device link\",\n\t19:  \"operation not supported by device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"result too large\",\n\t35:  \"resource temporarily unavailable\",\n\t36:  \"operation now in progress\",\n\t37:  \"operation already in progress\",\n\t38:  \"socket operation on non-socket\",\n\t39:  \"destination address required\",\n\t40:  \"message too long\",\n\t41:  \"protocol wrong type for socket\",\n\t42:  \"protocol not available\",\n\t43:  \"protocol not supported\",\n\t44:  \"socket type not supported\",\n\t45:  \"operation not supported\",\n\t46:  \"protocol family not supported\",\n\t47:  \"address family not supported by protocol family\",\n\t48:  \"address already in use\",\n\t49:  \"can't assign requested address\",\n\t50:  \"network is down\",\n\t51:  \"network is unreachable\",\n\t52:  \"network dropped connection on reset\",\n\t53:  \"software caused connection abort\",\n\t54:  \"connection reset by peer\",\n\t55:  \"no buffer space available\",\n\t56:  \"socket is already connected\",\n\t57:  \"socket is not connected\",\n\t58:  \"can't send after socket shutdown\",\n\t59:  \"too many references: can't splice\",\n\t60:  \"operation timed out\",\n\t61:  \"connection refused\",\n\t62:  \"too many levels of symbolic links\",\n\t63:  \"file name too long\",\n\t64:  \"host is down\",\n\t65:  \"no route to host\",\n\t66:  \"directory not empty\",\n\t67:  \"too many processes\",\n\t68:  \"too many users\",\n\t69:  \"disc quota exceeded\",\n\t70:  \"stale NFS file handle\",\n\t71:  \"too many levels of remote in path\",\n\t72:  \"RPC struct is bad\",\n\t73:  \"RPC version wrong\",\n\t74:  \"RPC prog. not avail\",\n\t75:  \"program version wrong\",\n\t76:  \"bad procedure for program\",\n\t77:  \"no locks available\",\n\t78:  \"function not implemented\",\n\t79:  \"inappropriate file type or format\",\n\t80:  \"authentication error\",\n\t81:  \"need authenticator\",\n\t82:  \"device power is off\",\n\t83:  \"device error\",\n\t84:  \"value too large to be stored in data type\",\n\t85:  \"bad executable (or shared library)\",\n\t86:  \"bad CPU type in executable\",\n\t87:  \"shared library version mismatch\",\n\t88:  \"malformed Mach-o file\",\n\t89:  \"operation canceled\",\n\t90:  \"identifier removed\",\n\t91:  \"no message of desired type\",\n\t92:  \"illegal byte sequence\",\n\t93:  \"attribute not found\",\n\t94:  \"bad message\",\n\t95:  \"EMULTIHOP (Reserved)\",\n\t96:  \"no message available on STREAM\",\n\t97:  \"ENOLINK (Reserved)\",\n\t98:  \"no STREAM resources\",\n\t99:  \"not a STREAM\",\n\t100: \"protocol error\",\n\t101: \"STREAM ioctl timeout\",\n\t102: \"operation not supported on socket\",\n\t103: \"policy not found\",\n\t104: \"state not recoverable\",\n\t105: \"previous owner died\",\n\t106: \"interface output queue is full\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\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_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_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xe\n\tEVFILT_THREADMARKER               = 0xe\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_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\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\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_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_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\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_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_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\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_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 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_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\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\tNOFLSH                            = 0x80000000\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_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\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\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_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_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_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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_ENABLE_ECN                    = 0x104\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\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)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"device not configured\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource deadlock avoided\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"resource busy\",\n\t17:  \"file exists\",\n\t18:  \"cross-device link\",\n\t19:  \"operation not supported by device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"result too large\",\n\t35:  \"resource temporarily unavailable\",\n\t36:  \"operation now in progress\",\n\t37:  \"operation already in progress\",\n\t38:  \"socket operation on non-socket\",\n\t39:  \"destination address required\",\n\t40:  \"message too long\",\n\t41:  \"protocol wrong type for socket\",\n\t42:  \"protocol not available\",\n\t43:  \"protocol not supported\",\n\t44:  \"socket type not supported\",\n\t45:  \"operation not supported\",\n\t46:  \"protocol family not supported\",\n\t47:  \"address family not supported by protocol family\",\n\t48:  \"address already in use\",\n\t49:  \"can't assign requested address\",\n\t50:  \"network is down\",\n\t51:  \"network is unreachable\",\n\t52:  \"network dropped connection on reset\",\n\t53:  \"software caused connection abort\",\n\t54:  \"connection reset by peer\",\n\t55:  \"no buffer space available\",\n\t56:  \"socket is already connected\",\n\t57:  \"socket is not connected\",\n\t58:  \"can't send after socket shutdown\",\n\t59:  \"too many references: can't splice\",\n\t60:  \"operation timed out\",\n\t61:  \"connection refused\",\n\t62:  \"too many levels of symbolic links\",\n\t63:  \"file name too long\",\n\t64:  \"host is down\",\n\t65:  \"no route to host\",\n\t66:  \"directory not empty\",\n\t67:  \"too many processes\",\n\t68:  \"too many users\",\n\t69:  \"disc quota exceeded\",\n\t70:  \"stale NFS file handle\",\n\t71:  \"too many levels of remote in path\",\n\t72:  \"RPC struct is bad\",\n\t73:  \"RPC version wrong\",\n\t74:  \"RPC prog. not avail\",\n\t75:  \"program version wrong\",\n\t76:  \"bad procedure for program\",\n\t77:  \"no locks available\",\n\t78:  \"function not implemented\",\n\t79:  \"inappropriate file type or format\",\n\t80:  \"authentication error\",\n\t81:  \"need authenticator\",\n\t82:  \"device power is off\",\n\t83:  \"device error\",\n\t84:  \"value too large to be stored in data type\",\n\t85:  \"bad executable (or shared library)\",\n\t86:  \"bad CPU type in executable\",\n\t87:  \"shared library version mismatch\",\n\t88:  \"malformed Mach-o file\",\n\t89:  \"operation canceled\",\n\t90:  \"identifier removed\",\n\t91:  \"no message of desired type\",\n\t92:  \"illegal byte sequence\",\n\t93:  \"attribute not found\",\n\t94:  \"bad message\",\n\t95:  \"EMULTIHOP (Reserved)\",\n\t96:  \"no message available on STREAM\",\n\t97:  \"ENOLINK (Reserved)\",\n\t98:  \"no STREAM resources\",\n\t99:  \"not a STREAM\",\n\t100: \"protocol error\",\n\t101: \"STREAM ioctl timeout\",\n\t102: \"operation not supported on socket\",\n\t103: \"policy not found\",\n\t104: \"state not recoverable\",\n\t105: \"previous owner died\",\n\t106: \"interface output queue is full\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\n// +build arm,darwin\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\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\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\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\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_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_NULL                          = 0x0\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xc\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\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_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xe\n\tEVFILT_THREADMARKER               = 0xe\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_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\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\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_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_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\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_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_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_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_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\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_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 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_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\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\tNOFLSH                            = 0x80000000\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_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\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\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_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_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_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_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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_ENABLE_ECN                    = 0x104\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\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)\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\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_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_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xe\n\tEVFILT_THREADMARKER               = 0xe\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_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\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\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_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_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\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_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_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\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_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 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_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\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\tNOFLSH                            = 0x80000000\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_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\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\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_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_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_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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_ENABLE_ECN                    = 0x104\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\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)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"device not configured\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource deadlock avoided\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"resource busy\",\n\t17:  \"file exists\",\n\t18:  \"cross-device link\",\n\t19:  \"operation not supported by device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"result too large\",\n\t35:  \"resource temporarily unavailable\",\n\t36:  \"operation now in progress\",\n\t37:  \"operation already in progress\",\n\t38:  \"socket operation on non-socket\",\n\t39:  \"destination address required\",\n\t40:  \"message too long\",\n\t41:  \"protocol wrong type for socket\",\n\t42:  \"protocol not available\",\n\t43:  \"protocol not supported\",\n\t44:  \"socket type not supported\",\n\t45:  \"operation not supported\",\n\t46:  \"protocol family not supported\",\n\t47:  \"address family not supported by protocol family\",\n\t48:  \"address already in use\",\n\t49:  \"can't assign requested address\",\n\t50:  \"network is down\",\n\t51:  \"network is unreachable\",\n\t52:  \"network dropped connection on reset\",\n\t53:  \"software caused connection abort\",\n\t54:  \"connection reset by peer\",\n\t55:  \"no buffer space available\",\n\t56:  \"socket is already connected\",\n\t57:  \"socket is not connected\",\n\t58:  \"can't send after socket shutdown\",\n\t59:  \"too many references: can't splice\",\n\t60:  \"operation timed out\",\n\t61:  \"connection refused\",\n\t62:  \"too many levels of symbolic links\",\n\t63:  \"file name too long\",\n\t64:  \"host is down\",\n\t65:  \"no route to host\",\n\t66:  \"directory not empty\",\n\t67:  \"too many processes\",\n\t68:  \"too many users\",\n\t69:  \"disc quota exceeded\",\n\t70:  \"stale NFS file handle\",\n\t71:  \"too many levels of remote in path\",\n\t72:  \"RPC struct is bad\",\n\t73:  \"RPC version wrong\",\n\t74:  \"RPC prog. not avail\",\n\t75:  \"program version wrong\",\n\t76:  \"bad procedure for program\",\n\t77:  \"no locks available\",\n\t78:  \"function not implemented\",\n\t79:  \"inappropriate file type or format\",\n\t80:  \"authentication error\",\n\t81:  \"need authenticator\",\n\t82:  \"device power is off\",\n\t83:  \"device error\",\n\t84:  \"value too large to be stored in data type\",\n\t85:  \"bad executable (or shared library)\",\n\t86:  \"bad CPU type in executable\",\n\t87:  \"shared library version mismatch\",\n\t88:  \"malformed Mach-o file\",\n\t89:  \"operation canceled\",\n\t90:  \"identifier removed\",\n\t91:  \"no message of desired type\",\n\t92:  \"illegal byte sequence\",\n\t93:  \"attribute not found\",\n\t94:  \"bad message\",\n\t95:  \"EMULTIHOP (Reserved)\",\n\t96:  \"no message available on STREAM\",\n\t97:  \"ENOLINK (Reserved)\",\n\t98:  \"no STREAM resources\",\n\t99:  \"not a STREAM\",\n\t100: \"protocol error\",\n\t101: \"STREAM ioctl timeout\",\n\t102: \"operation not supported on socket\",\n\t103: \"policy not found\",\n\t104: \"state not recoverable\",\n\t105: \"previous owner died\",\n\t106: \"interface output queue is full\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build amd64,dragonfly\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_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_NETGRAPH                       = 0x20\n\tAF_NS                             = 0x6\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\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\tCREAD                             = 0x800\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_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_MARKER                     = 0xf\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\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_NODATA                         = 0x1000\n\tEV_ONESHOT                        = 0x10\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\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_SCTP                      = 0x84\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_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_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\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_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\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_NOTIFICATION                  = 0x200\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_SYNC                          = 0x800\n\tMSG_TRUNC                         = 0x10\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\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_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_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\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_FBUFFERED                       = 0x2000000\n\tO_FMASK                           = 0x7fc0000\n\tO_FNONBLOCKING                    = 0x80000\n\tO_FOFFSET                         = 0x200000\n\tO_FSYNC                           = 0x80\n\tO_FSYNCWRITE                      = 0x400000\n\tO_FUNBUFFERED                     = 0x1000000\n\tO_MAPONREAD                       = 0x4000000\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_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_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_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_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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 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\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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"operation timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"operation canceled\",\n\t86: \"illegal byte sequence\",\n\t87: \"attribute not found\",\n\t88: \"programming error\",\n\t89: \"bad message\",\n\t90: \"multihop attempted\",\n\t91: \"link has been severed\",\n\t92: \"protocol error\",\n\t93: \"no medium found\",\n\t94: \"unknown error: 94\",\n\t95: \"unknown error: 95\",\n\t96: \"unknown error: 96\",\n\t97: \"unknown error: 97\",\n\t98: \"unknown error: 98\",\n\t99: \"unknown error: 99\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"thread Scheduler\",\n\t33: \"checkPoint\",\n\t34: \"checkPointExit\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go",
    "content": "// mkerrors.sh -m32\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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_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_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                  = 0xf6\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                        = 0x79\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_FS                         = -0x9\n\tEVFILT_LIO                        = -0xa\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xb\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_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\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                    = 0x218f72\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_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_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_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_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                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\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                           = 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\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_MAXID                     = 0x34\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_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_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_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_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BINDANY                        = 0x18\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_FAITH                          = 0x16\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_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x44\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_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\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_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PREFAULT_READ                 = 0x40000\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\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\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\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\tNET_RT_MAXID                      = 0x6\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_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_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\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_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_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_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_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_PRCLONING                     = 0x10000\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_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\tRTV_WEIGHT                        = 0x100\n\tRT_ALL_FIBS                       = -0x1\n\tRT_CACHING_CONTEXT                = 0x1\n\tRT_DEFAULT_FIB                    = 0x0\n\tRT_NORTREF                        = 0x2\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\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETSGCNT                      = 0xc0147210\n\tSIOCGETVIFCNT                     = 0xc014720f\n\tSIOCGHIWAT                        = 0x40047301\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\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                    = 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\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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CA_NAME_MAX                   = 0x10\n\tTCP_CONGESTION                    = 0x40\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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"operation timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"operation canceled\",\n\t86: \"illegal byte sequence\",\n\t87: \"attribute not found\",\n\t88: \"programming error\",\n\t89: \"bad message\",\n\t90: \"multihop attempted\",\n\t91: \"link has been severed\",\n\t92: \"protocol error\",\n\t93: \"capabilities insufficient\",\n\t94: \"not permitted in capability mode\",\n\t95: \"state not recoverable\",\n\t96: \"previous owner died\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"unknown signal\",\n\t33: \"unknown signal\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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_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_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                  = 0xf6\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                        = 0x79\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_FS                         = -0x9\n\tEVFILT_LIO                        = -0xa\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xb\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_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\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                    = 0x218f72\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_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_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_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_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                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\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                           = 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\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_MAXID                     = 0x34\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_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_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_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_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BINDANY                        = 0x18\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_FAITH                          = 0x16\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_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x44\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_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\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_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PREFAULT_READ                 = 0x40000\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\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\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\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\tNET_RT_MAXID                      = 0x6\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_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_MSECONDS                     = 0x2\n\tNOTE_NSECONDS                     = 0x8\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\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\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_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_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_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_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_PRCLONING                     = 0x10000\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_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\tRTV_WEIGHT                        = 0x100\n\tRT_ALL_FIBS                       = -0x1\n\tRT_CACHING_CONTEXT                = 0x1\n\tRT_DEFAULT_FIB                    = 0x0\n\tRT_NORTREF                        = 0x2\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\tSIOCADDRT                         = 0x8040720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDELRT                         = 0x8040720b\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\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\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\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\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\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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CA_NAME_MAX                   = 0x10\n\tTCP_CONGESTION                    = 0x40\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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"operation timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"operation canceled\",\n\t86: \"illegal byte sequence\",\n\t87: \"attribute not found\",\n\t88: \"programming error\",\n\t89: \"bad message\",\n\t90: \"multihop attempted\",\n\t91: \"link has been severed\",\n\t92: \"protocol error\",\n\t93: \"capabilities insufficient\",\n\t94: \"not permitted in capability mode\",\n\t95: \"state not recoverable\",\n\t96: \"previous owner died\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"unknown signal\",\n\t33: \"unknown signal\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\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_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_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                  = 0xf6\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                        = 0x79\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_FS                         = -0x9\n\tEVFILT_LIO                        = -0xa\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xb\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_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\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                    = 0x218f72\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_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_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_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_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                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\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                           = 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\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_MAXID                     = 0x34\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_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_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_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_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BINDANY                        = 0x18\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_FAITH                          = 0x16\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_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x44\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_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\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_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PREFAULT_READ                 = 0x40000\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\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\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\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\tNET_RT_MAXID                      = 0x6\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_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_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\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_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_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_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_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_PRCLONING                     = 0x10000\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_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\tRTV_WEIGHT                        = 0x100\n\tRT_ALL_FIBS                       = -0x1\n\tRT_CACHING_CONTEXT                = 0x1\n\tRT_DEFAULT_FIB                    = 0x0\n\tRT_NORTREF                        = 0x2\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\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETSGCNT                      = 0xc0147210\n\tSIOCGETVIFCNT                     = 0xc014720f\n\tSIOCGHIWAT                        = 0x40047301\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\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                    = 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\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_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\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CA_NAME_MAX                   = 0x10\n\tTCP_CONGESTION                    = 0x40\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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"operation timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"operation canceled\",\n\t86: \"illegal byte sequence\",\n\t87: \"attribute not found\",\n\t88: \"programming error\",\n\t89: \"bad message\",\n\t90: \"multihop attempted\",\n\t91: \"link has been severed\",\n\t92: \"protocol error\",\n\t93: \"capabilities insufficient\",\n\t94: \"not permitted in capability mode\",\n\t95: \"state not recoverable\",\n\t96: \"previous owner died\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"suspended (signal)\",\n\t18: \"suspended\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"unknown signal\",\n\t33: \"unknown signal\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_386.go",
    "content": "// mkerrors.sh -m32\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build 386,linux\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_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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x28\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_IEEE802_TR                = 0x320\n\tARPHRD_INFINIBAND                = 0x20\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_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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80041270\n\tBLKBSZSET                        = 0x40041271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80041272\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_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_MAXINSNS                     = 0x1000\n\tBPF_MEM                          = 0x60\n\tBPF_MEMWORDS                     = 0x10\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_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\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_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\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_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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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\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\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\tEPOLL_NONBLOCK                   = 0x800\n\tETH_P_1588                       = 0x88f7\n\tETH_P_8021AD                     = 0x88a8\n\tETH_P_8021AH                     = 0x88e7\n\tETH_P_8021Q                      = 0x8100\n\tETH_P_802_2                      = 0x4\n\tETH_P_802_3                      = 0x1\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_BPQ                        = 0x8ff\n\tETH_P_CAIF                       = 0xf7\n\tETH_P_CAN                        = 0xc\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x1000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_802_1Q_VLAN                  = 0x1\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BONDING                      = 0x20\n\tIFF_BRIDGE_PORT                  = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DISABLE_NETPOLL              = 0x1000\n\tIFF_DONT_BRIDGE                  = 0x800\n\tIFF_DORMANT                      = 0x20000\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_EBRIDGE                      = 0x2\n\tIFF_ECHO                         = 0x40000\n\tIFF_ISATAP                       = 0x80\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_LOWER_UP                     = 0x10000\n\tIFF_MACVLAN_PORT                 = 0x2000\n\tIFF_MASTER                       = 0x400\n\tIFF_MASTER_8023AD                = 0x8\n\tIFF_MASTER_ALB                   = 0x10\n\tIFF_MASTER_ARPMON                = 0x100\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_NOARP                        = 0x80\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\n\tIFF_OVS_DATAPATH                 = 0x8000\n\tIFF_POINTOPOINT                  = 0x10\n\tIFF_PORTSEL                      = 0x2000\n\tIFF_PROMISC                      = 0x100\n\tIFF_RUNNING                      = 0x40\n\tIFF_SLAVE                        = 0x800\n\tIFF_SLAVE_INACTIVE               = 0x4\n\tIFF_SLAVE_NEEDARP                = 0x40\n\tIFF_TAP                          = 0x2\n\tIFF_TUN                          = 0x1\n\tIFF_TUN_EXCL                     = 0x8000\n\tIFF_TX_SKB_SHARING               = 0x10000\n\tIFF_UNICAST_FLT                  = 0x20000\n\tIFF_UP                           = 0x1\n\tIFF_VNET_HDR                     = 0x4000\n\tIFF_VOLATILE                     = 0x70c5a\n\tIFF_WAN_HDLC                     = 0x200\n\tIFF_XMIT_DST_RELEASE             = 0x400\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_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\tIPPROTO_AH                       = 0x33\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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_XFRM_POLICY                   = 0x11\n\tISIG                             = 0x1\n\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_DOFORK                      = 0xb\n\tMADV_DONTFORK                    = 0xa\n\tMADV_DONTNEED                    = 0x4\n\tMADV_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\n\tNETLINK_ADD_MEMBERSHIP           = 0x1\n\tNETLINK_AUDIT                    = 0x9\n\tNETLINK_BROADCAST_ERROR          = 0x4\n\tNETLINK_CONNECTOR                = 0xb\n\tNETLINK_CRYPTO                   = 0x15\n\tNETLINK_DNRTMSG                  = 0xe\n\tNETLINK_DROP_MEMBERSHIP          = 0x2\n\tNETLINK_ECRYPTFS                 = 0x13\n\tNETLINK_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\n\tNETLINK_INET_DIAG                = 0x4\n\tNETLINK_IP6_FW                   = 0xd\n\tNETLINK_ISCSI                    = 0x8\n\tNETLINK_KOBJECT_UEVENT           = 0xf\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_SCSITRANSPORT            = 0x12\n\tNETLINK_SELINUX                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_HASH               = 0x0\n\tPACKET_FANOUT_LB                 = 0x1\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HDRLEN                    = 0xb\n\tPACKET_HOST                      = 0x0\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_RECV_OUTPUT               = 0x3\n\tPACKET_RESERVE                   = 0xc\n\tPACKET_RX_RING                   = 0x5\n\tPACKET_STATISTICS                = 0x6\n\tPACKET_TIMESTAMP                 = 0x11\n\tPACKET_TX_RING                   = 0xd\n\tPACKET_TX_TIMESTAMP              = 0x10\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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_GET_DUMPABLE                  = 0x3\n\tPR_GET_ENDIAN                    = 0x13\n\tPR_GET_FPEMU                     = 0x9\n\tPR_GET_FPEXC                     = 0xb\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_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_SET_DUMPABLE                  = 0x4\n\tPR_SET_ENDIAN                    = 0x14\n\tPR_SET_FPEMU                     = 0xa\n\tPR_SET_FPEXC                     = 0xc\n\tPR_SET_KEEPCAPS                  = 0x8\n\tPR_SET_MM                        = 0x23\n\tPR_SET_MM_BRK                    = 0x7\n\tPR_SET_MM_END_CODE               = 0x2\n\tPR_SET_MM_END_DATA               = 0x4\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_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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_GET_THREAD_AREA           = 0x19\n\tPTRACE_INTERRUPT                 = 0x4207\n\tPTRACE_KILL                      = 0x8\n\tPTRACE_LISTEN                    = 0x4208\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_O_MASK                    = 0xff\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_PEEKTEXT                  = 0x1\n\tPTRACE_PEEKUSR                   = 0x3\n\tPTRACE_POKEDATA                  = 0x5\n\tPTRACE_POKETEXT                  = 0x4\n\tPTRACE_POKEUSR                   = 0x6\n\tPTRACE_SEIZE                     = 0x4206\n\tPTRACE_SEIZE_DEVEL               = 0x80000000\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xe\n\tRTAX_MTU                         = 0x2\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                          = 0x10\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\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_DELLINK                      = 0x11\n\tRTM_DELNEIGH                     = 0x1d\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_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_GETDCB                       = 0x4e\n\tRTM_GETLINK                      = 0x12\n\tRTM_GETMULTICAST                 = 0x3a\n\tRTM_GETNEIGH                     = 0x1e\n\tRTM_GETNEIGHTBL                  = 0x42\n\tRTM_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x4f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\n\tRTM_NEWLINK                      = 0x10\n\tRTM_NEWNDUSEROPT                 = 0x44\n\tRTM_NEWNEIGH                     = 0x1c\n\tRTM_NEWNEIGHTBL                  = 0x40\n\tRTM_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x10\n\tRTM_NR_MSGTYPES                  = 0x40\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_MARK                          = 0x24\n\tSO_NO_CHECK                      = 0xb\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSSEC                       = 0x22\n\tSO_PEERCRED                      = 0x11\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_REUSEADDR                     = 0x2\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CONGESTION                   = 0xd\n\tTCP_CORK                         = 0x3\n\tTCP_DEFER_ACCEPT                 = 0x9\n\tTCP_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUICKACK                     = 0xc\n\tTCP_SYNCNT                       = 0x7\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\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\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\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETHDRSZ                  = 0x400454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x20\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale NFS file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"unknown error 133\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build amd64,linux\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_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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x28\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_IEEE802_TR                = 0x320\n\tARPHRD_INFINIBAND                = 0x20\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_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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_MAXINSNS                     = 0x1000\n\tBPF_MEM                          = 0x60\n\tBPF_MEMWORDS                     = 0x10\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_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\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_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\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_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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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\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\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\tEPOLL_NONBLOCK                   = 0x800\n\tETH_P_1588                       = 0x88f7\n\tETH_P_8021AD                     = 0x88a8\n\tETH_P_8021AH                     = 0x88e7\n\tETH_P_8021Q                      = 0x8100\n\tETH_P_802_2                      = 0x4\n\tETH_P_802_3                      = 0x1\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_BPQ                        = 0x8ff\n\tETH_P_CAIF                       = 0xf7\n\tETH_P_CAN                        = 0xc\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x1000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_802_1Q_VLAN                  = 0x1\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BONDING                      = 0x20\n\tIFF_BRIDGE_PORT                  = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DISABLE_NETPOLL              = 0x1000\n\tIFF_DONT_BRIDGE                  = 0x800\n\tIFF_DORMANT                      = 0x20000\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_EBRIDGE                      = 0x2\n\tIFF_ECHO                         = 0x40000\n\tIFF_ISATAP                       = 0x80\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_LOWER_UP                     = 0x10000\n\tIFF_MACVLAN_PORT                 = 0x2000\n\tIFF_MASTER                       = 0x400\n\tIFF_MASTER_8023AD                = 0x8\n\tIFF_MASTER_ALB                   = 0x10\n\tIFF_MASTER_ARPMON                = 0x100\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_NOARP                        = 0x80\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\n\tIFF_OVS_DATAPATH                 = 0x8000\n\tIFF_POINTOPOINT                  = 0x10\n\tIFF_PORTSEL                      = 0x2000\n\tIFF_PROMISC                      = 0x100\n\tIFF_RUNNING                      = 0x40\n\tIFF_SLAVE                        = 0x800\n\tIFF_SLAVE_INACTIVE               = 0x4\n\tIFF_SLAVE_NEEDARP                = 0x40\n\tIFF_TAP                          = 0x2\n\tIFF_TUN                          = 0x1\n\tIFF_TUN_EXCL                     = 0x8000\n\tIFF_TX_SKB_SHARING               = 0x10000\n\tIFF_UNICAST_FLT                  = 0x20000\n\tIFF_UP                           = 0x1\n\tIFF_VNET_HDR                     = 0x4000\n\tIFF_VOLATILE                     = 0x70c5a\n\tIFF_WAN_HDLC                     = 0x200\n\tIFF_XMIT_DST_RELEASE             = 0x400\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_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\tIPPROTO_AH                       = 0x33\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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_XFRM_POLICY                   = 0x11\n\tISIG                             = 0x1\n\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_DOFORK                      = 0xb\n\tMADV_DONTFORK                    = 0xa\n\tMADV_DONTNEED                    = 0x4\n\tMADV_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_HASH               = 0x0\n\tPACKET_FANOUT_LB                 = 0x1\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HDRLEN                    = 0xb\n\tPACKET_HOST                      = 0x0\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_RECV_OUTPUT               = 0x3\n\tPACKET_RESERVE                   = 0xc\n\tPACKET_RX_RING                   = 0x5\n\tPACKET_STATISTICS                = 0x6\n\tPACKET_TIMESTAMP                 = 0x11\n\tPACKET_TX_RING                   = 0xd\n\tPACKET_TX_TIMESTAMP              = 0x10\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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_GET_DUMPABLE                  = 0x3\n\tPR_GET_ENDIAN                    = 0x13\n\tPR_GET_FPEMU                     = 0x9\n\tPR_GET_FPEXC                     = 0xb\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_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_SET_DUMPABLE                  = 0x4\n\tPR_SET_ENDIAN                    = 0x14\n\tPR_SET_FPEMU                     = 0xa\n\tPR_SET_FPEXC                     = 0xc\n\tPR_SET_KEEPCAPS                  = 0x8\n\tPR_SET_MM                        = 0x23\n\tPR_SET_MM_BRK                    = 0x7\n\tPR_SET_MM_END_CODE               = 0x2\n\tPR_SET_MM_END_DATA               = 0x4\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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\n\tPR_SET_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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_GET_THREAD_AREA           = 0x19\n\tPTRACE_INTERRUPT                 = 0x4207\n\tPTRACE_KILL                      = 0x8\n\tPTRACE_LISTEN                    = 0x4208\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_O_MASK                    = 0xff\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_PEEKTEXT                  = 0x1\n\tPTRACE_PEEKUSR                   = 0x3\n\tPTRACE_POKEDATA                  = 0x5\n\tPTRACE_POKETEXT                  = 0x4\n\tPTRACE_POKEUSR                   = 0x6\n\tPTRACE_SEIZE                     = 0x4206\n\tPTRACE_SEIZE_DEVEL               = 0x80000000\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xe\n\tRTAX_MTU                         = 0x2\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                          = 0x10\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\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_DELLINK                      = 0x11\n\tRTM_DELNEIGH                     = 0x1d\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_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_GETDCB                       = 0x4e\n\tRTM_GETLINK                      = 0x12\n\tRTM_GETMULTICAST                 = 0x3a\n\tRTM_GETNEIGH                     = 0x1e\n\tRTM_GETNEIGHTBL                  = 0x42\n\tRTM_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x4f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\n\tRTM_NEWLINK                      = 0x10\n\tRTM_NEWNDUSEROPT                 = 0x44\n\tRTM_NEWNEIGH                     = 0x1c\n\tRTM_NEWNEIGHTBL                  = 0x40\n\tRTM_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x10\n\tRTM_NR_MSGTYPES                  = 0x40\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_MARK                          = 0x24\n\tSO_NO_CHECK                      = 0xb\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSSEC                       = 0x22\n\tSO_PEERCRED                      = 0x11\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_REUSEADDR                     = 0x2\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CONGESTION                   = 0xd\n\tTCP_CORK                         = 0x3\n\tTCP_DEFER_ACCEPT                 = 0x9\n\tTCP_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUICKACK                     = 0xc\n\tTCP_SYNCNT                       = 0x7\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\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\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\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETHDRSZ                  = 0x400454d8\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale NFS file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"unknown error 133\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build arm,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x27\n\tAF_NETBEUI                       = 0xd\n\tAF_NETLINK                       = 0x10\n\tAF_NETROM                        = 0x6\n\tAF_PACKET                        = 0x11\n\tAF_PHONET                        = 0x23\n\tAF_PPPOX                         = 0x18\n\tAF_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_PHY            = 0x325\n\tARPHRD_IEEE802_TR                = 0x320\n\tARPHRD_INFINIBAND                = 0x20\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_NETROM                    = 0x0\n\tARPHRD_NONE                      = 0xfffe\n\tARPHRD_PIMREG                    = 0x30b\n\tARPHRD_PPP                       = 0x200\n\tARPHRD_PRONET                    = 0x4\n\tARPHRD_RAWHDLC                   = 0x206\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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_MAXINSNS                     = 0x1000\n\tBPF_MEM                          = 0x60\n\tBPF_MEMWORDS                     = 0x10\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_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\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_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\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_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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\tELF_NGREG                        = 0x12\n\tELF_PRARGSZ                      = 0x50\n\tECHO                             = 0x8\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEPOLLERR                         = 0x8\n\tEPOLLET                          = -0x80000000\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\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\tEPOLL_NONBLOCK                   = 0x800\n\tETH_P_1588                       = 0x88f7\n\tETH_P_8021Q                      = 0x8100\n\tETH_P_802_2                      = 0x4\n\tETH_P_802_3                      = 0x1\n\tETH_P_AARP                       = 0x80f3\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_BPQ                        = 0x8ff\n\tETH_P_CAIF                       = 0xf7\n\tETH_P_CAN                        = 0xc\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\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_PUP                        = 0x200\n\tETH_P_PUPAT                      = 0x201\n\tETH_P_RARP                       = 0x8035\n\tETH_P_SCA                        = 0x6007\n\tETH_P_SLOW                       = 0x8809\n\tETH_P_SNAP                       = 0x5\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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x1000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_MASTER                       = 0x400\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_NOARP                        = 0x80\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\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\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_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\tIPPROTO_AH                       = 0x33\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_IF                  = 0x20\n\tIP_MULTICAST_LOOP                = 0x22\n\tIP_MULTICAST_TTL                 = 0x21\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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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_XFRM_POLICY                   = 0x11\n\tISIG                             = 0x1\n\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_DOFORK                      = 0xb\n\tMADV_DONTFORK                    = 0xa\n\tMADV_DONTNEED                    = 0x4\n\tMADV_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_GROWSDOWN                    = 0x100\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_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\n\tNETLINK_ADD_MEMBERSHIP           = 0x1\n\tNETLINK_AUDIT                    = 0x9\n\tNETLINK_BROADCAST_ERROR          = 0x4\n\tNETLINK_CONNECTOR                = 0xb\n\tNETLINK_CRYPTO                   = 0x15\n\tNETLINK_DNRTMSG                  = 0xe\n\tNETLINK_DROP_MEMBERSHIP          = 0x2\n\tNETLINK_ECRYPTFS                 = 0x13\n\tNETLINK_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\n\tNETLINK_INET_DIAG                = 0x4\n\tNETLINK_IP6_FW                   = 0xd\n\tNETLINK_ISCSI                    = 0x8\n\tNETLINK_KOBJECT_UEVENT           = 0xf\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\n\tNLM_F_CREATE                     = 0x400\n\tNLM_F_DUMP                       = 0x300\n\tNLM_F_DUMP_FILTERED              = 0x20\n\tNLM_F_ECHO                       = 0x8\n\tNLM_F_EXCL                       = 0x200\n\tNLM_F_MATCH                      = 0x200\n\tNLM_F_MULTI                      = 0x2\n\tNLM_F_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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                          = 0x1000\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                          = 0x1000\n\tO_SYNC                           = 0x1000\n\tO_TRUNC                          = 0x200\n\tO_WRONLY                         = 0x1\n\tPACKET_ADD_MEMBERSHIP            = 0x1\n\tPACKET_BROADCAST                 = 0x1\n\tPACKET_DROP_MEMBERSHIP           = 0x2\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HOST                      = 0x0\n\tPACKET_LOOPBACK                  = 0x5\n\tPACKET_MR_ALLMULTI               = 0x2\n\tPACKET_MR_MULTICAST              = 0x0\n\tPACKET_MR_PROMISC                = 0x1\n\tPACKET_MULTICAST                 = 0x2\n\tPACKET_OTHERHOST                 = 0x3\n\tPACKET_OUTGOING                  = 0x4\n\tPACKET_RECV_OUTPUT               = 0x3\n\tPACKET_RX_RING                   = 0x5\n\tPACKET_STATISTICS                = 0x6\n\tPARENB                           = 0x100\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_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_CLEAR_SECCOMP_FILTER          = 0x25\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_GET_DUMPABLE                  = 0x3\n\tPR_GET_ENDIAN                    = 0x13\n\tPR_GET_FPEMU                     = 0x9\n\tPR_GET_FPEXC                     = 0xb\n\tPR_GET_KEEPCAPS                  = 0x7\n\tPR_GET_NAME                      = 0x10\n\tPR_GET_PDEATHSIG                 = 0x2\n\tPR_GET_SECCOMP                   = 0x15\n\tPR_GET_SECCOMP_FILTER            = 0x23\n\tPR_GET_SECUREBITS                = 0x1b\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_SECCOMP_FILTER_EVENT          = 0x1\n\tPR_SECCOMP_FILTER_SYSCALL        = 0x0\n\tPR_SET_DUMPABLE                  = 0x4\n\tPR_SET_ENDIAN                    = 0x14\n\tPR_SET_FPEMU                     = 0xa\n\tPR_SET_FPEXC                     = 0xc\n\tPR_SET_KEEPCAPS                  = 0x8\n\tPR_SET_NAME                      = 0xf\n\tPR_SET_PDEATHSIG                 = 0x1\n\tPR_SET_PTRACER                   = 0x59616d61\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECCOMP_FILTER            = 0x24\n\tPR_SET_SECUREBITS                = 0x1c\n\tPR_SET_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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_VFORK               = 0x2\n\tPTRACE_EVENT_VFORK_DONE          = 0x5\n\tPTRACE_GETCRUNCHREGS             = 0x19\n\tPTRACE_GETEVENTMSG               = 0x4201\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETHBPREGS                = 0x1d\n\tPTRACE_GETREGS                   = 0xc\n\tPTRACE_GETREGSET                 = 0x4204\n\tPTRACE_GETSIGINFO                = 0x4202\n\tPTRACE_GETVFPREGS                = 0x1b\n\tPTRACE_GETWMMXREGS               = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x16\n\tPTRACE_KILL                      = 0x8\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_O_MASK                    = 0x7f\n\tPTRACE_O_TRACECLONE              = 0x8\n\tPTRACE_O_TRACEEXEC               = 0x10\n\tPTRACE_O_TRACEEXIT               = 0x40\n\tPTRACE_O_TRACEFORK               = 0x2\n\tPTRACE_O_TRACESYSGOOD            = 0x1\n\tPTRACE_O_TRACEVFORK              = 0x4\n\tPTRACE_O_TRACEVFORKDONE          = 0x20\n\tPTRACE_PEEKDATA                  = 0x2\n\tPTRACE_PEEKTEXT                  = 0x1\n\tPTRACE_PEEKUSR                   = 0x3\n\tPTRACE_POKEDATA                  = 0x5\n\tPTRACE_POKETEXT                  = 0x4\n\tPTRACE_POKEUSR                   = 0x6\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xe\n\tRTAX_MTU                         = 0x2\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                          = 0x10\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\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_DELLINK                      = 0x11\n\tRTM_DELNEIGH                     = 0x1d\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_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_GETDCB                       = 0x4e\n\tRTM_GETLINK                      = 0x12\n\tRTM_GETMULTICAST                 = 0x3a\n\tRTM_GETNEIGH                     = 0x1e\n\tRTM_GETNEIGHTBL                  = 0x42\n\tRTM_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x4f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\n\tRTM_NEWLINK                      = 0x10\n\tRTM_NEWNDUSEROPT                 = 0x44\n\tRTM_NEWNEIGH                     = 0x1c\n\tRTM_NEWNEIGHTBL                  = 0x40\n\tRTM_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x10\n\tRTM_NR_MSGTYPES                  = 0x40\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_MARK                          = 0x24\n\tSO_NO_CHECK                      = 0xb\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSSEC                       = 0x22\n\tSO_PEERCRED                      = 0x11\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_REUSEADDR                     = 0x2\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CONGESTION                   = 0xd\n\tTCP_CORK                         = 0x3\n\tTCP_DEFER_ACCEPT                 = 0x9\n\tTCP_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUICKACK                     = 0xc\n\tTCP_SYNCNT                       = 0x7\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\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\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\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETHDRSZ                  = 0x400454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x20\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale NFS file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"unknown error 133\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build arm64,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\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_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\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_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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\tELF_NGREG                        = 0x22\n\tELF_PRARGSZ                      = 0x50\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\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_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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x1000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_802_1Q_VLAN                  = 0x1\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_ATTACH_QUEUE                 = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BONDING                      = 0x20\n\tIFF_BRIDGE_PORT                  = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DETACH_QUEUE                 = 0x400\n\tIFF_DISABLE_NETPOLL              = 0x1000\n\tIFF_DONT_BRIDGE                  = 0x800\n\tIFF_DORMANT                      = 0x20000\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_EBRIDGE                      = 0x2\n\tIFF_ECHO                         = 0x40000\n\tIFF_ISATAP                       = 0x80\n\tIFF_LIVE_ADDR_CHANGE             = 0x100000\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_LOWER_UP                     = 0x10000\n\tIFF_MACVLAN                      = 0x200000\n\tIFF_MACVLAN_PORT                 = 0x2000\n\tIFF_MASTER                       = 0x400\n\tIFF_MASTER_8023AD                = 0x8\n\tIFF_MASTER_ALB                   = 0x10\n\tIFF_MASTER_ARPMON                = 0x100\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_MULTI_QUEUE                  = 0x100\n\tIFF_NOARP                        = 0x80\n\tIFF_NOFILTER                     = 0x1000\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\n\tIFF_OVS_DATAPATH                 = 0x8000\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_SLAVE_INACTIVE               = 0x4\n\tIFF_SLAVE_NEEDARP                = 0x40\n\tIFF_SUPP_NOFCS                   = 0x80000\n\tIFF_TAP                          = 0x2\n\tIFF_TEAM_PORT                    = 0x40000\n\tIFF_TUN                          = 0x1\n\tIFF_TUN_EXCL                     = 0x8000\n\tIFF_TX_SKB_SHARING               = 0x10000\n\tIFF_UNICAST_FLT                  = 0x20000\n\tIFF_UP                           = 0x1\n\tIFF_VNET_HDR                     = 0x4000\n\tIFF_VOLATILE                     = 0x70c5a\n\tIFF_WAN_HDLC                     = 0x200\n\tIFF_XMIT_DST_RELEASE             = 0x400\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_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\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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                        = 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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER      = 0x1000\n\tPACKET_FANOUT_HASH               = 0x0\n\tPACKET_FANOUT_LB                 = 0x1\n\tPACKET_FANOUT_RND                = 0x4\n\tPACKET_FANOUT_ROLLOVER           = 0x3\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HDRLEN                    = 0xb\n\tPACKET_HOST                      = 0x0\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_RECV_OUTPUT               = 0x3\n\tPACKET_RESERVE                   = 0xc\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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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_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_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_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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\n\tPR_SET_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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                    = 0x1000ff\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xf\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                          = 0x11\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x57\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x12\n\tRTM_NR_MSGTYPES                  = 0x48\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_GET_FILTER                    = 0x1a\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_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_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_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_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_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_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_MSS_DEFAULT                  = 0x218\n\tTCP_MSS_DESIRED                  = 0x4c4\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUEUE_SEQ                    = 0x15\n\tTCP_QUICKACK                     = 0xc\n\tTCP_REPAIR                       = 0x13\n\tTCP_REPAIR_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\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\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\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNSETDEBUG                      = 0x400454c9\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\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETHDRSZ                  = 0x400454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"memory page has hardware error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build mips,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x27\n\tAF_NETBEUI                       = 0xd\n\tAF_NETLINK                       = 0x10\n\tAF_NETROM                        = 0x6\n\tAF_PACKET                        = 0x11\n\tAF_PHONET                        = 0x23\n\tAF_PPPOX                         = 0x18\n\tAF_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_IEEE802_TR                = 0x320\n\tARPHRD_INFINIBAND                = 0x20\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_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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_MAXINSNS                     = 0x1000\n\tBPF_MEM                          = 0x60\n\tBPF_MEMWORDS                     = 0x10\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_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\tCAN_BCM                          = 0x2\n\tCAN_EFF_FLAG                     = 0x80000000\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_MCNET                        = 0x5\n\tCAN_NPROTO                       = 0x7\n\tCAN_RAW                          = 0x1\n\tCAN_RTR_FLAG                     = 0x40000000\n\tCAN_SFF_MASK                     = 0x7ff\n\tCAN_TP16                         = 0x3\n\tCAN_TP20                         = 0x4\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCFLUSH                           = 0xf\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\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_COARSE            = 0x5\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_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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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\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\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\tEPOLL_NONBLOCK                   = 0x80\n\tETH_P_1588                       = 0x88f7\n\tETH_P_8021AD                     = 0x88a8\n\tETH_P_8021AH                     = 0x88e7\n\tETH_P_8021Q                      = 0x8100\n\tETH_P_802_2                      = 0x4\n\tETH_P_802_3                      = 0x1\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_BPQ                        = 0x8ff\n\tETH_P_CAIF                       = 0xf7\n\tETH_P_CAN                        = 0xc\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x2000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_802_1Q_VLAN                  = 0x1\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BONDING                      = 0x20\n\tIFF_BRIDGE_PORT                  = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DISABLE_NETPOLL              = 0x1000\n\tIFF_DONT_BRIDGE                  = 0x800\n\tIFF_DORMANT                      = 0x20000\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_EBRIDGE                      = 0x2\n\tIFF_ECHO                         = 0x40000\n\tIFF_ISATAP                       = 0x80\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_LOWER_UP                     = 0x10000\n\tIFF_MACVLAN_PORT                 = 0x2000\n\tIFF_MASTER                       = 0x400\n\tIFF_MASTER_8023AD                = 0x8\n\tIFF_MASTER_ALB                   = 0x10\n\tIFF_MASTER_ARPMON                = 0x100\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_NOARP                        = 0x80\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\n\tIFF_OVS_DATAPATH                 = 0x8000\n\tIFF_POINTOPOINT                  = 0x10\n\tIFF_PORTSEL                      = 0x2000\n\tIFF_PROMISC                      = 0x100\n\tIFF_RUNNING                      = 0x40\n\tIFF_SLAVE                        = 0x800\n\tIFF_SLAVE_INACTIVE               = 0x4\n\tIFF_SLAVE_NEEDARP                = 0x40\n\tIFF_TAP                          = 0x2\n\tIFF_TUN                          = 0x1\n\tIFF_TUN_EXCL                     = 0x8000\n\tIFF_TX_SKB_SHARING               = 0x10000\n\tIFF_UNICAST_FLT                  = 0x20000\n\tIFF_UP                           = 0x1\n\tIFF_VNET_HDR                     = 0x4000\n\tIFF_VOLATILE                     = 0x70c5a\n\tIFF_WAN_HDLC                     = 0x200\n\tIFF_XMIT_DST_RELEASE             = 0x400\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_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\tIPPROTO_AH                       = 0x33\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_IF                  = 0x20\n\tIP_MULTICAST_LOOP                = 0x22\n\tIP_MULTICAST_TTL                 = 0x21\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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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_XFRM_POLICY                   = 0x11\n\tISIG                             = 0x1\n\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_DOFORK                      = 0xb\n\tMADV_DONTFORK                    = 0xa\n\tMADV_DONTNEED                    = 0x4\n\tMADV_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_GROWSDOWN                    = 0x1000\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_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_RDONLY                         = 0x0\n\tO_RDWR                           = 0x2\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_HASH               = 0x0\n\tPACKET_FANOUT_LB                 = 0x1\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HDRLEN                    = 0xb\n\tPACKET_HOST                      = 0x0\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_RECV_OUTPUT               = 0x3\n\tPACKET_RESERVE                   = 0xc\n\tPACKET_RX_RING                   = 0x5\n\tPACKET_STATISTICS                = 0x6\n\tPACKET_TIMESTAMP                 = 0x11\n\tPACKET_TX_RING                   = 0xd\n\tPACKET_TX_TIMESTAMP              = 0x10\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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_GET_DUMPABLE                  = 0x3\n\tPR_GET_ENDIAN                    = 0x13\n\tPR_GET_FPEMU                     = 0x9\n\tPR_GET_FPEXC                     = 0xb\n\tPR_GET_KEEPCAPS                  = 0x7\n\tPR_GET_NAME                      = 0x10\n\tPR_GET_PDEATHSIG                 = 0x2\n\tPR_GET_SECCOMP                   = 0x15\n\tPR_GET_SECUREBITS                = 0x1b\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_SET_DUMPABLE                  = 0x4\n\tPR_SET_ENDIAN                    = 0x14\n\tPR_SET_FPEMU                     = 0xa\n\tPR_SET_FPEXC                     = 0xc\n\tPR_SET_KEEPCAPS                  = 0x8\n\tPR_SET_NAME                      = 0xf\n\tPR_SET_PDEATHSIG                 = 0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\n\tPR_SET_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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_STOP                = 0x7\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_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_MASK                    = 0x7f\n\tPTRACE_O_TRACECLONE              = 0x8\n\tPTRACE_O_TRACEEXEC               = 0x10\n\tPTRACE_O_TRACEEXIT               = 0x40\n\tPTRACE_O_TRACEFORK               = 0x2\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_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_SEIZE                     = 0x4206\n\tPTRACE_SEIZE_DEVEL               = 0x80000000\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETOPTIONS                = 0x4200\n\tPTRACE_SETREGS                   = 0xd\n\tPTRACE_SETREGSET                 = 0x4205\n\tPTRACE_SETSIGINFO                = 0x4203\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\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                    = 0x7fffffffffffffff\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xe\n\tRTAX_MTU                         = 0x2\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                          = 0x10\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\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_DELLINK                      = 0x11\n\tRTM_DELNEIGH                     = 0x1d\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_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_GETDCB                       = 0x4e\n\tRTM_GETLINK                      = 0x12\n\tRTM_GETMULTICAST                 = 0x3a\n\tRTM_GETNEIGH                     = 0x1e\n\tRTM_GETNEIGHTBL                  = 0x42\n\tRTM_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x4f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\n\tRTM_NEWLINK                      = 0x10\n\tRTM_NEWNDUSEROPT                 = 0x44\n\tRTM_NEWNEIGH                     = 0x1c\n\tRTM_NEWNEIGHTBL                  = 0x40\n\tRTM_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x10\n\tRTM_NR_MSGTYPES                  = 0x40\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x40047309\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x80047308\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x1\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_ATM                          = 0x108\n\tSOL_CAN_BASE                     = 0x64\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0xffff\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_MARK                          = 0x24\n\tSO_NO_CHECK                      = 0xb\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSSEC                       = 0x22\n\tSO_PEERCRED                      = 0x12\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_REUSEADDR                     = 0x4\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CONGESTION                   = 0xd\n\tTCP_CORK                         = 0x3\n\tTCP_DEFER_ACCEPT                 = 0x9\n\tTCP_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUICKACK                     = 0xc\n\tTCP_SYNCNT                       = 0x7\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPTN                         = 0x40045430\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\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETHDRSZ                  = 0x800454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x20\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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 errors = [...]string{\n\t1:    \"operation not permitted\",\n\t2:    \"no such file or directory\",\n\t3:    \"no such process\",\n\t4:    \"interrupted system call\",\n\t5:    \"input/output error\",\n\t6:    \"no such device or address\",\n\t7:    \"argument list too long\",\n\t8:    \"exec format error\",\n\t9:    \"bad file descriptor\",\n\t10:   \"no child processes\",\n\t11:   \"resource temporarily unavailable\",\n\t12:   \"cannot allocate memory\",\n\t13:   \"permission denied\",\n\t14:   \"bad address\",\n\t15:   \"block device required\",\n\t16:   \"device or resource busy\",\n\t17:   \"file exists\",\n\t18:   \"invalid cross-device link\",\n\t19:   \"no such device\",\n\t20:   \"not a directory\",\n\t21:   \"is a directory\",\n\t22:   \"invalid argument\",\n\t23:   \"too many open files in system\",\n\t24:   \"too many open files\",\n\t25:   \"inappropriate ioctl for device\",\n\t26:   \"text file busy\",\n\t27:   \"file too large\",\n\t28:   \"no space left on device\",\n\t29:   \"illegal seek\",\n\t30:   \"read-only file system\",\n\t31:   \"too many links\",\n\t32:   \"broken pipe\",\n\t33:   \"numerical argument out of domain\",\n\t34:   \"numerical result out of range\",\n\t35:   \"no message of desired type\",\n\t36:   \"identifier removed\",\n\t37:   \"channel number out of range\",\n\t38:   \"level 2 not synchronized\",\n\t39:   \"level 3 halted\",\n\t40:   \"level 3 reset\",\n\t41:   \"link number out of range\",\n\t42:   \"protocol driver not attached\",\n\t43:   \"no CSI structure available\",\n\t44:   \"level 2 halted\",\n\t45:   \"resource deadlock avoided\",\n\t46:   \"no locks available\",\n\t50:   \"invalid exchange\",\n\t51:   \"invalid request descriptor\",\n\t52:   \"exchange full\",\n\t53:   \"no anode\",\n\t54:   \"invalid request code\",\n\t55:   \"invalid slot\",\n\t56:   \"file locking deadlock error\",\n\t59:   \"bad font file format\",\n\t60:   \"device not a stream\",\n\t61:   \"no data available\",\n\t62:   \"timer expired\",\n\t63:   \"out of streams resources\",\n\t64:   \"machine is not on the network\",\n\t65:   \"package not installed\",\n\t66:   \"object is remote\",\n\t67:   \"link has been severed\",\n\t68:   \"advertise error\",\n\t69:   \"srmount error\",\n\t70:   \"communication error on send\",\n\t71:   \"protocol error\",\n\t73:   \"RFS specific error\",\n\t74:   \"multihop attempted\",\n\t77:   \"bad message\",\n\t78:   \"file name too long\",\n\t79:   \"value too large for defined data type\",\n\t80:   \"name not unique on network\",\n\t81:   \"file descriptor in bad state\",\n\t82:   \"remote address changed\",\n\t83:   \"can not access a needed shared library\",\n\t84:   \"accessing a corrupted shared library\",\n\t85:   \".lib section in a.out corrupted\",\n\t86:   \"attempting to link in too many shared libraries\",\n\t87:   \"cannot exec a shared library directly\",\n\t88:   \"invalid or incomplete multibyte or wide character\",\n\t89:   \"function not implemented\",\n\t90:   \"too many levels of symbolic links\",\n\t91:   \"interrupted system call should be restarted\",\n\t92:   \"streams pipe error\",\n\t93:   \"directory not empty\",\n\t94:   \"too many users\",\n\t95:   \"socket operation on non-socket\",\n\t96:   \"destination address required\",\n\t97:   \"message too long\",\n\t98:   \"protocol wrong type for socket\",\n\t99:   \"protocol not available\",\n\t120:  \"protocol not supported\",\n\t121:  \"socket type not supported\",\n\t122:  \"operation not supported\",\n\t123:  \"protocol family not supported\",\n\t124:  \"address family not supported by protocol\",\n\t125:  \"address already in use\",\n\t126:  \"cannot assign requested address\",\n\t127:  \"network is down\",\n\t128:  \"network is unreachable\",\n\t129:  \"network dropped connection on reset\",\n\t130:  \"software caused connection abort\",\n\t131:  \"connection reset by peer\",\n\t132:  \"no buffer space available\",\n\t133:  \"transport endpoint is already connected\",\n\t134:  \"transport endpoint is not connected\",\n\t135:  \"structure needs cleaning\",\n\t137:  \"not a XENIX named type file\",\n\t138:  \"no XENIX semaphores available\",\n\t139:  \"is a named type file\",\n\t140:  \"remote I/O error\",\n\t141:  \"unknown error 141\",\n\t142:  \"unknown error 142\",\n\t143:  \"cannot send after transport endpoint shutdown\",\n\t144:  \"too many references: cannot splice\",\n\t145:  \"connection timed out\",\n\t146:  \"connection refused\",\n\t147:  \"host is down\",\n\t148:  \"no route to host\",\n\t149:  \"operation already in progress\",\n\t150:  \"operation now in progress\",\n\t151:  \"stale NFS file handle\",\n\t158:  \"operation canceled\",\n\t159:  \"no medium found\",\n\t160:  \"wrong medium type\",\n\t161:  \"required key not available\",\n\t162:  \"key has expired\",\n\t163:  \"key has been revoked\",\n\t164:  \"key was rejected by service\",\n\t165:  \"owner died\",\n\t166:  \"state not recoverable\",\n\t167:  \"operation not possible due to RF-kill\",\n\t168:  \"unknown error 168\",\n\t1133: \"disk quota exceeded\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"user defined signal 1\",\n\t17: \"user defined signal 2\",\n\t18: \"child exited\",\n\t19: \"power failure\",\n\t20: \"window changed\",\n\t21: \"urgent I/O condition\",\n\t22: \"I/O possible\",\n\t23: \"stopped (signal)\",\n\t24: \"stopped\",\n\t25: \"continued\",\n\t26: \"stopped (tty input)\",\n\t27: \"stopped (tty output)\",\n\t28: \"virtual timer expired\",\n\t29: \"profiling timer expired\",\n\t30: \"CPU time limit exceeded\",\n\t31: \"file size limit exceeded\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build mips64,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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\tBPF_A                            = 0x10\n\tBPF_ABS                          = 0x20\n\tBPF_ADD                          = 0x0\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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_NET_OFF                      = -0x100000\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tCFLUSH                           = 0xf\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\tCREAD                            = 0x80\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\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\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFLUSHO                           = 0x2000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\n\tHUPCL                            = 0x400\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                          = 0x8\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_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_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\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DONTFRAG                    = 0x3e\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\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_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\tISTRIP                           = 0x20\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x40000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\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_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_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\n\tNLA_ALIGNTO                      = 0x4\n\tNLA_F_NESTED                     = 0x8000\n\tNLA_F_NET_BYTEORDER              = 0x4000\n\tNLA_HDRLEN                       = 0x4\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\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_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\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_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\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                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CC_ALGO                     = 0x10\n\tRTAX_CWND                        = 0x7\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                         = 0x10\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                          = 0x16\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x5b\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x13\n\tRTM_NR_MSGTYPES                  = 0x4c\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_COMPARE_MASK                = 0x11\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\tRTN_MAX                          = 0xb\n\tRTPROT_BABEL                     = 0x2a\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x40047309\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x80047308\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x1\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0xffff\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_BPF                    = 0x1b\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_GET_FILTER                    = 0x1a\n\tSO_INCOMING_CPU                  = 0x31\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_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_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_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_STYLE                         = 0x1008\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\tTCFLSH                           = 0x5407\n\tTCIFLUSH                         = 0x0\n\tTCIOFLUSH                        = 0x2\n\tTCOFLUSH                         = 0x1\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_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_MSS_DEFAULT                  = 0x218\n\tTCP_MSS_DESIRED                  = 0x4c4\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUEUE_SEQ                    = 0x15\n\tTCP_QUICKACK                     = 0xc\n\tTCP_REPAIR                       = 0x13\n\tTCP_REPAIR_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCXONC                           = 0x5406\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\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\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\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\tTOSTOP                           = 0x8000\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\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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 errors = [...]string{\n\t1:    \"operation not permitted\",\n\t2:    \"no such file or directory\",\n\t3:    \"no such process\",\n\t4:    \"interrupted system call\",\n\t5:    \"input/output error\",\n\t6:    \"no such device or address\",\n\t7:    \"argument list too long\",\n\t8:    \"exec format error\",\n\t9:    \"bad file descriptor\",\n\t10:   \"no child processes\",\n\t11:   \"resource temporarily unavailable\",\n\t12:   \"cannot allocate memory\",\n\t13:   \"permission denied\",\n\t14:   \"bad address\",\n\t15:   \"block device required\",\n\t16:   \"device or resource busy\",\n\t17:   \"file exists\",\n\t18:   \"invalid cross-device link\",\n\t19:   \"no such device\",\n\t20:   \"not a directory\",\n\t21:   \"is a directory\",\n\t22:   \"invalid argument\",\n\t23:   \"too many open files in system\",\n\t24:   \"too many open files\",\n\t25:   \"inappropriate ioctl for device\",\n\t26:   \"text file busy\",\n\t27:   \"file too large\",\n\t28:   \"no space left on device\",\n\t29:   \"illegal seek\",\n\t30:   \"read-only file system\",\n\t31:   \"too many links\",\n\t32:   \"broken pipe\",\n\t33:   \"numerical argument out of domain\",\n\t34:   \"numerical result out of range\",\n\t35:   \"no message of desired type\",\n\t36:   \"identifier removed\",\n\t37:   \"channel number out of range\",\n\t38:   \"level 2 not synchronized\",\n\t39:   \"level 3 halted\",\n\t40:   \"level 3 reset\",\n\t41:   \"link number out of range\",\n\t42:   \"protocol driver not attached\",\n\t43:   \"no CSI structure available\",\n\t44:   \"level 2 halted\",\n\t45:   \"resource deadlock avoided\",\n\t46:   \"no locks available\",\n\t50:   \"invalid exchange\",\n\t51:   \"invalid request descriptor\",\n\t52:   \"exchange full\",\n\t53:   \"no anode\",\n\t54:   \"invalid request code\",\n\t55:   \"invalid slot\",\n\t56:   \"file locking deadlock error\",\n\t59:   \"bad font file format\",\n\t60:   \"device not a stream\",\n\t61:   \"no data available\",\n\t62:   \"timer expired\",\n\t63:   \"out of streams resources\",\n\t64:   \"machine is not on the network\",\n\t65:   \"package not installed\",\n\t66:   \"object is remote\",\n\t67:   \"link has been severed\",\n\t68:   \"advertise error\",\n\t69:   \"srmount error\",\n\t70:   \"communication error on send\",\n\t71:   \"protocol error\",\n\t73:   \"RFS specific error\",\n\t74:   \"multihop attempted\",\n\t77:   \"bad message\",\n\t78:   \"file name too long\",\n\t79:   \"value too large for defined data type\",\n\t80:   \"name not unique on network\",\n\t81:   \"file descriptor in bad state\",\n\t82:   \"remote address changed\",\n\t83:   \"can not access a needed shared library\",\n\t84:   \"accessing a corrupted shared library\",\n\t85:   \".lib section in a.out corrupted\",\n\t86:   \"attempting to link in too many shared libraries\",\n\t87:   \"cannot exec a shared library directly\",\n\t88:   \"invalid or incomplete multibyte or wide character\",\n\t89:   \"function not implemented\",\n\t90:   \"too many levels of symbolic links\",\n\t91:   \"interrupted system call should be restarted\",\n\t92:   \"streams pipe error\",\n\t93:   \"directory not empty\",\n\t94:   \"too many users\",\n\t95:   \"socket operation on non-socket\",\n\t96:   \"destination address required\",\n\t97:   \"message too long\",\n\t98:   \"protocol wrong type for socket\",\n\t99:   \"protocol not available\",\n\t120:  \"protocol not supported\",\n\t121:  \"socket type not supported\",\n\t122:  \"operation not supported\",\n\t123:  \"protocol family not supported\",\n\t124:  \"address family not supported by protocol\",\n\t125:  \"address already in use\",\n\t126:  \"cannot assign requested address\",\n\t127:  \"network is down\",\n\t128:  \"network is unreachable\",\n\t129:  \"network dropped connection on reset\",\n\t130:  \"software caused connection abort\",\n\t131:  \"connection reset by peer\",\n\t132:  \"no buffer space available\",\n\t133:  \"transport endpoint is already connected\",\n\t134:  \"transport endpoint is not connected\",\n\t135:  \"structure needs cleaning\",\n\t137:  \"not a XENIX named type file\",\n\t138:  \"no XENIX semaphores available\",\n\t139:  \"is a named type file\",\n\t140:  \"remote I/O error\",\n\t141:  \"unknown error 141\",\n\t142:  \"unknown error 142\",\n\t143:  \"cannot send after transport endpoint shutdown\",\n\t144:  \"too many references: cannot splice\",\n\t145:  \"connection timed out\",\n\t146:  \"connection refused\",\n\t147:  \"host is down\",\n\t148:  \"no route to host\",\n\t149:  \"operation already in progress\",\n\t150:  \"operation now in progress\",\n\t151:  \"stale file handle\",\n\t158:  \"operation canceled\",\n\t159:  \"no medium found\",\n\t160:  \"wrong medium type\",\n\t161:  \"required key not available\",\n\t162:  \"key has expired\",\n\t163:  \"key has been revoked\",\n\t164:  \"key was rejected by service\",\n\t165:  \"owner died\",\n\t166:  \"state not recoverable\",\n\t167:  \"operation not possible due to RF-kill\",\n\t168:  \"memory page has hardware error\",\n\t1133: \"disk quota exceeded\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"user defined signal 1\",\n\t17: \"user defined signal 2\",\n\t18: \"child exited\",\n\t19: \"power failure\",\n\t20: \"window changed\",\n\t21: \"urgent I/O condition\",\n\t22: \"I/O possible\",\n\t23: \"stopped (signal)\",\n\t24: \"stopped\",\n\t25: \"continued\",\n\t26: \"stopped (tty input)\",\n\t27: \"stopped (tty output)\",\n\t28: \"virtual timer expired\",\n\t29: \"profiling timer expired\",\n\t30: \"CPU time limit exceeded\",\n\t31: \"file size limit exceeded\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build mips64le,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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\tBPF_A                            = 0x10\n\tBPF_ABS                          = 0x20\n\tBPF_ADD                          = 0x0\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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_NET_OFF                      = -0x100000\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tCFLUSH                           = 0xf\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\tCREAD                            = 0x80\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\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\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFLUSHO                           = 0x2000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\n\tHUPCL                            = 0x400\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                          = 0x8\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_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_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\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DONTFRAG                    = 0x3e\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\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_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\tISTRIP                           = 0x20\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x40000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\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_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_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\n\tNLA_ALIGNTO                      = 0x4\n\tNLA_F_NESTED                     = 0x8000\n\tNLA_F_NET_BYTEORDER              = 0x4000\n\tNLA_HDRLEN                       = 0x4\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\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_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\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_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\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                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CC_ALGO                     = 0x10\n\tRTAX_CWND                        = 0x7\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                         = 0x10\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                          = 0x16\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x5b\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x13\n\tRTM_NR_MSGTYPES                  = 0x4c\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_COMPARE_MASK                = 0x11\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\tRTN_MAX                          = 0xb\n\tRTPROT_BABEL                     = 0x2a\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x40047309\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x80047308\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x1\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0xffff\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_BPF                    = 0x1b\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_GET_FILTER                    = 0x1a\n\tSO_INCOMING_CPU                  = 0x31\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_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_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_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_STYLE                         = 0x1008\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\tTCFLSH                           = 0x5407\n\tTCIFLUSH                         = 0x0\n\tTCIOFLUSH                        = 0x2\n\tTCOFLUSH                         = 0x1\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_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_MSS_DEFAULT                  = 0x218\n\tTCP_MSS_DESIRED                  = 0x4c4\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUEUE_SEQ                    = 0x15\n\tTCP_QUICKACK                     = 0xc\n\tTCP_REPAIR                       = 0x13\n\tTCP_REPAIR_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCXONC                           = 0x5406\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\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\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\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\tTOSTOP                           = 0x8000\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\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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 errors = [...]string{\n\t1:    \"operation not permitted\",\n\t2:    \"no such file or directory\",\n\t3:    \"no such process\",\n\t4:    \"interrupted system call\",\n\t5:    \"input/output error\",\n\t6:    \"no such device or address\",\n\t7:    \"argument list too long\",\n\t8:    \"exec format error\",\n\t9:    \"bad file descriptor\",\n\t10:   \"no child processes\",\n\t11:   \"resource temporarily unavailable\",\n\t12:   \"cannot allocate memory\",\n\t13:   \"permission denied\",\n\t14:   \"bad address\",\n\t15:   \"block device required\",\n\t16:   \"device or resource busy\",\n\t17:   \"file exists\",\n\t18:   \"invalid cross-device link\",\n\t19:   \"no such device\",\n\t20:   \"not a directory\",\n\t21:   \"is a directory\",\n\t22:   \"invalid argument\",\n\t23:   \"too many open files in system\",\n\t24:   \"too many open files\",\n\t25:   \"inappropriate ioctl for device\",\n\t26:   \"text file busy\",\n\t27:   \"file too large\",\n\t28:   \"no space left on device\",\n\t29:   \"illegal seek\",\n\t30:   \"read-only file system\",\n\t31:   \"too many links\",\n\t32:   \"broken pipe\",\n\t33:   \"numerical argument out of domain\",\n\t34:   \"numerical result out of range\",\n\t35:   \"no message of desired type\",\n\t36:   \"identifier removed\",\n\t37:   \"channel number out of range\",\n\t38:   \"level 2 not synchronized\",\n\t39:   \"level 3 halted\",\n\t40:   \"level 3 reset\",\n\t41:   \"link number out of range\",\n\t42:   \"protocol driver not attached\",\n\t43:   \"no CSI structure available\",\n\t44:   \"level 2 halted\",\n\t45:   \"resource deadlock avoided\",\n\t46:   \"no locks available\",\n\t50:   \"invalid exchange\",\n\t51:   \"invalid request descriptor\",\n\t52:   \"exchange full\",\n\t53:   \"no anode\",\n\t54:   \"invalid request code\",\n\t55:   \"invalid slot\",\n\t56:   \"file locking deadlock error\",\n\t59:   \"bad font file format\",\n\t60:   \"device not a stream\",\n\t61:   \"no data available\",\n\t62:   \"timer expired\",\n\t63:   \"out of streams resources\",\n\t64:   \"machine is not on the network\",\n\t65:   \"package not installed\",\n\t66:   \"object is remote\",\n\t67:   \"link has been severed\",\n\t68:   \"advertise error\",\n\t69:   \"srmount error\",\n\t70:   \"communication error on send\",\n\t71:   \"protocol error\",\n\t73:   \"RFS specific error\",\n\t74:   \"multihop attempted\",\n\t77:   \"bad message\",\n\t78:   \"file name too long\",\n\t79:   \"value too large for defined data type\",\n\t80:   \"name not unique on network\",\n\t81:   \"file descriptor in bad state\",\n\t82:   \"remote address changed\",\n\t83:   \"can not access a needed shared library\",\n\t84:   \"accessing a corrupted shared library\",\n\t85:   \".lib section in a.out corrupted\",\n\t86:   \"attempting to link in too many shared libraries\",\n\t87:   \"cannot exec a shared library directly\",\n\t88:   \"invalid or incomplete multibyte or wide character\",\n\t89:   \"function not implemented\",\n\t90:   \"too many levels of symbolic links\",\n\t91:   \"interrupted system call should be restarted\",\n\t92:   \"streams pipe error\",\n\t93:   \"directory not empty\",\n\t94:   \"too many users\",\n\t95:   \"socket operation on non-socket\",\n\t96:   \"destination address required\",\n\t97:   \"message too long\",\n\t98:   \"protocol wrong type for socket\",\n\t99:   \"protocol not available\",\n\t120:  \"protocol not supported\",\n\t121:  \"socket type not supported\",\n\t122:  \"operation not supported\",\n\t123:  \"protocol family not supported\",\n\t124:  \"address family not supported by protocol\",\n\t125:  \"address already in use\",\n\t126:  \"cannot assign requested address\",\n\t127:  \"network is down\",\n\t128:  \"network is unreachable\",\n\t129:  \"network dropped connection on reset\",\n\t130:  \"software caused connection abort\",\n\t131:  \"connection reset by peer\",\n\t132:  \"no buffer space available\",\n\t133:  \"transport endpoint is already connected\",\n\t134:  \"transport endpoint is not connected\",\n\t135:  \"structure needs cleaning\",\n\t137:  \"not a XENIX named type file\",\n\t138:  \"no XENIX semaphores available\",\n\t139:  \"is a named type file\",\n\t140:  \"remote I/O error\",\n\t141:  \"unknown error 141\",\n\t142:  \"unknown error 142\",\n\t143:  \"cannot send after transport endpoint shutdown\",\n\t144:  \"too many references: cannot splice\",\n\t145:  \"connection timed out\",\n\t146:  \"connection refused\",\n\t147:  \"host is down\",\n\t148:  \"no route to host\",\n\t149:  \"operation already in progress\",\n\t150:  \"operation now in progress\",\n\t151:  \"stale file handle\",\n\t158:  \"operation canceled\",\n\t159:  \"no medium found\",\n\t160:  \"wrong medium type\",\n\t161:  \"required key not available\",\n\t162:  \"key has expired\",\n\t163:  \"key has been revoked\",\n\t164:  \"key was rejected by service\",\n\t165:  \"owner died\",\n\t166:  \"state not recoverable\",\n\t167:  \"operation not possible due to RF-kill\",\n\t168:  \"memory page has hardware error\",\n\t1133: \"disk quota exceeded\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"user defined signal 1\",\n\t17: \"user defined signal 2\",\n\t18: \"child exited\",\n\t19: \"power failure\",\n\t20: \"window changed\",\n\t21: \"urgent I/O condition\",\n\t22: \"I/O possible\",\n\t23: \"stopped (signal)\",\n\t24: \"stopped\",\n\t25: \"continued\",\n\t26: \"stopped (tty input)\",\n\t27: \"stopped (tty output)\",\n\t28: \"virtual timer expired\",\n\t29: \"profiling timer expired\",\n\t30: \"CPU time limit exceeded\",\n\t31: \"file size limit exceeded\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go",
    "content": "// mkerrors.sh\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build mipsle,linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\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                           = 0x2a\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_NET_OFF                      = -0x100000\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\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_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\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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_HSR                        = 0x892f\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x2000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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                          = 0x8\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_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_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\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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DONTFRAG                    = 0x3e\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\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_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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_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\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_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_STACK                        = 0x40000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\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_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_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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_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_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\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_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\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                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CC_ALGO                     = 0x10\n\tRTAX_CWND                        = 0x7\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                         = 0x10\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                          = 0x18\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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                          = 0x5f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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                  = 0x14\n\tRTM_NR_MSGTYPES                  = 0x50\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_COMPARE_MASK                = 0x11\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\tRTN_MAX                          = 0xb\n\tRTPROT_BABEL                     = 0x2a\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x40047309\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x80047308\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x1\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_X25                          = 0x106\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_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_BPF                    = 0x1b\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_GET_FILTER                    = 0x1a\n\tSO_INCOMING_CPU                  = 0x31\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_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_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_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_STYLE                         = 0x1008\n\tSO_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CC_INFO                      = 0x1a\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_INFO                         = 0xb\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_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_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\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\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\tTOSTOP                           = 0x8000\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\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x20\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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 errors = [...]string{\n\t1:    \"operation not permitted\",\n\t2:    \"no such file or directory\",\n\t3:    \"no such process\",\n\t4:    \"interrupted system call\",\n\t5:    \"input/output error\",\n\t6:    \"no such device or address\",\n\t7:    \"argument list too long\",\n\t8:    \"exec format error\",\n\t9:    \"bad file descriptor\",\n\t10:   \"no child processes\",\n\t11:   \"resource temporarily unavailable\",\n\t12:   \"cannot allocate memory\",\n\t13:   \"permission denied\",\n\t14:   \"bad address\",\n\t15:   \"block device required\",\n\t16:   \"device or resource busy\",\n\t17:   \"file exists\",\n\t18:   \"invalid cross-device link\",\n\t19:   \"no such device\",\n\t20:   \"not a directory\",\n\t21:   \"is a directory\",\n\t22:   \"invalid argument\",\n\t23:   \"too many open files in system\",\n\t24:   \"too many open files\",\n\t25:   \"inappropriate ioctl for device\",\n\t26:   \"text file busy\",\n\t27:   \"file too large\",\n\t28:   \"no space left on device\",\n\t29:   \"illegal seek\",\n\t30:   \"read-only file system\",\n\t31:   \"too many links\",\n\t32:   \"broken pipe\",\n\t33:   \"numerical argument out of domain\",\n\t34:   \"numerical result out of range\",\n\t35:   \"no message of desired type\",\n\t36:   \"identifier removed\",\n\t37:   \"channel number out of range\",\n\t38:   \"level 2 not synchronized\",\n\t39:   \"level 3 halted\",\n\t40:   \"level 3 reset\",\n\t41:   \"link number out of range\",\n\t42:   \"protocol driver not attached\",\n\t43:   \"no CSI structure available\",\n\t44:   \"level 2 halted\",\n\t45:   \"resource deadlock avoided\",\n\t46:   \"no locks available\",\n\t50:   \"invalid exchange\",\n\t51:   \"invalid request descriptor\",\n\t52:   \"exchange full\",\n\t53:   \"no anode\",\n\t54:   \"invalid request code\",\n\t55:   \"invalid slot\",\n\t56:   \"file locking deadlock error\",\n\t59:   \"bad font file format\",\n\t60:   \"device not a stream\",\n\t61:   \"no data available\",\n\t62:   \"timer expired\",\n\t63:   \"out of streams resources\",\n\t64:   \"machine is not on the network\",\n\t65:   \"package not installed\",\n\t66:   \"object is remote\",\n\t67:   \"link has been severed\",\n\t68:   \"advertise error\",\n\t69:   \"srmount error\",\n\t70:   \"communication error on send\",\n\t71:   \"protocol error\",\n\t73:   \"RFS specific error\",\n\t74:   \"multihop attempted\",\n\t77:   \"bad message\",\n\t78:   \"file name too long\",\n\t79:   \"value too large for defined data type\",\n\t80:   \"name not unique on network\",\n\t81:   \"file descriptor in bad state\",\n\t82:   \"remote address changed\",\n\t83:   \"can not access a needed shared library\",\n\t84:   \"accessing a corrupted shared library\",\n\t85:   \".lib section in a.out corrupted\",\n\t86:   \"attempting to link in too many shared libraries\",\n\t87:   \"cannot exec a shared library directly\",\n\t88:   \"invalid or incomplete multibyte or wide character\",\n\t89:   \"function not implemented\",\n\t90:   \"too many levels of symbolic links\",\n\t91:   \"interrupted system call should be restarted\",\n\t92:   \"streams pipe error\",\n\t93:   \"directory not empty\",\n\t94:   \"too many users\",\n\t95:   \"socket operation on non-socket\",\n\t96:   \"destination address required\",\n\t97:   \"message too long\",\n\t98:   \"protocol wrong type for socket\",\n\t99:   \"protocol not available\",\n\t120:  \"protocol not supported\",\n\t121:  \"socket type not supported\",\n\t122:  \"operation not supported\",\n\t123:  \"protocol family not supported\",\n\t124:  \"address family not supported by protocol\",\n\t125:  \"address already in use\",\n\t126:  \"cannot assign requested address\",\n\t127:  \"network is down\",\n\t128:  \"network is unreachable\",\n\t129:  \"network dropped connection on reset\",\n\t130:  \"software caused connection abort\",\n\t131:  \"connection reset by peer\",\n\t132:  \"no buffer space available\",\n\t133:  \"transport endpoint is already connected\",\n\t134:  \"transport endpoint is not connected\",\n\t135:  \"structure needs cleaning\",\n\t137:  \"not a XENIX named type file\",\n\t138:  \"no XENIX semaphores available\",\n\t139:  \"is a named type file\",\n\t140:  \"remote I/O error\",\n\t141:  \"unknown error 141\",\n\t142:  \"unknown error 142\",\n\t143:  \"cannot send after transport endpoint shutdown\",\n\t144:  \"too many references: cannot splice\",\n\t145:  \"connection timed out\",\n\t146:  \"connection refused\",\n\t147:  \"host is down\",\n\t148:  \"no route to host\",\n\t149:  \"operation already in progress\",\n\t150:  \"operation now in progress\",\n\t151:  \"stale file handle\",\n\t158:  \"operation canceled\",\n\t159:  \"no medium found\",\n\t160:  \"wrong medium type\",\n\t161:  \"required key not available\",\n\t162:  \"key has expired\",\n\t163:  \"key has been revoked\",\n\t164:  \"key was rejected by service\",\n\t165:  \"owner died\",\n\t166:  \"state not recoverable\",\n\t167:  \"operation not possible due to RF-kill\",\n\t168:  \"memory page has hardware error\",\n\t1133: \"disk quota exceeded\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"user defined signal 1\",\n\t17: \"user defined signal 2\",\n\t18: \"child exited\",\n\t19: \"power failure\",\n\t20: \"window changed\",\n\t21: \"urgent I/O condition\",\n\t22: \"I/O possible\",\n\t23: \"stopped (signal)\",\n\t24: \"stopped\",\n\t25: \"continued\",\n\t26: \"stopped (tty input)\",\n\t27: \"stopped (tty output)\",\n\t28: \"virtual timer expired\",\n\t29: \"profiling timer expired\",\n\t30: \"CPU time limit exceeded\",\n\t31: \"file size limit exceeded\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build ppc64,linux\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_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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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                           = 0x1f\n\tBPF_A                            = 0x10\n\tBPF_ABS                          = 0x20\n\tBPF_ADD                          = 0x0\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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\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_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\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_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\tCR0                              = 0x0\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCRTSCTS                          = 0x80000000\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\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\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tETH_P_XDSA                       = 0xf8\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFLUSHO                           = 0x800000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_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_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x8\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_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_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\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x1000\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80000000\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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                        = 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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER      = 0x1000\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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_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_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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\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_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\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                    = 0x1000ff\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_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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xf\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                          = 0x11\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x57\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x12\n\tRTM_NR_MSGTYPES                  = 0x48\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_GET_FILTER                    = 0x1a\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_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_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_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_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_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_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_MSS_DEFAULT                  = 0x218\n\tTCP_MSS_DESIRED                  = 0x4c4\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUEUE_SEQ                    = 0x15\n\tTCP_QUICKACK                     = 0xc\n\tTCP_REPAIR                       = 0x13\n\tTCP_REPAIR_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\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\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\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\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\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETHDRSZ                  = 0x800454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t58:  \"file locking deadlock error\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"memory page has hardware error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build ppc64le,linux\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_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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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                           = 0x1f\n\tBPF_A                            = 0x10\n\tBPF_ABS                          = 0x20\n\tBPF_ADD                          = 0x0\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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\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_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\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_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\tCR0                              = 0x0\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCRTSCTS                          = 0x80000000\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\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\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\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_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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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_WAN_PPP                    = 0x7\n\tETH_P_WCCP                       = 0x883e\n\tETH_P_X25                        = 0x805\n\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFLUSHO                           = 0x800000\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_LOCK                           = 0x1\n\tF_NOTIFY                         = 0x402\n\tF_OK                             = 0x0\n\tF_RDLCK                          = 0x0\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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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_NODAD                      = 0x2\n\tIFA_F_OPTIMISTIC                 = 0x4\n\tIFA_F_PERMANENT                  = 0x80\n\tIFA_F_SECONDARY                  = 0x1\n\tIFA_F_TEMPORARY                  = 0x1\n\tIFA_F_TENTATIVE                  = 0x40\n\tIFA_MAX                          = 0x7\n\tIFF_802_1Q_VLAN                  = 0x1\n\tIFF_ALLMULTI                     = 0x200\n\tIFF_ATTACH_QUEUE                 = 0x200\n\tIFF_AUTOMEDIA                    = 0x4000\n\tIFF_BONDING                      = 0x20\n\tIFF_BRIDGE_PORT                  = 0x4000\n\tIFF_BROADCAST                    = 0x2\n\tIFF_DEBUG                        = 0x4\n\tIFF_DETACH_QUEUE                 = 0x400\n\tIFF_DISABLE_NETPOLL              = 0x1000\n\tIFF_DONT_BRIDGE                  = 0x800\n\tIFF_DORMANT                      = 0x20000\n\tIFF_DYNAMIC                      = 0x8000\n\tIFF_EBRIDGE                      = 0x2\n\tIFF_ECHO                         = 0x40000\n\tIFF_ISATAP                       = 0x80\n\tIFF_LIVE_ADDR_CHANGE             = 0x100000\n\tIFF_LOOPBACK                     = 0x8\n\tIFF_LOWER_UP                     = 0x10000\n\tIFF_MACVLAN                      = 0x200000\n\tIFF_MACVLAN_PORT                 = 0x2000\n\tIFF_MASTER                       = 0x400\n\tIFF_MASTER_8023AD                = 0x8\n\tIFF_MASTER_ALB                   = 0x10\n\tIFF_MASTER_ARPMON                = 0x100\n\tIFF_MULTICAST                    = 0x1000\n\tIFF_MULTI_QUEUE                  = 0x100\n\tIFF_NOARP                        = 0x80\n\tIFF_NOFILTER                     = 0x1000\n\tIFF_NOTRAILERS                   = 0x20\n\tIFF_NO_PI                        = 0x1000\n\tIFF_ONE_QUEUE                    = 0x2000\n\tIFF_OVS_DATAPATH                 = 0x8000\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_SLAVE_INACTIVE               = 0x4\n\tIFF_SLAVE_NEEDARP                = 0x40\n\tIFF_SUPP_NOFCS                   = 0x80000\n\tIFF_TAP                          = 0x2\n\tIFF_TEAM_PORT                    = 0x40000\n\tIFF_TUN                          = 0x1\n\tIFF_TUN_EXCL                     = 0x8000\n\tIFF_TX_SKB_SHARING               = 0x10000\n\tIFF_UNICAST_FLT                  = 0x20000\n\tIFF_UP                           = 0x1\n\tIFF_VNET_HDR                     = 0x4000\n\tIFF_VOLATILE                     = 0x70c5a\n\tIFF_WAN_HDLC                     = 0x200\n\tIFF_XMIT_DST_RELEASE             = 0x400\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_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\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_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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\n\tIPV6_PKTINFO                     = 0x32\n\tIPV6_PMTUDISC_DO                 = 0x2\n\tIPV6_PMTUDISC_DONT               = 0x0\n\tIPV6_PMTUDISC_PROBE              = 0x3\n\tIPV6_PMTUDISC_WANT               = 0x1\n\tIPV6_RECVDSTOPTS                 = 0x3a\n\tIPV6_RECVERR                     = 0x19\n\tIPV6_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\n\tIPV6_V6ONLY                      = 0x1a\n\tIPV6_XFRM_POLICY                 = 0x23\n\tIP_ADD_MEMBERSHIP                = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP         = 0x27\n\tIP_BLOCK_SOURCE                  = 0x26\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_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_PROBE                = 0x3\n\tIP_PMTUDISC_WANT                 = 0x1\n\tIP_RECVERR                       = 0xb\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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x1000\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\n\tMS_DIRSYNC                       = 0x80\n\tMS_INVALIDATE                    = 0x2\n\tMS_I_VERSION                     = 0x800000\n\tMS_KERNMOUNT                     = 0x400000\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_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                      = 0x800051\n\tMS_SHARED                        = 0x100000\n\tMS_SILENT                        = 0x8000\n\tMS_SLAVE                         = 0x80000\n\tMS_STRICTATIME                   = 0x1000000\n\tMS_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\n\tNETLINK_ADD_MEMBERSHIP           = 0x1\n\tNETLINK_AUDIT                    = 0x9\n\tNETLINK_BROADCAST_ERROR          = 0x4\n\tNETLINK_CONNECTOR                = 0xb\n\tNETLINK_CRYPTO                   = 0x15\n\tNETLINK_DNRTMSG                  = 0xe\n\tNETLINK_DROP_MEMBERSHIP          = 0x2\n\tNETLINK_ECRYPTFS                 = 0x13\n\tNETLINK_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\n\tNETLINK_INET_DIAG                = 0x4\n\tNETLINK_IP6_FW                   = 0xd\n\tNETLINK_ISCSI                    = 0x8\n\tNETLINK_KOBJECT_UEVENT           = 0xf\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80000000\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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                        = 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_CPU                = 0x2\n\tPACKET_FANOUT_FLAG_DEFRAG        = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER      = 0x1000\n\tPACKET_FANOUT_HASH               = 0x0\n\tPACKET_FANOUT_LB                 = 0x1\n\tPACKET_FANOUT_RND                = 0x4\n\tPACKET_FANOUT_ROLLOVER           = 0x3\n\tPACKET_FASTROUTE                 = 0x6\n\tPACKET_HDRLEN                    = 0xb\n\tPACKET_HOST                      = 0x0\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_RECV_OUTPUT               = 0x3\n\tPACKET_RESERVE                   = 0xc\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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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_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_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_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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\n\tPR_SET_TIMERSLACK                = 0x1d\n\tPR_SET_TIMING                    = 0xe\n\tPR_SET_TSC                       = 0x1a\n\tPR_SET_UNALIGN                   = 0x6\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\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                    = 0x1000ff\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_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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CWND                        = 0x7\n\tRTAX_FEATURES                    = 0xc\n\tRTAX_FEATURE_ALLFRAG             = 0x8\n\tRTAX_FEATURE_ECN                 = 0x1\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                         = 0xf\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                          = 0x11\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETQDISC                     = 0x26\n\tRTM_GETROUTE                     = 0x1a\n\tRTM_GETRULE                      = 0x22\n\tRTM_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x57\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWPREFIX                    = 0x34\n\tRTM_NEWQDISC                     = 0x24\n\tRTM_NEWROUTE                     = 0x18\n\tRTM_NEWRULE                      = 0x20\n\tRTM_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x12\n\tRTM_NR_MSGTYPES                  = 0x48\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_F_DEAD                      = 0x1\n\tRTNH_F_ONLINK                    = 0x4\n\tRTNH_F_PERVASIVE                 = 0x2\n\tRTN_MAX                          = 0xb\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_GET_FILTER                    = 0x1a\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_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_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_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_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_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_INFO                         = 0xb\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_MAXKEYLEN             = 0x50\n\tTCP_MSS                          = 0x200\n\tTCP_MSS_DEFAULT                  = 0x218\n\tTCP_MSS_DESIRED                  = 0x4c4\n\tTCP_NODELAY                      = 0x1\n\tTCP_QUEUE_SEQ                    = 0x15\n\tTCP_QUICKACK                     = 0xc\n\tTCP_REPAIR                       = 0x13\n\tTCP_REPAIR_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\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\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\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\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\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETHDRSZ                  = 0x800454d8\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t58:  \"file locking deadlock error\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"memory page has hardware error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build s390x,linux\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_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_KEY                           = 0xf\n\tAF_LLC                           = 0x1a\n\tAF_LOCAL                         = 0x1\n\tAF_MAX                           = 0x29\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\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\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_NET_OFF                      = -0x100000\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\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_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\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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x1000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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                          = 0x8\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_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_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\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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DONTFRAG                    = 0x3e\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\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_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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_HUGEPAGE                    = 0xe\n\tMADV_HWPOISON                    = 0x64\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\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_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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\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_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_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\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_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\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CC_ALGO                     = 0x10\n\tRTAX_CWND                        = 0x7\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                         = 0x10\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                          = 0x16\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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_GETTCLASS                    = 0x2a\n\tRTM_GETTFILTER                   = 0x2e\n\tRTM_MAX                          = 0x5b\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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_NEWTCLASS                    = 0x28\n\tRTM_NEWTFILTER                   = 0x2c\n\tRTM_NR_FAMILIES                  = 0x13\n\tRTM_NR_MSGTYPES                  = 0x4c\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_COMPARE_MASK                = 0x11\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\tRTN_MAX                          = 0xb\n\tRTPROT_BABEL                     = 0x2a\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x23\n\tSCM_WIFI_STATUS                  = 0x29\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\tSIOCDARP                         = 0x8953\n\tSIOCDELDLCI                      = 0x8981\n\tSIOCDELMULTI                     = 0x8932\n\tSIOCDELRT                        = 0x890c\n\tSIOCDEVPRIVATE                   = 0x89f0\n\tSIOCDIFADDR                      = 0x8936\n\tSIOCDRARP                        = 0x8960\n\tSIOCGARP                         = 0x8954\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\tSIOCGPGRP                        = 0x8904\n\tSIOCGRARP                        = 0x8961\n\tSIOCGSTAMP                       = 0x8906\n\tSIOCGSTAMPNS                     = 0x8907\n\tSIOCPROTOPRIVATE                 = 0x89e0\n\tSIOCRTMSG                        = 0x890d\n\tSIOCSARP                         = 0x8955\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\tSIOCSPGRP                        = 0x8902\n\tSIOCSRARP                        = 0x8962\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_ATM                          = 0x108\n\tSOL_DECNET                       = 0x105\n\tSOL_ICMPV6                       = 0x3a\n\tSOL_IP                           = 0x0\n\tSOL_IPV6                         = 0x29\n\tSOL_IRDA                         = 0x10a\n\tSOL_NETLINK                      = 0x10e\n\tSOL_PACKET                       = 0x107\n\tSOL_RAW                          = 0xff\n\tSOL_SOCKET                       = 0x1\n\tSOL_TCP                          = 0x6\n\tSOL_X25                          = 0x106\n\tSOMAXCONN                        = 0x80\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_FILTER                 = 0x1a\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_BPF                    = 0x1b\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_GET_FILTER                    = 0x1a\n\tSO_INCOMING_CPU                  = 0x31\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_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_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_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_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CC_INFO                      = 0x1a\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_INFO                         = 0xb\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_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_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\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\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\tTOSTOP                           = 0x100\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\tTUNSETDEBUG                      = 0x400454c9\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\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\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(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\tSIGUNUSED = syscall.Signal(0x1f)\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t35:  \"resource deadlock avoided\",\n\t36:  \"file name too long\",\n\t37:  \"no locks available\",\n\t38:  \"function not implemented\",\n\t39:  \"directory not empty\",\n\t40:  \"too many levels of symbolic links\",\n\t42:  \"no message of desired type\",\n\t43:  \"identifier removed\",\n\t44:  \"channel number out of range\",\n\t45:  \"level 2 not synchronized\",\n\t46:  \"level 3 halted\",\n\t47:  \"level 3 reset\",\n\t48:  \"link number out of range\",\n\t49:  \"protocol driver not attached\",\n\t50:  \"no CSI structure available\",\n\t51:  \"level 2 halted\",\n\t52:  \"invalid exchange\",\n\t53:  \"invalid request descriptor\",\n\t54:  \"exchange full\",\n\t55:  \"no anode\",\n\t56:  \"invalid request code\",\n\t57:  \"invalid slot\",\n\t59:  \"bad font file format\",\n\t60:  \"device not a stream\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of streams resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"multihop attempted\",\n\t73:  \"RFS specific error\",\n\t74:  \"bad message\",\n\t75:  \"value too large for defined data type\",\n\t76:  \"name not unique on network\",\n\t77:  \"file descriptor in bad state\",\n\t78:  \"remote address changed\",\n\t79:  \"can not access a needed shared library\",\n\t80:  \"accessing a corrupted shared library\",\n\t81:  \".lib section in a.out corrupted\",\n\t82:  \"attempting to link in too many shared libraries\",\n\t83:  \"cannot exec a shared library directly\",\n\t84:  \"invalid or incomplete multibyte or wide character\",\n\t85:  \"interrupted system call should be restarted\",\n\t86:  \"streams pipe error\",\n\t87:  \"too many users\",\n\t88:  \"socket operation on non-socket\",\n\t89:  \"destination address required\",\n\t90:  \"message too long\",\n\t91:  \"protocol wrong type for socket\",\n\t92:  \"protocol not available\",\n\t93:  \"protocol not supported\",\n\t94:  \"socket type not supported\",\n\t95:  \"operation not supported\",\n\t96:  \"protocol family not supported\",\n\t97:  \"address family not supported by protocol\",\n\t98:  \"address already in use\",\n\t99:  \"cannot assign requested address\",\n\t100: \"network is down\",\n\t101: \"network is unreachable\",\n\t102: \"network dropped connection on reset\",\n\t103: \"software caused connection abort\",\n\t104: \"connection reset by peer\",\n\t105: \"no buffer space available\",\n\t106: \"transport endpoint is already connected\",\n\t107: \"transport endpoint is not connected\",\n\t108: \"cannot send after transport endpoint shutdown\",\n\t109: \"too many references: cannot splice\",\n\t110: \"connection timed out\",\n\t111: \"connection refused\",\n\t112: \"host is down\",\n\t113: \"no route to host\",\n\t114: \"operation already in progress\",\n\t115: \"operation now in progress\",\n\t116: \"stale file handle\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"disk quota exceeded\",\n\t123: \"no medium found\",\n\t124: \"wrong medium type\",\n\t125: \"operation canceled\",\n\t126: \"required key not available\",\n\t127: \"key has expired\",\n\t128: \"key has been revoked\",\n\t129: \"key was rejected by service\",\n\t130: \"owner died\",\n\t131: \"state not recoverable\",\n\t132: \"operation not possible due to RF-kill\",\n\t133: \"memory page has hardware error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"stack fault\",\n\t17: \"child exited\",\n\t18: \"continued\",\n\t19: \"stopped (signal)\",\n\t20: \"stopped\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"urgent I/O condition\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"I/O possible\",\n\t30: \"power failure\",\n\t31: \"bad system call\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build sparc64,linux\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_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                           = 0x2a\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_RDS                           = 0x15\n\tAF_ROSE                          = 0xb\n\tAF_ROUTE                         = 0x10\n\tAF_RXRPC                         = 0x21\n\tAF_SECURITY                      = 0xe\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\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\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_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_X25                       = 0x10f\n\tASI_LEON_DFLUSH                  = 0x11\n\tASI_LEON_IFLUSH                  = 0x10\n\tASI_LEON_MMUFLUSH                = 0x18\n\tB0                               = 0x0\n\tB1000000                         = 0x100c\n\tB110                             = 0x3\n\tB115200                          = 0x1002\n\tB1152000                         = 0x100d\n\tB1200                            = 0x9\n\tB134                             = 0x4\n\tB150                             = 0x5\n\tB1500000                         = 0x100e\n\tB153600                          = 0x1006\n\tB1800                            = 0xa\n\tB19200                           = 0xe\n\tB200                             = 0x6\n\tB2000000                         = 0x100f\n\tB230400                          = 0x1003\n\tB2400                            = 0xb\n\tB300                             = 0x7\n\tB307200                          = 0x1007\n\tB38400                           = 0xf\n\tB460800                          = 0x1004\n\tB4800                            = 0xc\n\tB50                              = 0x1\n\tB500000                          = 0x100a\n\tB57600                           = 0x1001\n\tB576000                          = 0x100b\n\tB600                             = 0x8\n\tB614400                          = 0x1008\n\tB75                              = 0x2\n\tB76800                           = 0x1005\n\tB921600                          = 0x1009\n\tB9600                            = 0xd\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\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_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_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_MSH                          = 0xa0\n\tBPF_MUL                          = 0x20\n\tBPF_NEG                          = 0x80\n\tBPF_NET_OFF                      = -0x100000\n\tBPF_OR                           = 0x40\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\tBPF_XOR                          = 0xa0\n\tBRKINT                           = 0x2\n\tBS0                              = 0x0\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\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_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\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\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\tCSIGNAL                          = 0xff\n\tCSIZE                            = 0x30\n\tCSTART                           = 0x11\n\tCSTATUS                          = 0x0\n\tCSTOP                            = 0x13\n\tCSTOPB                           = 0x40\n\tCSUSP                            = 0x1a\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\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_FCOE                       = 0x8906\n\tETH_P_FIP                        = 0x8914\n\tETH_P_HDLC                       = 0x19\n\tETH_P_HSR                        = 0x892f\n\tETH_P_IEEE802154                 = 0xf6\n\tETH_P_IEEEPUP                    = 0xa00\n\tETH_P_IEEEPUPAT                  = 0xa01\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_MOBITEX                    = 0x15\n\tETH_P_MPLS_MC                    = 0x8848\n\tETH_P_MPLS_UC                    = 0x8847\n\tETH_P_MVRP                       = 0x88f5\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_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\tEXTA                             = 0xe\n\tEXTB                             = 0xf\n\tEXTPROC                          = 0x10000\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_ZERO_RANGE             = 0x10\n\tFD_CLOEXEC                       = 0x1\n\tFD_SETSIZE                       = 0x400\n\tFF0                              = 0x0\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFLUSHO                           = 0x2000\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_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_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_SHLCK                          = 0x8\n\tF_TEST                           = 0x3\n\tF_TLOCK                          = 0x2\n\tF_ULOCK                          = 0x0\n\tF_UNLCK                          = 0x3\n\tF_WRLCK                          = 0x2\n\tGRND_NONBLOCK                    = 0x1\n\tGRND_RANDOM                      = 0x2\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                          = 0x8\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_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_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\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_ADD_MEMBERSHIP              = 0x14\n\tIPV6_AUTHHDR                     = 0xa\n\tIPV6_CHECKSUM                    = 0x7\n\tIPV6_DONTFRAG                    = 0x3e\n\tIPV6_DROP_MEMBERSHIP             = 0x15\n\tIPV6_DSTOPTS                     = 0x3b\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_MTU                         = 0x18\n\tIPV6_MTU_DISCOVER                = 0x17\n\tIPV6_MULTICAST_HOPS              = 0x12\n\tIPV6_MULTICAST_IF                = 0x11\n\tIPV6_MULTICAST_LOOP              = 0x13\n\tIPV6_NEXTHOP                     = 0x9\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_RECVHOPLIMIT                = 0x33\n\tIPV6_RECVHOPOPTS                 = 0x35\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_UNICAST_HOPS                = 0x10\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_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\tISTRIP                           = 0x20\n\tIUCLC                            = 0x200\n\tIUTF8                            = 0x4000\n\tIXANY                            = 0x800\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\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_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\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_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_STACK                        = 0x20000\n\tMAP_TYPE                         = 0xf\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMNT_DETACH                       = 0x2\n\tMNT_EXPIRE                       = 0x4\n\tMNT_FORCE                        = 0x1\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\tMS_ACTIVE                        = 0x40000000\n\tMS_ASYNC                         = 0x1\n\tMS_BIND                          = 0x1000\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_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_SYNC                          = 0x4\n\tMS_SYNCHRONOUS                   = 0x10\n\tMS_UNBINDABLE                    = 0x20000\n\tNAME_MAX                         = 0xff\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_FIB_LOOKUP               = 0xa\n\tNETLINK_FIREWALL                 = 0x3\n\tNETLINK_GENERIC                  = 0x10\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_SOCK_DIAG                = 0x4\n\tNETLINK_TX_RING                  = 0x7\n\tNETLINK_UNUSED                   = 0x1\n\tNETLINK_USERSOCK                 = 0x2\n\tNETLINK_XFRM                     = 0x6\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_APPEND                     = 0x800\n\tNLM_F_ATOMIC                     = 0x400\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_REPLACE                    = 0x100\n\tNLM_F_REQUEST                    = 0x1\n\tNLM_F_ROOT                       = 0x100\n\tNOFLSH                           = 0x80\n\tOCRNL                            = 0x8\n\tOFDEL                            = 0x80\n\tOFILL                            = 0x40\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tONLRET                           = 0x20\n\tONOCR                            = 0x10\n\tOPOST                            = 0x1\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_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_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\tPRIO_PGRP                        = 0x1\n\tPRIO_PROCESS                     = 0x0\n\tPRIO_USER                        = 0x2\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_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_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               = -0x1\n\tPR_SET_SECCOMP                   = 0x16\n\tPR_SET_SECUREBITS                = 0x1c\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_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\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_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\tRLIMIT_AS                        = 0x9\n\tRLIMIT_CORE                      = 0x4\n\tRLIMIT_CPU                       = 0x0\n\tRLIMIT_DATA                      = 0x2\n\tRLIMIT_FSIZE                     = 0x1\n\tRLIMIT_NOFILE                    = 0x6\n\tRLIMIT_STACK                     = 0x3\n\tRLIM_INFINITY                    = -0x1\n\tRTAX_ADVMSS                      = 0x8\n\tRTAX_CC_ALGO                     = 0x10\n\tRTAX_CWND                        = 0x7\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                         = 0x10\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                          = 0x18\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\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_DELLINK                      = 0x11\n\tRTM_DELMDB                       = 0x55\n\tRTM_DELNEIGH                     = 0x1d\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_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_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                          = 0x5f\n\tRTM_NEWACTION                    = 0x30\n\tRTM_NEWADDR                      = 0x14\n\tRTM_NEWADDRLABEL                 = 0x48\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                  = 0x14\n\tRTM_NR_MSGTYPES                  = 0x50\n\tRTM_SETDCB                       = 0x4f\n\tRTM_SETLINK                      = 0x13\n\tRTM_SETNEIGHTBL                  = 0x43\n\tRTNH_ALIGNTO                     = 0x4\n\tRTNH_COMPARE_MASK                = 0x11\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\tRTN_MAX                          = 0xb\n\tRTPROT_BABEL                     = 0x2a\n\tRTPROT_BIRD                      = 0xc\n\tRTPROT_BOOT                      = 0x3\n\tRTPROT_DHCP                      = 0x10\n\tRTPROT_DNROUTED                  = 0xd\n\tRTPROT_GATED                     = 0x8\n\tRTPROT_KERNEL                    = 0x2\n\tRTPROT_MROUTED                   = 0x11\n\tRTPROT_MRT                       = 0xa\n\tRTPROT_NTK                       = 0xf\n\tRTPROT_RA                        = 0x9\n\tRTPROT_REDIRECT                  = 0x1\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_TIMESTAMPNS                  = 0x21\n\tSCM_WIFI_STATUS                  = 0x25\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\tSIOCGRARP                        = 0x8961\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\tSOCK_CLOEXEC                     = 0x400000\n\tSOCK_DCCP                        = 0x6\n\tSOCK_DGRAM                       = 0x2\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_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_X25                          = 0x106\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_BPF_EXTENSIONS                = 0x32\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0x400\n\tSO_BUSY_POLL                     = 0x30\n\tSO_CNX_ADVICE                    = 0x37\n\tSO_DEBUG                         = 0x1\n\tSO_DETACH_BPF                    = 0x1b\n\tSO_DETACH_FILTER                 = 0x1b\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_GET_FILTER                    = 0x1a\n\tSO_INCOMING_CPU                  = 0x33\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_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_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_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_TIMESTAMP                     = 0x1d\n\tSO_TIMESTAMPING                  = 0x23\n\tSO_TIMESTAMPNS                   = 0x21\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\tSPLICE_F_GIFT                    = 0x8\n\tSPLICE_F_MORE                    = 0x4\n\tSPLICE_F_MOVE                    = 0x1\n\tSPLICE_F_NONBLOCK                = 0x2\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\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_CC_INFO                      = 0x1a\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_INFO                         = 0xb\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_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_OPTIONS               = 0x16\n\tTCP_REPAIR_QUEUE                 = 0x14\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_USER_TIMEOUT                 = 0x12\n\tTCP_WINDOW_CLAMP                 = 0xa\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\tTIOCCBRK                         = 0x2000747a\n\tTIOCCONS                         = 0x20007424\n\tTIOCEXCL                         = 0x2000740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x40047400\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x40047483\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40047486\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_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                        = 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\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x80047401\n\tTIOCSIG                          = 0x80047488\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\tTOSTOP                           = 0x100\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\tTUNSETDEBUG                      = 0x800454c9\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\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tVDISCARD                         = 0xd\n\tVDSUSP                           = 0xb\n\tVEOF                             = 0x4\n\tVEOL                             = 0x5\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\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\tWEXITED                          = 0x4\n\tWNOHANG                          = 0x1\n\tWNOTHREAD                        = 0x20000000\n\tWNOWAIT                          = 0x1000000\n\tWORDSIZE                         = 0x40\n\tWRAP                             = 0x20000\n\tWSTOPPED                         = 0x2\n\tWUNTRACED                        = 0x2\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\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 errors = [...]string{\n\t1:   \"operation not permitted\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"input/output error\",\n\t6:   \"no such device or address\",\n\t7:   \"argument list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file descriptor\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"cannot allocate memory\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device or resource busy\",\n\t17:  \"file exists\",\n\t18:  \"invalid cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"too many open files in system\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"numerical argument out of domain\",\n\t34:  \"numerical result out of range\",\n\t36:  \"operation now in progress\",\n\t37:  \"operation already in progress\",\n\t38:  \"socket operation on non-socket\",\n\t39:  \"destination address required\",\n\t40:  \"message too long\",\n\t41:  \"protocol wrong type for socket\",\n\t42:  \"protocol not available\",\n\t43:  \"protocol not supported\",\n\t44:  \"socket type not supported\",\n\t45:  \"operation not supported\",\n\t46:  \"protocol family not supported\",\n\t47:  \"address family not supported by protocol\",\n\t48:  \"address already in use\",\n\t49:  \"cannot assign requested address\",\n\t50:  \"network is down\",\n\t51:  \"network is unreachable\",\n\t52:  \"network dropped connection on reset\",\n\t53:  \"software caused connection abort\",\n\t54:  \"connection reset by peer\",\n\t55:  \"no buffer space available\",\n\t56:  \"transport endpoint is already connected\",\n\t57:  \"transport endpoint is not connected\",\n\t58:  \"cannot send after transport endpoint shutdown\",\n\t59:  \"too many references: cannot splice\",\n\t60:  \"connection timed out\",\n\t61:  \"connection refused\",\n\t62:  \"too many levels of symbolic links\",\n\t63:  \"file name too long\",\n\t64:  \"host is down\",\n\t65:  \"no route to host\",\n\t66:  \"directory not empty\",\n\t67:  \"too many processes\",\n\t68:  \"too many users\",\n\t69:  \"disk quota exceeded\",\n\t70:  \"stale file handle\",\n\t71:  \"object is remote\",\n\t72:  \"device not a stream\",\n\t73:  \"timer expired\",\n\t74:  \"out of streams resources\",\n\t75:  \"no message of desired type\",\n\t76:  \"bad message\",\n\t77:  \"identifier removed\",\n\t78:  \"resource deadlock avoided\",\n\t79:  \"no locks available\",\n\t80:  \"machine is not on the network\",\n\t81:  \"unknown error 81\",\n\t82:  \"link has been severed\",\n\t83:  \"advertise error\",\n\t84:  \"srmount error\",\n\t85:  \"communication error on send\",\n\t86:  \"protocol error\",\n\t87:  \"multihop attempted\",\n\t88:  \"RFS specific error\",\n\t89:  \"remote address changed\",\n\t90:  \"function not implemented\",\n\t91:  \"streams pipe error\",\n\t92:  \"value too large for defined data type\",\n\t93:  \"file descriptor in bad state\",\n\t94:  \"channel number out of range\",\n\t95:  \"level 2 not synchronized\",\n\t96:  \"level 3 halted\",\n\t97:  \"level 3 reset\",\n\t98:  \"link number out of range\",\n\t99:  \"protocol driver not attached\",\n\t100: \"no CSI structure available\",\n\t101: \"level 2 halted\",\n\t102: \"invalid exchange\",\n\t103: \"invalid request descriptor\",\n\t104: \"exchange full\",\n\t105: \"no anode\",\n\t106: \"invalid request code\",\n\t107: \"invalid slot\",\n\t108: \"file locking deadlock error\",\n\t109: \"bad font file format\",\n\t110: \"cannot exec a shared library directly\",\n\t111: \"no data available\",\n\t112: \"accessing a corrupted shared library\",\n\t113: \"package not installed\",\n\t114: \"can not access a needed shared library\",\n\t115: \"name not unique on network\",\n\t116: \"interrupted system call should be restarted\",\n\t117: \"structure needs cleaning\",\n\t118: \"not a XENIX named type file\",\n\t119: \"no XENIX semaphores available\",\n\t120: \"is a named type file\",\n\t121: \"remote I/O error\",\n\t122: \"invalid or incomplete multibyte or wide character\",\n\t123: \"attempting to link in too many shared libraries\",\n\t124: \".lib section in a.out corrupted\",\n\t125: \"no medium found\",\n\t126: \"wrong medium type\",\n\t127: \"operation canceled\",\n\t128: \"required key not available\",\n\t129: \"key has expired\",\n\t130: \"key has been revoked\",\n\t131: \"key was rejected by service\",\n\t132: \"owner died\",\n\t133: \"state not recoverable\",\n\t134: \"operation not possible due to RF-kill\",\n\t135: \"memory page has hardware error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"CPU time limit exceeded\",\n\t25: \"file size limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window changed\",\n\t29: \"resource lost\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go",
    "content": "// mkerrors.sh -m32\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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\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\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_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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large or too small\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol option not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"connection timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"illegal byte sequence\",\n\t86: \"not supported\",\n\t87: \"operation Canceled\",\n\t88: \"bad or Corrupt message\",\n\t89: \"no message available\",\n\t90: \"no STREAM resources\",\n\t91: \"not a STREAM\",\n\t92: \"STREAM ioctl timeout\",\n\t93: \"attribute not found\",\n\t94: \"multihop attempted\",\n\t95: \"link has been severed\",\n\t96: \"protocol error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"power fail/restart\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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\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\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_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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large or too small\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol option not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"connection timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"illegal byte sequence\",\n\t86: \"not supported\",\n\t87: \"operation Canceled\",\n\t88: \"bad or Corrupt message\",\n\t89: \"no message available\",\n\t90: \"no STREAM resources\",\n\t91: \"not a STREAM\",\n\t92: \"STREAM ioctl timeout\",\n\t93: \"attribute not found\",\n\t94: \"multihop attempted\",\n\t95: \"link has been severed\",\n\t96: \"protocol error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"power fail/restart\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go",
    "content": "// mkerrors.sh -marm\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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\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\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\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_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_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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large or too small\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol option not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"connection timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"identifier removed\",\n\t83: \"no message of desired type\",\n\t84: \"value too large to be stored in data type\",\n\t85: \"illegal byte sequence\",\n\t86: \"not supported\",\n\t87: \"operation Canceled\",\n\t88: \"bad or Corrupt message\",\n\t89: \"no message available\",\n\t90: \"no STREAM resources\",\n\t91: \"not a STREAM\",\n\t92: \"STREAM ioctl timeout\",\n\t93: \"attribute not found\",\n\t94: \"multihop attempted\",\n\t95: \"link has been severed\",\n\t96: \"protocol error\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"power fail/restart\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go",
    "content": "// mkerrors.sh -m32\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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_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\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\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\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\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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"connection timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"IPsec processing failure\",\n\t83: \"attribute not found\",\n\t84: \"illegal byte sequence\",\n\t85: \"no medium found\",\n\t86: \"wrong medium type\",\n\t87: \"value too large to be stored in data type\",\n\t88: \"operation canceled\",\n\t89: \"identifier removed\",\n\t90: \"no message of desired type\",\n\t91: \"not supported\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"thread AST\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\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\tCREAD                             = 0x800\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_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\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\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\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\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                      = 0x80286987\n\tSIOCALIFADDR                      = 0x8218691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8058693c\n\tSIOCBRDGADDS                      = 0x80586941\n\tSIOCBRDGARL                       = 0x806e694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8058693d\n\tSIOCBRDGDELS                      = 0x80586942\n\tSIOCBRDGFLUSH                     = 0x80586948\n\tSIOCBRDGFRL                       = 0x806e694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc058693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGSIFS                     = 0xc058693c\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0586942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80586955\n\tSIOCBRDGSIFFLGS                   = 0x8058693f\n\tSIOCBRDGSIFPRIO                   = 0x80586954\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8218691e\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFASYNCMAP                   = 0xc020697c\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\tSIOCGIFMEDIA                      = 0xc0306936\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                    = 0xc0106978\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                      = 0x8028698c\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\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                       = 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\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 errors = [...]string{\n\t1:  \"operation not permitted\",\n\t2:  \"no such file or directory\",\n\t3:  \"no such process\",\n\t4:  \"interrupted system call\",\n\t5:  \"input/output error\",\n\t6:  \"device not configured\",\n\t7:  \"argument list too long\",\n\t8:  \"exec format error\",\n\t9:  \"bad file descriptor\",\n\t10: \"no child processes\",\n\t11: \"resource deadlock avoided\",\n\t12: \"cannot allocate memory\",\n\t13: \"permission denied\",\n\t14: \"bad address\",\n\t15: \"block device required\",\n\t16: \"device busy\",\n\t17: \"file exists\",\n\t18: \"cross-device link\",\n\t19: \"operation not supported by device\",\n\t20: \"not a directory\",\n\t21: \"is a directory\",\n\t22: \"invalid argument\",\n\t23: \"too many open files in system\",\n\t24: \"too many open files\",\n\t25: \"inappropriate ioctl for device\",\n\t26: \"text file busy\",\n\t27: \"file too large\",\n\t28: \"no space left on device\",\n\t29: \"illegal seek\",\n\t30: \"read-only file system\",\n\t31: \"too many links\",\n\t32: \"broken pipe\",\n\t33: \"numerical argument out of domain\",\n\t34: \"result too large\",\n\t35: \"resource temporarily unavailable\",\n\t36: \"operation now in progress\",\n\t37: \"operation already in progress\",\n\t38: \"socket operation on non-socket\",\n\t39: \"destination address required\",\n\t40: \"message too long\",\n\t41: \"protocol wrong type for socket\",\n\t42: \"protocol not available\",\n\t43: \"protocol not supported\",\n\t44: \"socket type not supported\",\n\t45: \"operation not supported\",\n\t46: \"protocol family not supported\",\n\t47: \"address family not supported by protocol family\",\n\t48: \"address already in use\",\n\t49: \"can't assign requested address\",\n\t50: \"network is down\",\n\t51: \"network is unreachable\",\n\t52: \"network dropped connection on reset\",\n\t53: \"software caused connection abort\",\n\t54: \"connection reset by peer\",\n\t55: \"no buffer space available\",\n\t56: \"socket is already connected\",\n\t57: \"socket is not connected\",\n\t58: \"can't send after socket shutdown\",\n\t59: \"too many references: can't splice\",\n\t60: \"connection timed out\",\n\t61: \"connection refused\",\n\t62: \"too many levels of symbolic links\",\n\t63: \"file name too long\",\n\t64: \"host is down\",\n\t65: \"no route to host\",\n\t66: \"directory not empty\",\n\t67: \"too many processes\",\n\t68: \"too many users\",\n\t69: \"disc quota exceeded\",\n\t70: \"stale NFS file handle\",\n\t71: \"too many levels of remote in path\",\n\t72: \"RPC struct is bad\",\n\t73: \"RPC version wrong\",\n\t74: \"RPC prog. not avail\",\n\t75: \"program version wrong\",\n\t76: \"bad procedure for program\",\n\t77: \"no locks available\",\n\t78: \"function not implemented\",\n\t79: \"inappropriate file type or format\",\n\t80: \"authentication error\",\n\t81: \"need authenticator\",\n\t82: \"IPsec processing failure\",\n\t83: \"attribute not found\",\n\t84: \"illegal byte sequence\",\n\t85: \"no medium found\",\n\t86: \"wrong medium type\",\n\t87: \"value too large to be stored in data type\",\n\t88: \"operation canceled\",\n\t89: \"identifier removed\",\n\t90: \"no message of desired type\",\n\t91: \"not supported\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/BPT trap\",\n\t6:  \"abort trap\",\n\t7:  \"EMT trap\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"bus error\",\n\t11: \"segmentation fault\",\n\t12: \"bad system call\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n\t16: \"urgent I/O condition\",\n\t17: \"stopped (signal)\",\n\t18: \"stopped\",\n\t19: \"continued\",\n\t20: \"child exited\",\n\t21: \"stopped (tty input)\",\n\t22: \"stopped (tty output)\",\n\t23: \"I/O possible\",\n\t24: \"cputime limit exceeded\",\n\t25: \"filesize limit exceeded\",\n\t26: \"virtual timer expired\",\n\t27: \"profiling timer expired\",\n\t28: \"window size changes\",\n\t29: \"information request\",\n\t30: \"user defined signal 1\",\n\t31: \"user defined signal 2\",\n\t32: \"thread AST\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go",
    "content": "// mkerrors.sh -m64\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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\tCFLUSH                        = 0xf\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\tCREAD                         = 0x80\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\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_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_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\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\tIXANY                         = 0x800\n\tIXOFF                         = 0x1000\n\tIXON                          = 0x400\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_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_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\tNOFLSH                        = 0x80\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\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\tTCFLSH                        = 0x5407\n\tTCGETA                        = 0x5401\n\tTCGETS                        = 0x540d\n\tTCIFLUSH                      = 0x0\n\tTCIOFLUSH                     = 0x2\n\tTCOFLUSH                      = 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\tVCEOF                         = 0x8\n\tVCEOL                         = 0x9\n\tVDISCARD                      = 0xd\n\tVDSUSP                        = 0xb\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\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)\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 errors = [...]string{\n\t1:   \"not owner\",\n\t2:   \"no such file or directory\",\n\t3:   \"no such process\",\n\t4:   \"interrupted system call\",\n\t5:   \"I/O error\",\n\t6:   \"no such device or address\",\n\t7:   \"arg list too long\",\n\t8:   \"exec format error\",\n\t9:   \"bad file number\",\n\t10:  \"no child processes\",\n\t11:  \"resource temporarily unavailable\",\n\t12:  \"not enough space\",\n\t13:  \"permission denied\",\n\t14:  \"bad address\",\n\t15:  \"block device required\",\n\t16:  \"device busy\",\n\t17:  \"file exists\",\n\t18:  \"cross-device link\",\n\t19:  \"no such device\",\n\t20:  \"not a directory\",\n\t21:  \"is a directory\",\n\t22:  \"invalid argument\",\n\t23:  \"file table overflow\",\n\t24:  \"too many open files\",\n\t25:  \"inappropriate ioctl for device\",\n\t26:  \"text file busy\",\n\t27:  \"file too large\",\n\t28:  \"no space left on device\",\n\t29:  \"illegal seek\",\n\t30:  \"read-only file system\",\n\t31:  \"too many links\",\n\t32:  \"broken pipe\",\n\t33:  \"argument out of domain\",\n\t34:  \"result too large\",\n\t35:  \"no message of desired type\",\n\t36:  \"identifier removed\",\n\t37:  \"channel number out of range\",\n\t38:  \"level 2 not synchronized\",\n\t39:  \"level 3 halted\",\n\t40:  \"level 3 reset\",\n\t41:  \"link number out of range\",\n\t42:  \"protocol driver not attached\",\n\t43:  \"no CSI structure available\",\n\t44:  \"level 2 halted\",\n\t45:  \"deadlock situation detected/avoided\",\n\t46:  \"no record locks available\",\n\t47:  \"operation canceled\",\n\t48:  \"operation not supported\",\n\t49:  \"disc quota exceeded\",\n\t50:  \"bad exchange descriptor\",\n\t51:  \"bad request descriptor\",\n\t52:  \"message tables full\",\n\t53:  \"anode table overflow\",\n\t54:  \"bad request code\",\n\t55:  \"invalid slot\",\n\t56:  \"file locking deadlock\",\n\t57:  \"bad font file format\",\n\t58:  \"owner of the lock died\",\n\t59:  \"lock is not recoverable\",\n\t60:  \"not a stream device\",\n\t61:  \"no data available\",\n\t62:  \"timer expired\",\n\t63:  \"out of stream resources\",\n\t64:  \"machine is not on the network\",\n\t65:  \"package not installed\",\n\t66:  \"object is remote\",\n\t67:  \"link has been severed\",\n\t68:  \"advertise error\",\n\t69:  \"srmount error\",\n\t70:  \"communication error on send\",\n\t71:  \"protocol error\",\n\t72:  \"locked lock was unmapped \",\n\t73:  \"facility is not active\",\n\t74:  \"multihop attempted\",\n\t77:  \"not a data message\",\n\t78:  \"file name too long\",\n\t79:  \"value too large for defined data type\",\n\t80:  \"name not unique on network\",\n\t81:  \"file descriptor in bad state\",\n\t82:  \"remote address changed\",\n\t83:  \"can not access a needed shared library\",\n\t84:  \"accessing a corrupted shared library\",\n\t85:  \".lib section in a.out corrupted\",\n\t86:  \"attempting to link in more shared libraries than system limit\",\n\t87:  \"can not exec a shared library directly\",\n\t88:  \"illegal byte sequence\",\n\t89:  \"operation not applicable\",\n\t90:  \"number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS\",\n\t91:  \"error 91\",\n\t92:  \"error 92\",\n\t93:  \"directory not empty\",\n\t94:  \"too many users\",\n\t95:  \"socket operation on non-socket\",\n\t96:  \"destination address required\",\n\t97:  \"message too long\",\n\t98:  \"protocol wrong type for socket\",\n\t99:  \"option not supported by protocol\",\n\t120: \"protocol not supported\",\n\t121: \"socket type not supported\",\n\t122: \"operation not supported on transport endpoint\",\n\t123: \"protocol family not supported\",\n\t124: \"address family not supported by protocol family\",\n\t125: \"address already in use\",\n\t126: \"cannot assign requested address\",\n\t127: \"network is down\",\n\t128: \"network is unreachable\",\n\t129: \"network dropped connection because of reset\",\n\t130: \"software caused connection abort\",\n\t131: \"connection reset by peer\",\n\t132: \"no buffer space available\",\n\t133: \"transport endpoint is already connected\",\n\t134: \"transport endpoint is not connected\",\n\t143: \"cannot send after socket shutdown\",\n\t144: \"too many references: cannot splice\",\n\t145: \"connection timed out\",\n\t146: \"connection refused\",\n\t147: \"host is down\",\n\t148: \"no route to host\",\n\t149: \"operation already in progress\",\n\t150: \"operation now in progress\",\n\t151: \"stale NFS file handle\",\n}\n\n// Signal table\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal Instruction\",\n\t5:  \"trace/Breakpoint Trap\",\n\t6:  \"abort\",\n\t7:  \"emulation Trap\",\n\t8:  \"arithmetic Exception\",\n\t9:  \"killed\",\n\t10: \"bus Error\",\n\t11: \"segmentation Fault\",\n\t12: \"bad System Call\",\n\t13: \"broken Pipe\",\n\t14: \"alarm Clock\",\n\t15: \"terminated\",\n\t16: \"user Signal 1\",\n\t17: \"user Signal 2\",\n\t18: \"child Status Changed\",\n\t19: \"power-Fail/Restart\",\n\t20: \"window Size Change\",\n\t21: \"urgent Socket Condition\",\n\t22: \"pollable Event\",\n\t23: \"stopped (signal)\",\n\t24: \"stopped (user)\",\n\t25: \"continued\",\n\t26: \"stopped (tty input)\",\n\t27: \"stopped (tty output)\",\n\t28: \"virtual Timer Expired\",\n\t29: \"profiling Timer Expired\",\n\t30: \"cpu Limit Exceeded\",\n\t31: \"file Size Limit Exceeded\",\n\t32: \"no runnable lwp\",\n\t33: \"inter-lwp signal\",\n\t34: \"checkpoint Freeze\",\n\t35: \"checkpoint Thaw\",\n\t36: \"thread Cancellation\",\n\t37: \"resource Lost\",\n\t38: \"resource Control Exceeded\",\n\t39: \"reserved for JVM 1\",\n\t40: \"reserved for JVM 2\",\n\t41: \"information Request\",\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go",
    "content": "// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build darwin,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 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 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 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 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 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 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 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_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 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 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_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 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 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_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 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 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 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 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 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 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 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 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 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\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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go",
    "content": "// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build darwin,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 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 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 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 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 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 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 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_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 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 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_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 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 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_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 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 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 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 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 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 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 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 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 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\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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go",
    "content": "// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build darwin,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 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 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 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 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 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 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 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_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 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 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_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 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 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_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 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 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 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 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 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 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 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 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 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\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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go",
    "content": "// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n// +build darwin,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 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 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 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 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 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 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 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_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 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 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_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 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 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_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 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 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 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 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 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 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 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 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 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\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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go",
    "content": "// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go",
    "content": "// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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), 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 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 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 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 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 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 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 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 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 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_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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go",
    "content": "// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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), 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 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 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 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 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 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 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 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 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 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_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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go",
    "content": "// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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_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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go",
    "content": "// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := RawSyscall(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, _, _ := RawSyscall(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, _, _ := RawSyscall(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, _, _ := RawSyscall(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 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 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go",
    "content": "// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go",
    "content": "// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := RawSyscall(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, _, _ := RawSyscall(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, _, _ := RawSyscall(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 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 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 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 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)), 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go",
    "content": "// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (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)), 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go",
    "content": "// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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 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 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 int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\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 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 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 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 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 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go",
    "content": "// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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_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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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_PSELECT6, 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go",
    "content": "// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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_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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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_PSELECT6, 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go",
    "content": "// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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 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 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 int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\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 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 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 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 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 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go",
    "content": "// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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_RANGE2, 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go",
    "content": "// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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_RANGE2, 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go",
    "content": "// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go",
    "content": "// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), 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 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 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 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 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 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(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 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 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 Exit(code int) {\n\tSyscall(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 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 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 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 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 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 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, _, _ := 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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 Sync() {\n\tSyscall(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 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, _, _ := RawSyscall(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 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 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 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 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 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 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 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 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, _, _ := 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() (euid int) {\n\tr0, _, _ := RawSyscall(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, _, _ := 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 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, _, _ := 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 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 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 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 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go",
    "content": "// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go",
    "content": "// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go",
    "content": "// mksyscall.pl -l32 -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go",
    "content": "// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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_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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go",
    "content": "// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go",
    "content": "// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go\n// MACHINE GENERATED BY THE COMMAND ABOVE; 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_recvmsg recvmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc_acct acct \"libc.so\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"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_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_fpathconf fpathconf \"libc.so\"\n//go:cgo_import_dynamic libc_fstat fstat \"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_listen listen \"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_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_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_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_bind bind \"libsocket.so\"\n//go:cgo_import_dynamic libc_connect 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_sendto sendto \"libsocket.so\"\n//go:cgo_import_dynamic libc_socket socket \"libsocket.so\"\n//go:cgo_import_dynamic libc_socketpair socketpair \"libsocket.so\"\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n//go:cgo_import_dynamic libc_getsockopt 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//go:cgo_import_dynamic libc_sysconf sysconf \"libc.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 procrecvmsg libc_recvmsg\n//go:linkname procsendmsg libc_sendmsg\n//go:linkname procacct libc_acct\n//go:linkname procioctl libc_ioctl\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 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 procFpathconf libc_fpathconf\n//go:linkname procFstat libc_fstat\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 proclisten libc_listen\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 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 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 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 procbind libc_bind\n//go:linkname procconnect libc_connect\n//go:linkname procmmap libc_mmap\n//go:linkname procmunmap libc_munmap\n//go:linkname procsendto libc_sendto\n//go:linkname procsocket libc_socket\n//go:linkname procsocketpair libc_socketpair\n//go:linkname procwrite libc_write\n//go:linkname procgetsockopt libc_getsockopt\n//go:linkname procgetpeername libc_getpeername\n//go:linkname procsetsockopt libc_setsockopt\n//go:linkname procrecvfrom libc_recvfrom\n//go:linkname procsysconf libc_sysconf\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\tprocrecvmsg,\n\tprocsendmsg,\n\tprocacct,\n\tprocioctl,\n\tprocAccess,\n\tprocAdjtime,\n\tprocChdir,\n\tprocChmod,\n\tprocChown,\n\tprocChroot,\n\tprocClose,\n\tprocCreat,\n\tprocDup,\n\tprocDup2,\n\tprocExit,\n\tprocFchdir,\n\tprocFchmod,\n\tprocFchmodat,\n\tprocFchown,\n\tprocFchownat,\n\tprocFdatasync,\n\tprocFpathconf,\n\tprocFstat,\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\tproclisten,\n\tprocLstat,\n\tprocMadvise,\n\tprocMkdir,\n\tprocMkdirat,\n\tprocMkfifo,\n\tprocMkfifoat,\n\tprocMknod,\n\tprocMknodat,\n\tprocMlock,\n\tprocMlockall,\n\tprocMprotect,\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\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\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\tprocbind,\n\tprocconnect,\n\tprocmmap,\n\tprocmunmap,\n\tprocsendto,\n\tprocsocket,\n\tprocsocketpair,\n\tprocwrite,\n\tprocgetsockopt,\n\tprocgetpeername,\n\tprocsetsockopt,\n\tprocrecvfrom,\n\tprocsysconf syscallFunc\n)\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\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\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\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\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\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\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\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\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\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\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\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\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 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\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendmsg)), 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\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\nfunc ioctl(fd int, req int, 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\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\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\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\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\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\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\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\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\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\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\nfunc Exit(code int) {\n\tsysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procbind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procconnect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\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\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\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(&procsendto)), 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\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsocket)), 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\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsocketpair)), 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\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\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockopt)), 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\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\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\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\nfunc sysconf(name int) (n int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go",
    "content": "// mksysctl_openbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT\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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go",
    "content": "// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_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_CHUD                           = 185\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_STACK_SNAPSHOT                 = 365\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___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___MAC_GET_LCID                 = 391\n\tSYS___MAC_GET_LCTX                 = 392\n\tSYS___MAC_SET_LCTX                 = 393\n\tSYS_SETLCID                        = 394\n\tSYS_GETLCID                        = 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_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_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_RENAME_EXT                     = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_MAXSYSCALL                     = 490\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go",
    "content": "// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_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_CHUD                           = 185\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_STACK_SNAPSHOT                 = 365\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___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___MAC_GET_LCID                 = 391\n\tSYS___MAC_GET_LCTX                 = 392\n\tSYS___MAC_SET_LCTX                 = 393\n\tSYS_SETLCID                        = 394\n\tSYS_GETLCID                        = 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_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_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_RENAME_EXT                     = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_MAXSYSCALL                     = 490\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go",
    "content": "// mksysnum_darwin.pl /usr/include/sys/syscall.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_CHUD                           = 185\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_ATSOCKET                       = 206\n\tSYS_ATGETMSG                       = 207\n\tSYS_ATPUTMSG                       = 208\n\tSYS_ATPSNDREQ                      = 209\n\tSYS_ATPSNDRSP                      = 210\n\tSYS_ATPGETREQ                      = 211\n\tSYS_ATPGETRSP                      = 212\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_SEM_GETVALUE                   = 274\n\tSYS_SEM_INIT                       = 275\n\tSYS_SEM_DESTROY                    = 276\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_STACK_SNAPSHOT                 = 365\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___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___MAC_GET_LCID                 = 391\n\tSYS___MAC_GET_LCTX                 = 392\n\tSYS___MAC_SET_LCTX                 = 393\n\tSYS_SETLCID                        = 394\n\tSYS_GETLCID                        = 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_MAXSYSCALL                     = 440\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go",
    "content": "// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr/include/sys/syscall.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_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_CHUD                           = 185\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_STACK_SNAPSHOT                 = 365\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___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___MAC_GET_LCID                 = 391\n\tSYS___MAC_GET_LCTX                 = 392\n\tSYS___MAC_SET_LCTX                 = 393\n\tSYS_SETLCID                        = 394\n\tSYS_GETLCID                        = 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_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_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_RENAME_EXT                     = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_MAXSYSCALL                     = 490\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go",
    "content": "// mksysnum_dragonfly.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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, \\\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, \\\n\tSYS_GETPID        = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT         = 21  // { int mount(char *type, char *path, int flags, \\\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, \\\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, \\\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(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, \\\n\tSYS_KTRACE        = 45  // { int ktrace(const char *fname, int ops, int facs, \\\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, \\\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, \\\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, \\\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, \\\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, struct rusage *rusage); }\n\tSYS_GETSOCKOPT    = 118 // { int getsockopt(int s, int level, int name, \\\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, \\\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, int protocol, \\\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, \\\n\tSYS_SETSID        = 147 // { int setsid(void); }\n\tSYS_QUOTACTL      = 148 // { int quotactl(char *path, int cmd, int uid, \\\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, \\\n\tSYS_EXTPREAD      = 173 // { ssize_t extpread(int fd, void *buf, \\\n\tSYS_EXTPWRITE     = 174 // { ssize_t extpwrite(int fd, const void *buf, \\\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, \\\n\tSYS_SETRLIMIT     = 195 // { int setrlimit(u_int which, \\\n\tSYS_MMAP          = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \\\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, \\\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, \\\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___SEMCTL               = 220 // { int __semctl(int semid, int semnum, int cmd, \\\n\tSYS_SEMGET                 = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                  = 222 // { int semop(int semid, struct sembuf *sops, \\\n\tSYS_MSGCTL                 = 224 // { int msgctl(int msqid, int cmd, \\\n\tSYS_MSGGET                 = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                 = 226 // { int msgsnd(int msqid, void *msgp, size_t msgsz, \\\n\tSYS_MSGRCV                 = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \\\n\tSYS_SHMAT                  = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \\\n\tSYS_SHMCTL                 = 229 // { int shmctl(int shmid, int cmd, \\\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, \\\n\tSYS_CLOCK_SETTIME          = 233 // { int clock_settime(clockid_t clock_id, \\\n\tSYS_CLOCK_GETRES           = 234 // { int clock_getres(clockid_t clock_id, \\\n\tSYS_NANOSLEEP              = 240 // { int nanosleep(const struct timespec *rqtp, \\\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, \\\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, \\\n\tSYS_EXTPWRITEV             = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\\\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, \\\n\tSYS_SIGSUSPEND             = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGACTION              = 342 // { int sigaction(int sig, const struct sigaction *act, \\\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,\\\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, acl_type_t type, \\\n\tSYS___ACL_SET_FD           = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \\\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, acl_type_t type); }\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, acl_type_t type, \\\n\tSYS_EXTATTRCTL             = 355 // { int extattrctl(const char *path, int cmd, \\\n\tSYS_EXTATTR_SET_FILE       = 356 // { int extattr_set_file(const char *path, \\\n\tSYS_EXTATTR_GET_FILE       = 357 // { int extattr_get_file(const char *path, \\\n\tSYS_EXTATTR_DELETE_FILE    = 358 // { int extattr_delete_file(const char *path, \\\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, \\\n\tSYS_SCTP_PEELOFF           = 364 // { int sctp_peeloff(int sd, caddr_t name ); }\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, \\\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, \\\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, \\\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\t\\\n\tSYS_VMSPACE_MMAP           = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \\\n\tSYS_VMSPACE_MUNMAP         = 490 // { int vmspace_munmap(void *id, void *addr,\t\\\n\tSYS_VMSPACE_MCONTROL       = 491 // { int vmspace_mcontrol(void *id, void *addr, \t\\\n\tSYS_VMSPACE_PREAD          = 492 // { ssize_t vmspace_pread(void *id, void *buf, \\\n\tSYS_VMSPACE_PWRITE         = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \\\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, \\\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,          \\\n\tSYS_OPENAT                 = 504 // { int openat(int fd, char *path, int flags, int mode); }\n\tSYS_FSTATAT                = 505 // { int fstatat(int fd, char *path, \t\\\n\tSYS_FCHMODAT               = 506 // { int fchmodat(int fd, char *path, int mode, \\\n\tSYS_FCHOWNAT               = 507 // { int fchownat(int fd, char *path, int uid, int gid, \\\n\tSYS_UNLINKAT               = 508 // { int unlinkat(int fd, char *path, int flags); }\n\tSYS_FACCESSAT              = 509 // { int faccessat(int fd, char *path, int amode, \\\n\tSYS_MQ_OPEN                = 510 // { mqd_t mq_open(const char * name, int oflag, \\\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, \\\n\tSYS_MQ_SETATTR             = 514 // { int mq_setattr(mqd_t mqdes, \\\n\tSYS_MQ_NOTIFY              = 515 // { int mq_notify(mqd_t mqdes, \\\n\tSYS_MQ_SEND                = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \\\n\tSYS_MQ_RECEIVE             = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \\\n\tSYS_MQ_TIMEDSEND           = 518 // { int mq_timedsend(mqd_t mqdes, \\\n\tSYS_MQ_TIMEDRECEIVE        = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \\\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, \\\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, \\\n\tSYS_READLINKAT             = 527 // { int readlinkat(int fd, char *path, char *buf, \\\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, \\\n\tSYS_LINKAT                 = 531 // { int linkat(int fd1, char *path1, int fd2, \\\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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go",
    "content": "// mksysnum_freebsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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 \\\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_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, \\\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_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_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \\\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, \\\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_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \\\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, \\\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, \\\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, \\\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_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_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_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_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_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___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__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, \\\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( \\\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( \\\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_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_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_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_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS_CAP_NEW                  = 514 // { int cap_new(int fd, uint64_t rights); }\n\tSYS_CAP_GETRIGHTS            = 515 // { int cap_getrights(int fd, \\\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_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_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, \\\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \\\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go",
    "content": "// mksysnum_freebsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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 \\\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_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, \\\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_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_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \\\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, \\\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_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \\\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, \\\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, \\\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, \\\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_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_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_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_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_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___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__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, \\\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( \\\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( \\\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_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_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_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_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS_CAP_NEW                  = 514 // { int cap_new(int fd, uint64_t rights); }\n\tSYS_CAP_GETRIGHTS            = 515 // { int cap_getrights(int fd, \\\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_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_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, \\\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \\\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go",
    "content": "// mksysnum_freebsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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 \\\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_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, \\\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_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_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \\\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, \\\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_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \\\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, \\\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, \\\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, \\\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_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_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_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_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_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___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__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, \\\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( \\\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( \\\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_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_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_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_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS_CAP_NEW                  = 514 // { int cap_new(int fd, uint64_t rights); }\n\tSYS_CAP_GETRIGHTS            = 515 // { int cap_getrights(int fd, \\\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_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_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, \\\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \\\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__i386__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m32 -D__ARM_EABI__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEB__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEB__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D_MIPS_SIM=_MIPS_SIM_ABI64 -D__MIPSEL__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m32 -D_MIPS_SIM=_MIPS_SIM_ABI32 -D__MIPSEL__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__powerpc64__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__s390x__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_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_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_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_SELECT                 = 142\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_NEWFSTATAT             = 293\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go",
    "content": "// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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_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)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go",
    "content": "// mksysnum_netbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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___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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go",
    "content": "// mksysnum_netbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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___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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go",
    "content": "// mksysnum_netbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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___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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go",
    "content": "// mksysnum_openbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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, \\\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, \\\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, \\\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, \\\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, \\\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, \\\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, \\\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, \\\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, \\\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \\\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, \\\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \\\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, \\\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, \\\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, \\\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int flags); }\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_KILL           = 37  // { int sys_kill(int pid, int signum); }\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, \\\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, \\\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, \\\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, \\\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_GETLOGIN       = 49  // { int sys_getlogin(char *namebuf, u_int namelen); }\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, \\\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, \\\n\tSYS_READLINK       = 58  // { int sys_readlink(const char *path, char *buf, \\\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, \\\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, \\\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, \\\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, \\\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, \\\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, \\\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, \\\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, \\\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, \\\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, \\\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, \\\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, \\\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, \\\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, \\\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, \\\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, \\\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, \\\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, int pgid); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, \\\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, \\\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, \\\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, \\\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, \\\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, \\\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, \\\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, \\\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_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, \\\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, \\\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, \\\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \\\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, \\\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, \\\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, \\\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, \\\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, \\\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, \\\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, \\\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, \\\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \\\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, \\\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, \\\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \\\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \\\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, \\\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, \\\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, \\\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, \\\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \\\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \\\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, \\\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, \\\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, \\\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, \\\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, \\\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \\\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \\\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \\\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \\\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \\\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, \\\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, \\\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, \\\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, \\\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, \\\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, \\\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \\\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, \\\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, \\\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, \\\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, \\\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \\\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, \\\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, \\\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, \\\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, \\\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \\\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, \\\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, \\\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, \\\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go",
    "content": "// mksysnum_openbsd.pl\n// MACHINE GENERATED BY THE ABOVE COMMAND; 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, \\\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, \\\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, \\\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, \\\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, \\\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, \\\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, \\\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, \\\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, \\\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \\\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, \\\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \\\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, \\\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, \\\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, \\\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int flags); }\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_KILL           = 37  // { int sys_kill(int pid, int signum); }\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, \\\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, \\\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, \\\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, \\\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_GETLOGIN       = 49  // { int sys_getlogin(char *namebuf, u_int namelen); }\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, \\\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, \\\n\tSYS_READLINK       = 58  // { int sys_readlink(const char *path, char *buf, \\\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, \\\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, \\\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, \\\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, \\\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, \\\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, \\\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, \\\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, \\\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, \\\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, \\\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, \\\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, \\\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, \\\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, \\\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, \\\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, \\\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, \\\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, int pgid); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, \\\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, \\\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, \\\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, \\\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, \\\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, \\\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, \\\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, \\\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_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, \\\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, \\\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, \\\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \\\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, \\\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, \\\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, \\\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, \\\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, \\\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, \\\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, \\\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, \\\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \\\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, \\\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, \\\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \\\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \\\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, \\\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, \\\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, \\\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, \\\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \\\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \\\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, \\\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, \\\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, \\\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, \\\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, \\\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \\\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \\\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \\\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \\\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \\\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, \\\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, \\\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, \\\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, \\\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, \\\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, \\\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \\\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, \\\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, \\\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, \\\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, \\\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \\\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, \\\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, \\\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, \\\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, \\\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \\\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, \\\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, \\\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, \\\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.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 amd64,solaris\n\npackage unix\n\n// TODO(aram): remove these before Go 1.3.\nconst (\n\tSYS_EXECVE = 59\n\tSYS_FCNTL  = 62\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go",
    "content": "// +build 386,darwin\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\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\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec 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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [2]byte\n\tRefcount  int32\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     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\tPad_cgo_0 [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go",
    "content": "// +build amd64,darwin\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\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 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\tPad_cgo_0     [4]byte\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec 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\tPad_cgo_0 [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\tPad_cgo_0 [8]byte\n\tPad_cgo_1 [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\tPad_cgo_0 [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\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 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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [2]byte\n\tRefcount  int32\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     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\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    Timeval32\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype Termios struct {\n\tIflag     uint64\n\tOflag     uint64\n\tCflag     uint64\n\tLflag     uint64\n\tCc        [20]uint8\n\tPad_cgo_0 [4]byte\n\tIspeed    uint64\n\tOspeed    uint64\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_SYMLINK_NOFOLLOW = 0x20\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec 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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [2]byte\n\tRefcount  int32\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     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\tPad_cgo_0 [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go",
    "content": "// +build arm64,darwin\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\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 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\tPad_cgo_0     [4]byte\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec 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\tPad_cgo_0 [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\tPad_cgo_0 [8]byte\n\tPad_cgo_1 [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\tPad_cgo_0 [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\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 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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [2]byte\n\tRefcount  int32\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     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\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    Timeval32\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype Termios struct {\n\tIflag     uint64\n\tOflag     uint64\n\tCflag     uint64\n\tLflag     uint64\n\tCc        [20]uint8\n\tPad_cgo_0 [4]byte\n\tIspeed    uint64\n\tOspeed    uint64\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_dragonfly.go\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\nconst (\n\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\n\ntype Stat_t struct {\n\tIno      uint64\n\tNlink    uint32\n\tDev      uint32\n\tMode     uint16\n\tPadding1 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\tPad_cgo_0   [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\tPad_cgo_1   [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\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\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 = 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\tPad_cgo_0 [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\tPad_cgo_0  [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\tUnused     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\tPad_cgo_0 [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\tPad_cgo_0 [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\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     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\tPad_cgo_0 [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\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    Timeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go",
    "content": "// +build 386,freebsd\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\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\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\n\ntype Stat_t struct {\n\tDev           uint32\n\tIno           uint32\n\tMode          uint16\n\tNlink         uint16\n\tUid           uint32\n\tGid           uint32\n\tRdev          uint32\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tSize          int64\n\tBlocks        int64\n\tBlksize       uint32\n\tFlags         uint32\n\tGen           uint32\n\tLspare        int32\n\tBirthtimespec Timespec\n\tPad_cgo_0     [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 [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 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\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\tX__fds_bits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0x64\n\tSizeofIfMsghdr         = 0x60\n\tsizeofIfData           = 0x54\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\tPad_cgo_0 [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\tPad_cgo_0 [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\tBaudrate_pf 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    uint64\n\tEpoch       int32\n\tLastchange  Timeval\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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [2]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\tX_bzh_pad  [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go",
    "content": "// +build amd64,freebsd\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\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\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\n\ntype Stat_t struct {\n\tDev           uint32\n\tIno           uint32\n\tMode          uint16\n\tNlink         uint16\n\tUid           uint32\n\tGid           uint32\n\tRdev          uint32\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tSize          int64\n\tBlocks        int64\n\tBlksize       uint32\n\tFlags         uint32\n\tGen           uint32\n\tLspare        int32\n\tBirthtimespec 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 [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\tPad_cgo_0 [4]byte\n}\n\ntype Dirent 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\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\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 = 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\tX__fds_bits [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tBaudrate_pf 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 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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\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    Timeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\tX_bzh_pad  [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -fsigned-char types_freebsd.go\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\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 int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\nconst (\n\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\n\ntype Stat_t struct {\n\tDev           uint32\n\tIno           uint32\n\tMode          uint16\n\tNlink         uint16\n\tUid           uint32\n\tGid           uint32\n\tRdev          uint32\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tSize          int64\n\tBlocks        int64\n\tBlksize       uint32\n\tFlags         uint32\n\tGen           uint32\n\tLspare        int32\n\tBirthtimespec 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 [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\tPad_cgo_0 [4]byte\n}\n\ntype Dirent 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\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\tX__fds_bits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0x70\n\tSizeofIfMsghdr         = 0x70\n\tsizeofIfData           = 0x60\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\tPad_cgo_0 [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\tPad_cgo_0 [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\tBaudrate_pf 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    uint64\n\tEpoch       int64\n\tLastchange  Timeval\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\tPad_cgo_0   [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [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\tPad_cgo_0 [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\tX_bzh_pad  [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_386.go",
    "content": "// +build 386,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [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\tX__pad1   uint16\n\tPad_cgo_0 [2]byte\n\tX__st_ino uint32\n\tMode      uint32\n\tNlink     uint32\n\tUid       uint32\n\tGid       uint32\n\tRdev      uint64\n\tX__pad2   uint16\n\tPad_cgo_1 [2]byte\n\tSize      int64\n\tBlksize   int32\n\tBlocks    int64\n\tAtim      Timespec\n\tMtim      Timespec\n\tCtim      Timespec\n\tIno       uint64\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [1]byte\n}\n\ntype Fsid struct {\n\tX__val [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\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 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\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x1d\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [2]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]int8\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\tX_f       [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\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_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go",
    "content": "// +build amd64,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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\tX__pad0   int32\n\tRdev      uint64\n\tSize      int64\n\tBlksize   int64\n\tBlocks    int64\n\tAtim      Timespec\n\tMtim      Timespec\n\tCtim      Timespec\n\tX__unused [3]int64\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen          uint64\n\tLevel        int32\n\tType         int32\n\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x1d\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]int8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go",
    "content": "// +build arm,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go | go run mkpost.go\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\tPad_cgo_0 [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\tX__pad1   uint16\n\tPad_cgo_0 [2]byte\n\tX__st_ino uint32\n\tMode      uint32\n\tNlink     uint32\n\tUid       uint32\n\tGid       uint32\n\tRdev      uint64\n\tX__pad2   uint16\n\tPad_cgo_1 [6]byte\n\tSize      int64\n\tBlksize   int32\n\tPad_cgo_2 [4]byte\n\tBlocks    int64\n\tAtim      Timespec\n\tMtim      Timespec\n\tCtim      Timespec\n\tIno       uint64\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\tPad_cgo_0 [4]byte\n}\n\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]uint8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 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\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x1d\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [2]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]uint8\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\tX_f       [8]uint8\n}\n\ntype Utsname struct {\n\tSysname    [65]uint8\n\tNodename   [65]uint8\n\tRelease    [65]uint8\n\tVersion    [65]uint8\n\tMachine    [65]uint8\n\tDomainname [65]uint8\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_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go",
    "content": "// +build arm64,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -fsigned-char types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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\tX__pad1           uint64\n\tSize              int64\n\tBlksize           int32\n\tX__pad2           int32\n\tBlocks            int64\n\tAtim              Timespec\n\tMtim              Timespec\n\tCtim              Timespec\n\tX__glibc_reserved [2]int32\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen          uint64\n\tLevel        int32\n\tType         int32\n\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x22\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]int8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go",
    "content": "// +build mips,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go | go run mkpost.go\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\tPad_cgo_0 [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 Statfs_t struct {\n\tType      int32\n\tBsize     int32\n\tFrsize    int32\n\tPad_cgo_0 [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\tPad_cgo_1 [4]byte\n}\n\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x1d\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [2]byte\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        [109]uint32\n\tU_tsize     uint32\n\tU_dsize     uint32\n\tU_ssize     uint32\n\tStart_code  uint32\n\tStart_data  uint32\n\tStart_stack uint32\n\tSignal      int32\n\tU_ar0       *byte\n\tMagic       uint32\n\tU_comm      [32]int8\n}\n\ntype ptracePsw struct {\n}\n\ntype ptraceFpregs struct {\n}\n\ntype ptracePer struct {\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\tX_f       [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\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_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [32]uint32\n}\n\nconst _SC_PAGESIZE = 0x1e\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go",
    "content": "// +build mips64,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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]int32\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 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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x27\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\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        [102]uint64\n\tU_tsize     uint64\n\tU_dsize     uint64\n\tU_ssize     uint64\n\tStart_code  uint64\n\tStart_data  uint64\n\tStart_stack uint64\n\tSignal      int64\n\tU_ar0       uint64\n\tMagic       uint64\n\tU_comm      [32]int8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\n\ntype Termios struct {\n\tIflag     uint32\n\tOflag     uint32\n\tCflag     uint32\n\tLflag     uint32\n\tLine      uint8\n\tCc        [32]uint8\n\tPad_cgo_0 [3]byte\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go",
    "content": "// +build mips64le,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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]int32\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 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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x27\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\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        [102]uint64\n\tU_tsize     uint64\n\tU_dsize     uint64\n\tU_ssize     uint64\n\tStart_code  uint64\n\tStart_data  uint64\n\tStart_stack uint64\n\tSignal      int64\n\tU_ar0       uint64\n\tMagic       uint64\n\tU_comm      [32]int8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\n\ntype Termios struct {\n\tIflag     uint32\n\tOflag     uint32\n\tCflag     uint32\n\tLflag     uint32\n\tLine      uint8\n\tCc        [32]uint8\n\tPad_cgo_0 [3]byte\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go",
    "content": "// +build mipsle,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go | go run mkpost.go\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\tPad_cgo_0 [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 Statfs_t struct {\n\tType      int32\n\tBsize     int32\n\tFrsize    int32\n\tPad_cgo_0 [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\tPad_cgo_1 [4]byte\n}\n\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x2a\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [2]byte\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        [109]uint32\n\tU_tsize     uint32\n\tU_dsize     uint32\n\tU_ssize     uint32\n\tStart_code  uint32\n\tStart_data  uint32\n\tStart_stack uint32\n\tSignal      int32\n\tU_ar0       *byte\n\tMagic       uint32\n\tU_comm      [32]int8\n}\n\ntype ptracePsw struct {\n}\n\ntype ptraceFpregs struct {\n}\n\ntype ptracePer struct {\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\tX_f       [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\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_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [32]uint32\n}\n\nconst _SC_PAGESIZE = 0x1e\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go",
    "content": "// +build ppc64,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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\tX__pad2            int32\n\tRdev               uint64\n\tSize               int64\n\tBlksize            int64\n\tBlocks             int64\n\tAtim               Timespec\n\tMtim               Timespec\n\tCtim               Timespec\n\tX__glibc_reserved4 uint64\n\tX__glibc_reserved5 uint64\n\tX__glibc_reserved6 uint64\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]uint8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen          uint64\n\tLevel        int32\n\tType         int32\n\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x23\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]uint8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]uint8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]uint8\n\tNodename   [65]uint8\n\tRelease    [65]uint8\n\tVersion    [65]uint8\n\tMachine    [65]uint8\n\tDomainname [65]uint8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]uint8\n\tFpack     [6]uint8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents  uint32\n\tX_padFd int32\n\tFd      int32\n\tPad     int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go",
    "content": "// +build ppc64le,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go\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\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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\tX__pad2            int32\n\tRdev               uint64\n\tSize               int64\n\tBlksize            int64\n\tBlocks             int64\n\tAtim               Timespec\n\tMtim               Timespec\n\tCtim               Timespec\n\tX__glibc_reserved4 uint64\n\tX__glibc_reserved5 uint64\n\tX__glibc_reserved6 uint64\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]uint8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [4]byte\n\tStart     int64\n\tLen       int64\n\tPid       int32\n\tPad_cgo_1 [4]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen          uint64\n\tLevel        int32\n\tType         int32\n\tX__cmsg_data [0]uint8\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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x22\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\n\tFilter    *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   [0]uint8\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]uint8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]uint8\n\tNodename   [65]uint8\n\tRelease    [65]uint8\n\tVersion    [65]uint8\n\tMachine    [65]uint8\n\tDomainname [65]uint8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]uint8\n\tFpack     [6]uint8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents  uint32\n\tX_padFd int32\n\tFd      int32\n\tPad     int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go",
    "content": "// +build s390x,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -fsigned-char types_linux.go\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\t_         [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\t_         [4]byte\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\t_         [4]byte\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 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\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\t_ [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\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\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\t_              [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x27\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\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)\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\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\t_      [6]byte\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\t_    [4]byte\n\tFprs [16]float64\n}\n\ntype PtracePer struct {\n\t_             [0]uint64\n\t_             [24]byte\n\t_             [8]byte\n\tStarting_addr uint64\n\tEnding_addr   uint64\n\tPerc_atmid    uint16\n\t_             [6]byte\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\t_         [4]byte\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]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\t_      [4]byte\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_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go",
    "content": "// +build sparc64,linux\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_linux.go | go run mkpost.go\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\tPad_cgo_0 [4]byte\n}\n\ntype Timex struct {\n\tModes     uint32\n\tPad_cgo_0 [4]byte\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tPad_cgo_1 [4]byte\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\tPad_cgo_2 [4]byte\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\tPad_cgo_3 [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\tX__pad1            uint16\n\tPad_cgo_0          [6]byte\n\tIno                uint64\n\tMode               uint32\n\tNlink              uint32\n\tUid                uint32\n\tGid                uint32\n\tRdev               uint64\n\tX__pad2            uint16\n\tPad_cgo_1          [6]byte\n\tSize               int64\n\tBlksize            int64\n\tBlocks             int64\n\tAtim               Timespec\n\tMtim               Timespec\n\tCtim               Timespec\n\tX__glibc_reserved4 uint64\n\tX__glibc_reserved5 uint64\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\ntype Dirent struct {\n\tIno       uint64\n\tOff       int64\n\tReclen    uint16\n\tType      uint8\n\tName      [256]int8\n\tPad_cgo_0 [5]byte\n}\n\ntype Fsid struct {\n\tX__val [2]int32\n}\n\ntype Flock_t struct {\n\tType              int16\n\tWhence            int16\n\tPad_cgo_0         [4]byte\n\tStart             int64\n\tLen               int64\n\tPid               int32\n\tX__glibc_reserved int16\n\tPad_cgo_1         [2]byte\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 RawSockaddrCAN struct {\n\tFamily    uint16\n\tPad_cgo_0 [2]byte\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 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 Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\tPad_cgo_1  [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\tPad_cgo_0      [2]byte\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\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\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)\n\nconst (\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\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_MAX            = 0x2a\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\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)\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\tX__ifi_pad 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\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\tPad_cgo_0 [6]byte\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 ptracePsw struct {\n}\n\ntype ptraceFpregs struct {\n}\n\ntype ptracePer struct {\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\tPad_cgo_0 [4]byte\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\tX_f       [0]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]int8\n\tNodename   [65]int8\n\tRelease    [65]int8\n\tVersion    [65]int8\n\tMachine    [65]int8\n\tDomainname [65]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int32\n\tPad_cgo_0 [4]byte\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_1 [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents  uint32\n\tX_padFd int32\n\tFd      int32\n\tPad     int32\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\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\tX__val [16]uint64\n}\n\nconst _SC_PAGESIZE = 0x1e\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_netbsd.go\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\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec 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\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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_netbsd.go\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\tPad_cgo_0     [4]byte\n\tIno           uint64\n\tNlink         uint32\n\tUid           uint32\n\tGid           uint32\n\tPad_cgo_1     [4]byte\n\tRdev          uint64\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec Timespec\n\tSize          int64\n\tBlocks        int64\n\tBlksize       uint32\n\tFlags         uint32\n\tGen           uint32\n\tSpare         [2]uint32\n\tPad_cgo_2     [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\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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_netbsd.go\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\tPad_cgo_0     [4]byte\n\tIno           uint64\n\tNlink         uint32\n\tUid           uint32\n\tGid           uint32\n\tPad_cgo_1     [4]byte\n\tRdev          uint64\n\tAtimespec     Timespec\n\tMtimespec     Timespec\n\tCtimespec     Timespec\n\tBirthtimespec Timespec\n\tSize          int64\n\tBlocks        int64\n\tBlksize       uint32\n\tFlags         uint32\n\tGen           uint32\n\tSpare         [2]uint32\n\tPad_cgo_2     [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\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 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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_openbsd.go\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\nconst (\n\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\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\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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_openbsd.go\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\nconst (\n\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\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\tPad_cgo_0      [4]byte\n\tX__st_birthtim Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tPad_cgo_0     [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\tPad_cgo_1     [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\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\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     uint32\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 = 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         = 0xf8\n\tSizeofIfData           = 0xe0\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\tPad_cgo_0    [4]byte\n\tLastchange   Timeval\n\tMclpool      [7]Mclpool\n\tPad_cgo_1    [4]byte\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 = 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\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 [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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go",
    "content": "// +build amd64,solaris\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_solaris.go | go run mkpost.go\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\nconst (\n\tS_IFMT   = 0xf000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\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\tPad_cgo_0 [4]byte\n\tBlocks    int64\n\tFstype    [16]int8\n}\n\ntype Flock_t struct {\n\tType      int16\n\tWhence    int16\n\tPad_cgo_0 [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\tPad_cgo_0 [5]byte\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\tPad_cgo_0    [4]byte\n\tIov          *Iovec\n\tIovlen       int32\n\tPad_cgo_1    [4]byte\n\tAccrights    *int8\n\tAccrightslen int32\n\tPad_cgo_2    [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]int8\n\tNodename [257]int8\n\tRelease  [257]int8\n\tVersion  [257]int8\n\tMachine  [257]int8\n}\n\ntype Ustat_t struct {\n\tTfree     int64\n\tTinode    uint64\n\tFname     [6]int8\n\tFpack     [6]int8\n\tPad_cgo_0 [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\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\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\tPad_cgo_0 [2]byte\n\tMetric    int32\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     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\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 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\tPad_cgo_0 [2]byte\n}\n\nconst _SC_PAGESIZE = 0xb\n\ntype Termios struct {\n\tIflag     uint32\n\tOflag     uint32\n\tCflag     uint32\n\tLflag     uint32\n\tCc        [19]uint8\n\tPad_cgo_0 [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\tPad_cgo_0 [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/gen/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/gen/code.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 gen\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\t\"fmt\"\n\t\"hash\"\n\t\"hash/fnv\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// This file contains utilities for generating code.\n\n// TODO: other write methods like:\n// - slices, maps, types, etc.\n\n// CodeWriter is a utility for writing structured code. It computes the content\n// hash and size of written content. It ensures there are newlines between\n// written code blocks.\ntype CodeWriter struct {\n\tbuf  bytes.Buffer\n\tSize int\n\tHash hash.Hash32 // content hash\n\tgob  *gob.Encoder\n\t// For comments we skip the usual one-line separator if they are followed by\n\t// a code block.\n\tskipSep bool\n}\n\nfunc (w *CodeWriter) Write(p []byte) (n int, err error) {\n\treturn w.buf.Write(p)\n}\n\n// NewCodeWriter returns a new CodeWriter.\nfunc NewCodeWriter() *CodeWriter {\n\th := fnv.New32()\n\treturn &CodeWriter{Hash: h, gob: gob.NewEncoder(h)}\n}\n\n// WriteGoFile appends the buffer with the total size of all created structures\n// and writes it as a Go file to the the given file with the given package name.\nfunc (w *CodeWriter) WriteGoFile(filename, pkg string) {\n\tf, err := os.Create(filename)\n\tif err != nil {\n\t\tlog.Fatalf(\"Could not create file %s: %v\", filename, err)\n\t}\n\tdefer f.Close()\n\tif _, err = w.WriteGo(f, pkg); err != nil {\n\t\tlog.Fatalf(\"Error writing file %s: %v\", filename, err)\n\t}\n}\n\n// WriteGo appends the buffer with the total size of all created structures and\n// writes it as a Go file to the the given writer with the given package name.\nfunc (w *CodeWriter) WriteGo(out io.Writer, pkg string) (n int, err error) {\n\tsz := w.Size\n\tw.WriteComment(\"Total table size %d bytes (%dKiB); checksum: %X\\n\", sz, sz/1024, w.Hash.Sum32())\n\tdefer w.buf.Reset()\n\treturn WriteGo(out, pkg, w.buf.Bytes())\n}\n\nfunc (w *CodeWriter) printf(f string, x ...interface{}) {\n\tfmt.Fprintf(w, f, x...)\n}\n\nfunc (w *CodeWriter) insertSep() {\n\tif w.skipSep {\n\t\tw.skipSep = false\n\t\treturn\n\t}\n\t// Use at least two newlines to ensure a blank space between the previous\n\t// block. WriteGoFile will remove extraneous newlines.\n\tw.printf(\"\\n\\n\")\n}\n\n// WriteComment writes a comment block. All line starts are prefixed with \"//\".\n// Initial empty lines are gobbled. The indentation for the first line is\n// stripped from consecutive lines.\nfunc (w *CodeWriter) WriteComment(comment string, args ...interface{}) {\n\ts := fmt.Sprintf(comment, args...)\n\ts = strings.Trim(s, \"\\n\")\n\n\t// Use at least two newlines to ensure a blank space between the previous\n\t// block. WriteGoFile will remove extraneous newlines.\n\tw.printf(\"\\n\\n// \")\n\tw.skipSep = true\n\n\t// strip first indent level.\n\tsep := \"\\n\"\n\tfor ; len(s) > 0 && (s[0] == '\\t' || s[0] == ' '); s = s[1:] {\n\t\tsep += s[:1]\n\t}\n\n\tstrings.NewReplacer(sep, \"\\n// \", \"\\n\", \"\\n// \").WriteString(w, s)\n\n\tw.printf(\"\\n\")\n}\n\nfunc (w *CodeWriter) writeSizeInfo(size int) {\n\tw.printf(\"// Size: %d bytes\\n\", size)\n}\n\n// WriteConst writes a constant of the given name and value.\nfunc (w *CodeWriter) WriteConst(name string, x interface{}) {\n\tw.insertSep()\n\tv := reflect.ValueOf(x)\n\n\tswitch v.Type().Kind() {\n\tcase reflect.String:\n\t\tw.printf(\"const %s %s = \", name, typeName(x))\n\t\tw.WriteString(v.String())\n\t\tw.printf(\"\\n\")\n\tdefault:\n\t\tw.printf(\"const %s = %#v\\n\", name, x)\n\t}\n}\n\n// WriteVar writes a variable of the given name and value.\nfunc (w *CodeWriter) WriteVar(name string, x interface{}) {\n\tw.insertSep()\n\tv := reflect.ValueOf(x)\n\toldSize := w.Size\n\tsz := int(v.Type().Size())\n\tw.Size += sz\n\n\tswitch v.Type().Kind() {\n\tcase reflect.String:\n\t\tw.printf(\"var %s %s = \", name, typeName(x))\n\t\tw.WriteString(v.String())\n\tcase reflect.Struct:\n\t\tw.gob.Encode(x)\n\t\tfallthrough\n\tcase reflect.Slice, reflect.Array:\n\t\tw.printf(\"var %s = \", name)\n\t\tw.writeValue(v)\n\t\tw.writeSizeInfo(w.Size - oldSize)\n\tdefault:\n\t\tw.printf(\"var %s %s = \", name, typeName(x))\n\t\tw.gob.Encode(x)\n\t\tw.writeValue(v)\n\t\tw.writeSizeInfo(w.Size - oldSize)\n\t}\n\tw.printf(\"\\n\")\n}\n\nfunc (w *CodeWriter) writeValue(v reflect.Value) {\n\tx := v.Interface()\n\tswitch v.Kind() {\n\tcase reflect.String:\n\t\tw.WriteString(v.String())\n\tcase reflect.Array:\n\t\t// Don't double count: callers of WriteArray count on the size being\n\t\t// added, so we need to discount it here.\n\t\tw.Size -= int(v.Type().Size())\n\t\tw.writeSlice(x, true)\n\tcase reflect.Slice:\n\t\tw.writeSlice(x, false)\n\tcase reflect.Struct:\n\t\tw.printf(\"%s{\\n\", typeName(v.Interface()))\n\t\tt := v.Type()\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tw.printf(\"%s: \", t.Field(i).Name)\n\t\t\tw.writeValue(v.Field(i))\n\t\t\tw.printf(\",\\n\")\n\t\t}\n\t\tw.printf(\"}\")\n\tdefault:\n\t\tw.printf(\"%#v\", x)\n\t}\n}\n\n// WriteString writes a string literal.\nfunc (w *CodeWriter) WriteString(s string) {\n\ts = strings.Replace(s, `\\`, `\\\\`, -1)\n\tio.WriteString(w.Hash, s) // content hash\n\tw.Size += len(s)\n\n\tconst maxInline = 40\n\tif len(s) <= maxInline {\n\t\tw.printf(\"%q\", s)\n\t\treturn\n\t}\n\n\t// We will render the string as a multi-line string.\n\tconst maxWidth = 80 - 4 - len(`\"`) - len(`\" +`)\n\n\t// When starting on its own line, go fmt indents line 2+ an extra level.\n\tn, max := maxWidth, maxWidth-4\n\n\t// As per https://golang.org/issue/18078, the compiler has trouble\n\t// compiling the concatenation of many strings, s0 + s1 + s2 + ... + sN,\n\t// for large N. We insert redundant, explicit parentheses to work around\n\t// that, lowering the N at any given step: (s0 + s1 + ... + s63) + (s64 +\n\t// ... + s127) + etc + (etc + ... + sN).\n\texplicitParens, extraComment := len(s) > 128*1024, \"\"\n\tif explicitParens {\n\t\tw.printf(`(`)\n\t\textraComment = \"; the redundant, explicit parens are for https://golang.org/issue/18078\"\n\t}\n\n\t// Print \"\" +\\n, if a string does not start on its own line.\n\tb := w.buf.Bytes()\n\tif p := len(bytes.TrimRight(b, \" \\t\")); p > 0 && b[p-1] != '\\n' {\n\t\tw.printf(\"\\\"\\\" + // Size: %d bytes%s\\n\", len(s), extraComment)\n\t\tn, max = maxWidth, maxWidth\n\t}\n\n\tw.printf(`\"`)\n\n\tfor sz, p, nLines := 0, 0, 0; p < len(s); {\n\t\tvar r rune\n\t\tr, sz = utf8.DecodeRuneInString(s[p:])\n\t\tout := s[p : p+sz]\n\t\tchars := 1\n\t\tif !unicode.IsPrint(r) || r == utf8.RuneError || r == '\"' {\n\t\t\tswitch sz {\n\t\t\tcase 1:\n\t\t\t\tout = fmt.Sprintf(\"\\\\x%02x\", s[p])\n\t\t\tcase 2, 3:\n\t\t\t\tout = fmt.Sprintf(\"\\\\u%04x\", r)\n\t\t\tcase 4:\n\t\t\t\tout = fmt.Sprintf(\"\\\\U%08x\", r)\n\t\t\t}\n\t\t\tchars = len(out)\n\t\t}\n\t\tif n -= chars; n < 0 {\n\t\t\tnLines++\n\t\t\tif explicitParens && nLines&63 == 63 {\n\t\t\t\tw.printf(\"\\\") + (\\\"\")\n\t\t\t}\n\t\t\tw.printf(\"\\\" +\\n\\\"\")\n\t\t\tn = max - len(out)\n\t\t}\n\t\tw.printf(\"%s\", out)\n\t\tp += sz\n\t}\n\tw.printf(`\"`)\n\tif explicitParens {\n\t\tw.printf(`)`)\n\t}\n}\n\n// WriteSlice writes a slice value.\nfunc (w *CodeWriter) WriteSlice(x interface{}) {\n\tw.writeSlice(x, false)\n}\n\n// WriteArray writes an array value.\nfunc (w *CodeWriter) WriteArray(x interface{}) {\n\tw.writeSlice(x, true)\n}\n\nfunc (w *CodeWriter) writeSlice(x interface{}, isArray bool) {\n\tv := reflect.ValueOf(x)\n\tw.gob.Encode(v.Len())\n\tw.Size += v.Len() * int(v.Type().Elem().Size())\n\tname := typeName(x)\n\tif isArray {\n\t\tname = fmt.Sprintf(\"[%d]%s\", v.Len(), name[strings.Index(name, \"]\")+1:])\n\t}\n\tif isArray {\n\t\tw.printf(\"%s{\\n\", name)\n\t} else {\n\t\tw.printf(\"%s{ // %d elements\\n\", name, v.Len())\n\t}\n\n\tswitch kind := v.Type().Elem().Kind(); kind {\n\tcase reflect.String:\n\t\tfor _, s := range x.([]string) {\n\t\t\tw.WriteString(s)\n\t\t\tw.printf(\",\\n\")\n\t\t}\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t// nLine and nBlock are the number of elements per line and block.\n\t\tnLine, nBlock, format := 8, 64, \"%d,\"\n\t\tswitch kind {\n\t\tcase reflect.Uint8:\n\t\t\tformat = \"%#02x,\"\n\t\tcase reflect.Uint16:\n\t\t\tformat = \"%#04x,\"\n\t\tcase reflect.Uint32:\n\t\t\tnLine, nBlock, format = 4, 32, \"%#08x,\"\n\t\tcase reflect.Uint, reflect.Uint64:\n\t\t\tnLine, nBlock, format = 4, 32, \"%#016x,\"\n\t\tcase reflect.Int8:\n\t\t\tnLine = 16\n\t\t}\n\t\tn := nLine\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tif i%nBlock == 0 && v.Len() > nBlock {\n\t\t\t\tw.printf(\"// Entry %X - %X\\n\", i, i+nBlock-1)\n\t\t\t}\n\t\t\tx := v.Index(i).Interface()\n\t\t\tw.gob.Encode(x)\n\t\t\tw.printf(format, x)\n\t\t\tif n--; n == 0 {\n\t\t\t\tn = nLine\n\t\t\t\tw.printf(\"\\n\")\n\t\t\t}\n\t\t}\n\t\tw.printf(\"\\n\")\n\tcase reflect.Struct:\n\t\tzero := reflect.Zero(v.Type().Elem()).Interface()\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tx := v.Index(i).Interface()\n\t\t\tw.gob.EncodeValue(v)\n\t\t\tif !reflect.DeepEqual(zero, x) {\n\t\t\t\tline := fmt.Sprintf(\"%#v,\\n\", x)\n\t\t\t\tline = line[strings.IndexByte(line, '{'):]\n\t\t\t\tw.printf(\"%d: \", i)\n\t\t\t\tw.printf(line)\n\t\t\t}\n\t\t}\n\tcase reflect.Array:\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tw.printf(\"%d: %#v,\\n\", i, v.Index(i).Interface())\n\t\t}\n\tdefault:\n\t\tpanic(\"gen: slice elem type not supported\")\n\t}\n\tw.printf(\"}\")\n}\n\n// WriteType writes a definition of the type of the given value and returns the\n// type name.\nfunc (w *CodeWriter) WriteType(x interface{}) string {\n\tt := reflect.TypeOf(x)\n\tw.printf(\"type %s struct {\\n\", t.Name())\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tw.printf(\"\\t%s %s\\n\", t.Field(i).Name, t.Field(i).Type)\n\t}\n\tw.printf(\"}\\n\")\n\treturn t.Name()\n}\n\n// typeName returns the name of the go type of x.\nfunc typeName(x interface{}) string {\n\tt := reflect.ValueOf(x).Type()\n\treturn strings.Replace(fmt.Sprint(t), \"main.\", \"\", 1)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/gen/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// Package gen contains common code for the various code generation tools in the\n// text repository. Its usage ensures consistency between tools.\n//\n// This package defines command line flags that are common to most generation\n// tools. The flags allow for specifying specific Unicode and CLDR versions\n// in the public Unicode data repository (http://www.unicode.org/Public).\n//\n// A local Unicode data mirror can be set through the flag -local or the\n// environment variable UNICODE_DIR. The former takes precedence. The local\n// directory should follow the same structure as the public repository.\n//\n// IANA data can also optionally be mirrored by putting it in the iana directory\n// rooted at the top of the local mirror. Beware, though, that IANA data is not\n// versioned. So it is up to the developer to use the right version.\npackage gen // import \"golang.org/x/text/internal/gen\"\n\nimport (\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/build\"\n\t\"go/format\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"sync\"\n\t\"unicode\"\n\n\t\"golang.org/x/text/unicode/cldr\"\n)\n\nvar (\n\turl = flag.String(\"url\",\n\t\t\"http://www.unicode.org/Public\",\n\t\t\"URL of Unicode database directory\")\n\tiana = flag.String(\"iana\",\n\t\t\"http://www.iana.org\",\n\t\t\"URL of the IANA repository\")\n\tunicodeVersion = flag.String(\"unicode\",\n\t\tgetEnv(\"UNICODE_VERSION\", unicode.Version),\n\t\t\"unicode version to use\")\n\tcldrVersion = flag.String(\"cldr\",\n\t\tgetEnv(\"CLDR_VERSION\", cldr.Version),\n\t\t\"cldr version to use\")\n)\n\nfunc getEnv(name, def string) string {\n\tif v := os.Getenv(name); v != \"\" {\n\t\treturn v\n\t}\n\treturn def\n}\n\n// Init performs common initialization for a gen command. It parses the flags\n// and sets up the standard logging parameters.\nfunc Init() {\n\tlog.SetPrefix(\"\")\n\tlog.SetFlags(log.Lshortfile)\n\tflag.Parse()\n}\n\nconst header = `// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\npackage %s\n\n`\n\n// UnicodeVersion reports the requested Unicode version.\nfunc UnicodeVersion() string {\n\treturn *unicodeVersion\n}\n\n// UnicodeVersion reports the requested CLDR version.\nfunc CLDRVersion() string {\n\treturn *cldrVersion\n}\n\n// IsLocal reports whether data files are available locally.\nfunc IsLocal() bool {\n\tdir, err := localReadmeFile()\n\tif err != nil {\n\t\treturn false\n\t}\n\tif _, err = os.Stat(dir); err != nil {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// OpenUCDFile opens the requested UCD file. The file is specified relative to\n// the public Unicode root directory. It will call log.Fatal if there are any\n// errors.\nfunc OpenUCDFile(file string) io.ReadCloser {\n\treturn openUnicode(path.Join(*unicodeVersion, \"ucd\", file))\n}\n\n// OpenCLDRCoreZip opens the CLDR core zip file. It will call log.Fatal if there\n// are any errors.\nfunc OpenCLDRCoreZip() io.ReadCloser {\n\treturn OpenUnicodeFile(\"cldr\", *cldrVersion, \"core.zip\")\n}\n\n// OpenUnicodeFile opens the requested file of the requested category from the\n// root of the Unicode data archive. The file is specified relative to the\n// public Unicode root directory. If version is \"\", it will use the default\n// Unicode version. It will call log.Fatal if there are any errors.\nfunc OpenUnicodeFile(category, version, file string) io.ReadCloser {\n\tif version == \"\" {\n\t\tversion = UnicodeVersion()\n\t}\n\treturn openUnicode(path.Join(category, version, file))\n}\n\n// OpenIANAFile opens the requested IANA file. The file is specified relative\n// to the IANA root, which is typically either http://www.iana.org or the\n// iana directory in the local mirror. It will call log.Fatal if there are any\n// errors.\nfunc OpenIANAFile(path string) io.ReadCloser {\n\treturn Open(*iana, \"iana\", path)\n}\n\nvar (\n\tdirMutex sync.Mutex\n\tlocalDir string\n)\n\nconst permissions = 0755\n\nfunc localReadmeFile() (string, error) {\n\tp, err := build.Import(\"golang.org/x/text\", \"\", build.FindOnly)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"Could not locate package: %v\", err)\n\t}\n\treturn filepath.Join(p.Dir, \"DATA\", \"README\"), nil\n}\n\nfunc getLocalDir() string {\n\tdirMutex.Lock()\n\tdefer dirMutex.Unlock()\n\n\treadme, err := localReadmeFile()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdir := filepath.Dir(readme)\n\tif _, err := os.Stat(readme); err != nil {\n\t\tif err := os.MkdirAll(dir, permissions); err != nil {\n\t\t\tlog.Fatalf(\"Could not create directory: %v\", err)\n\t\t}\n\t\tioutil.WriteFile(readme, []byte(readmeTxt), permissions)\n\t}\n\treturn dir\n}\n\nconst readmeTxt = `Generated by golang.org/x/text/internal/gen. DO NOT EDIT.\n\nThis directory contains downloaded files used to generate the various tables\nin the golang.org/x/text subrepo.\n\nNote that the language subtag repo (iana/assignments/language-subtag-registry)\nand all other times in the iana subdirectory are not versioned and will need\nto be periodically manually updated. The easiest way to do this is to remove\nthe entire iana directory. This is mostly of concern when updating the language\npackage.\n`\n\n// Open opens subdir/path if a local directory is specified and the file exists,\n// where subdir is a directory relative to the local root, or fetches it from\n// urlRoot/path otherwise. It will call log.Fatal if there are any errors.\nfunc Open(urlRoot, subdir, path string) io.ReadCloser {\n\tfile := filepath.Join(getLocalDir(), subdir, filepath.FromSlash(path))\n\treturn open(file, urlRoot, path)\n}\n\nfunc openUnicode(path string) io.ReadCloser {\n\tfile := filepath.Join(getLocalDir(), filepath.FromSlash(path))\n\treturn open(file, *url, path)\n}\n\n// TODO: automatically periodically update non-versioned files.\n\nfunc open(file, urlRoot, path string) io.ReadCloser {\n\tif f, err := os.Open(file); err == nil {\n\t\treturn f\n\t}\n\tr := get(urlRoot, path)\n\tdefer r.Close()\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\tlog.Fatalf(\"Could not download file: %v\", err)\n\t}\n\tos.MkdirAll(filepath.Dir(file), permissions)\n\tif err := ioutil.WriteFile(file, b, permissions); err != nil {\n\t\tlog.Fatalf(\"Could not create file: %v\", err)\n\t}\n\treturn ioutil.NopCloser(bytes.NewReader(b))\n}\n\nfunc get(root, path string) io.ReadCloser {\n\turl := root + \"/\" + path\n\tfmt.Printf(\"Fetching %s...\", url)\n\tdefer fmt.Println(\" done.\")\n\tresp, err := http.Get(url)\n\tif err != nil {\n\t\tlog.Fatalf(\"HTTP GET: %v\", err)\n\t}\n\tif resp.StatusCode != 200 {\n\t\tlog.Fatalf(\"Bad GET status for %q: %q\", url, resp.Status)\n\t}\n\treturn resp.Body\n}\n\n// TODO: use Write*Version in all applicable packages.\n\n// WriteUnicodeVersion writes a constant for the Unicode version from which the\n// tables are generated.\nfunc WriteUnicodeVersion(w io.Writer) {\n\tfmt.Fprintf(w, \"// UnicodeVersion is the Unicode version from which the tables in this package are derived.\\n\")\n\tfmt.Fprintf(w, \"const UnicodeVersion = %q\\n\\n\", UnicodeVersion())\n}\n\n// WriteCLDRVersion writes a constant for the CLDR version from which the\n// tables are generated.\nfunc WriteCLDRVersion(w io.Writer) {\n\tfmt.Fprintf(w, \"// CLDRVersion is the CLDR version from which the tables in this package are derived.\\n\")\n\tfmt.Fprintf(w, \"const CLDRVersion = %q\\n\\n\", CLDRVersion())\n}\n\n// WriteGoFile prepends a standard file comment and package statement to the\n// given bytes, applies gofmt, and writes them to a file with the given name.\n// It will call log.Fatal if there are any errors.\nfunc WriteGoFile(filename, pkg string, b []byte) {\n\tw, err := os.Create(filename)\n\tif err != nil {\n\t\tlog.Fatalf(\"Could not create file %s: %v\", filename, err)\n\t}\n\tdefer w.Close()\n\tif _, err = WriteGo(w, pkg, b); err != nil {\n\t\tlog.Fatalf(\"Error writing file %s: %v\", filename, err)\n\t}\n}\n\n// WriteGo prepends a standard file comment and package statement to the given\n// bytes, applies gofmt, and writes them to w.\nfunc WriteGo(w io.Writer, pkg string, b []byte) (n int, err error) {\n\tsrc := []byte(fmt.Sprintf(header, pkg))\n\tsrc = append(src, b...)\n\tformatted, err := format.Source(src)\n\tif err != nil {\n\t\t// Print the generated code even in case of an error so that the\n\t\t// returned error can be meaningfully interpreted.\n\t\tn, _ = w.Write(src)\n\t\treturn n, err\n\t}\n\treturn w.Write(formatted)\n}\n\n// Repackage rewrites a Go file from belonging to package main to belonging to\n// the given package.\nfunc Repackage(inFile, outFile, pkg string) {\n\tsrc, err := ioutil.ReadFile(inFile)\n\tif err != nil {\n\t\tlog.Fatalf(\"reading %s: %v\", inFile, err)\n\t}\n\tconst toDelete = \"package main\\n\\n\"\n\ti := bytes.Index(src, []byte(toDelete))\n\tif i < 0 {\n\t\tlog.Fatalf(\"Could not find %q in %s.\", toDelete, inFile)\n\t}\n\tw := &bytes.Buffer{}\n\tw.Write(src[i+len(toDelete):])\n\tWriteGoFile(outFile, pkg, w.Bytes())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/triegen/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/triegen/compact.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 triegen\n\n// This file defines Compacter and its implementations.\n\nimport \"io\"\n\n// A Compacter generates an alternative, more space-efficient way to store a\n// trie value block. A trie value block holds all possible values for the last\n// byte of a UTF-8 encoded rune. Excluding ASCII characters, a trie value block\n// always has 64 values, as a UTF-8 encoding ends with a byte in [0x80, 0xC0).\ntype Compacter interface {\n\t// Size returns whether the Compacter could encode the given block as well\n\t// as its size in case it can. len(v) is always 64.\n\tSize(v []uint64) (sz int, ok bool)\n\n\t// Store stores the block using the Compacter's compression method.\n\t// It returns a handle with which the block can be retrieved.\n\t// len(v) is always 64.\n\tStore(v []uint64) uint32\n\n\t// Print writes the data structures associated to the given store to w.\n\tPrint(w io.Writer) error\n\n\t// Handler returns the name of a function that gets called during trie\n\t// lookup for blocks generated by the Compacter. The function should be of\n\t// the form func (n uint32, b byte) uint64, where n is the index returned by\n\t// the Compacter's Store method and b is the last byte of the UTF-8\n\t// encoding, where 0x80 <= b < 0xC0, for which to do the lookup in the\n\t// block.\n\tHandler() string\n}\n\n// simpleCompacter is the default Compacter used by builder. It implements a\n// normal trie block.\ntype simpleCompacter builder\n\nfunc (b *simpleCompacter) Size([]uint64) (sz int, ok bool) {\n\treturn blockSize * b.ValueSize, true\n}\n\nfunc (b *simpleCompacter) Store(v []uint64) uint32 {\n\th := uint32(len(b.ValueBlocks) - blockOffset)\n\tb.ValueBlocks = append(b.ValueBlocks, v)\n\treturn h\n}\n\nfunc (b *simpleCompacter) Print(io.Writer) error {\n\t// Structures are printed in print.go.\n\treturn nil\n}\n\nfunc (b *simpleCompacter) Handler() string {\n\tpanic(\"Handler should be special-cased for this Compacter\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/triegen/print.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 triegen\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"text/template\"\n)\n\n// print writes all the data structures as well as the code necessary to use the\n// trie to w.\nfunc (b *builder) print(w io.Writer) error {\n\tb.Stats.NValueEntries = len(b.ValueBlocks) * blockSize\n\tb.Stats.NValueBytes = len(b.ValueBlocks) * blockSize * b.ValueSize\n\tb.Stats.NIndexEntries = len(b.IndexBlocks) * blockSize\n\tb.Stats.NIndexBytes = len(b.IndexBlocks) * blockSize * b.IndexSize\n\tb.Stats.NHandleBytes = len(b.Trie) * 2 * b.IndexSize\n\n\t// If we only have one root trie, all starter blocks are at position 0 and\n\t// we can access the arrays directly.\n\tif len(b.Trie) == 1 {\n\t\t// At this point we cannot refer to the generated tables directly.\n\t\tb.ASCIIBlock = b.Name + \"Values\"\n\t\tb.StarterBlock = b.Name + \"Index\"\n\t} else {\n\t\t// Otherwise we need to have explicit starter indexes in the trie\n\t\t// structure.\n\t\tb.ASCIIBlock = \"t.ascii\"\n\t\tb.StarterBlock = \"t.utf8Start\"\n\t}\n\n\tb.SourceType = \"[]byte\"\n\tif err := lookupGen.Execute(w, b); err != nil {\n\t\treturn err\n\t}\n\n\tb.SourceType = \"string\"\n\tif err := lookupGen.Execute(w, b); err != nil {\n\t\treturn err\n\t}\n\n\tif err := trieGen.Execute(w, b); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, c := range b.Compactions {\n\t\tif err := c.c.Print(w); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc printValues(n int, values []uint64) string {\n\tw := &bytes.Buffer{}\n\tboff := n * blockSize\n\tfmt.Fprintf(w, \"\\t// Block %#x, offset %#x\", n, boff)\n\tvar newline bool\n\tfor i, v := range values {\n\t\tif i%6 == 0 {\n\t\t\tnewline = true\n\t\t}\n\t\tif v != 0 {\n\t\t\tif newline {\n\t\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\t\tnewline = false\n\t\t\t}\n\t\t\tfmt.Fprintf(w, \"\\t%#02x:%#04x, \", boff+i, v)\n\t\t}\n\t}\n\treturn w.String()\n}\n\nfunc printIndex(b *builder, nr int, n *node) string {\n\tw := &bytes.Buffer{}\n\tboff := nr * blockSize\n\tfmt.Fprintf(w, \"\\t// Block %#x, offset %#x\", nr, boff)\n\tvar newline bool\n\tfor i, c := range n.children {\n\t\tif i%8 == 0 {\n\t\t\tnewline = true\n\t\t}\n\t\tif c != nil {\n\t\t\tv := b.Compactions[c.index.compaction].Offset + uint32(c.index.index)\n\t\t\tif v != 0 {\n\t\t\t\tif newline {\n\t\t\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\t\t\tnewline = false\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(w, \"\\t%#02x:%#02x, \", boff+i, v)\n\t\t\t}\n\t\t}\n\t}\n\treturn w.String()\n}\n\nvar (\n\ttrieGen = template.Must(template.New(\"trie\").Funcs(template.FuncMap{\n\t\t\"printValues\": printValues,\n\t\t\"printIndex\":  printIndex,\n\t\t\"title\":       strings.Title,\n\t\t\"dec\":         func(x int) int { return x - 1 },\n\t\t\"psize\": func(n int) string {\n\t\t\treturn fmt.Sprintf(\"%d bytes (%.2f KiB)\", n, float64(n)/1024)\n\t\t},\n\t}).Parse(trieTemplate))\n\tlookupGen = template.Must(template.New(\"lookup\").Parse(lookupTemplate))\n)\n\n// TODO: consider the return type of lookup. It could be uint64, even if the\n// internal value type is smaller. We will have to verify this with the\n// performance of unicode/norm, which is very sensitive to such changes.\nconst trieTemplate = `{{$b := .}}{{$multi := gt (len .Trie) 1}}\n// {{.Name}}Trie. Total size: {{psize .Size}}. Checksum: {{printf \"%08x\" .Checksum}}.\ntype {{.Name}}Trie struct { {{if $multi}}\n\tascii []{{.ValueType}} // index for ASCII bytes\n\tutf8Start  []{{.IndexType}} // index for UTF-8 bytes >= 0xC0\n{{end}}}\n\nfunc new{{title .Name}}Trie(i int) *{{.Name}}Trie { {{if $multi}}\n\th := {{.Name}}TrieHandles[i]\n\treturn &{{.Name}}Trie{ {{.Name}}Values[uint32(h.ascii)<<6:], {{.Name}}Index[uint32(h.multi)<<6:] }\n}\n\ntype {{.Name}}TrieHandle struct {\n\tascii, multi {{.IndexType}}\n}\n\n// {{.Name}}TrieHandles: {{len .Trie}} handles, {{.Stats.NHandleBytes}} bytes\nvar {{.Name}}TrieHandles = [{{len .Trie}}]{{.Name}}TrieHandle{\n{{range .Trie}}\t{ {{.ASCIIIndex}}, {{.StarterIndex}} }, // {{printf \"%08x\" .Checksum}}: {{.Name}}\n{{end}}}{{else}}\n\treturn &{{.Name}}Trie{}\n}\n{{end}}\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *{{.Name}}Trie) lookupValue(n uint32, b byte) {{.ValueType}}{{$last := dec (len .Compactions)}} {\n\tswitch { {{range $i, $c := .Compactions}}\n\t\t{{if eq $i $last}}default{{else}}case n < {{$c.Cutoff}}{{end}}:{{if ne $i 0}}\n\t\t\tn -= {{$c.Offset}}{{end}}\n\t\t\treturn {{print $b.ValueType}}({{$c.Handler}}){{end}}\n\t}\n}\n\n// {{.Name}}Values: {{len .ValueBlocks}} blocks, {{.Stats.NValueEntries}} entries, {{.Stats.NValueBytes}} bytes\n// The third block is the zero block.\nvar {{.Name}}Values = [{{.Stats.NValueEntries}}]{{.ValueType}} {\n{{range $i, $v := .ValueBlocks}}{{printValues $i $v}}\n{{end}}}\n\n// {{.Name}}Index: {{len .IndexBlocks}} blocks, {{.Stats.NIndexEntries}} entries, {{.Stats.NIndexBytes}} bytes\n// Block 0 is the zero block.\nvar {{.Name}}Index = [{{.Stats.NIndexEntries}}]{{.IndexType}} {\n{{range $i, $v := .IndexBlocks}}{{printIndex $b $i $v}}\n{{end}}}\n`\n\n// TODO: consider allowing zero-length strings after evaluating performance with\n// unicode/norm.\nconst lookupTemplate = `\n// lookup{{if eq .SourceType \"string\"}}String{{end}} 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 *{{.Name}}Trie) lookup{{if eq .SourceType \"string\"}}String{{end}}(s {{.SourceType}}) (v {{.ValueType}}, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn {{.ASCIIBlock}}[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 := {{.StarterBlock}}[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 := {{.StarterBlock}}[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 = {{.Name}}Index[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 := {{.StarterBlock}}[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 = {{.Name}}Index[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 = {{.Name}}Index[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// lookup{{if eq .SourceType \"string\"}}String{{end}}Unsafe 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 *{{.Name}}Trie) lookup{{if eq .SourceType \"string\"}}String{{end}}Unsafe(s {{.SourceType}}) {{.ValueType}} {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn {{.ASCIIBlock}}[c0]\n\t}\n\ti := {{.StarterBlock}}[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = {{.Name}}Index[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 = {{.Name}}Index[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"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/triegen/triegen.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 triegen implements a code generator for a trie for associating\n// unsigned integer values with UTF-8 encoded runes.\n//\n// Many of the go.text packages use tries for storing per-rune information.  A\n// trie is especially useful if many of the runes have the same value. If this\n// is the case, many blocks can be expected to be shared allowing for\n// information on many runes to be stored in little space.\n//\n// As most of the lookups are done directly on []byte slices, the tries use the\n// UTF-8 bytes directly for the lookup. This saves a conversion from UTF-8 to\n// runes and contributes a little bit to better performance. It also naturally\n// provides a fast path for ASCII.\n//\n// Space is also an issue. There are many code points defined in Unicode and as\n// a result tables can get quite large. So every byte counts. The triegen\n// package automatically chooses the smallest integer values to represent the\n// tables. Compacters allow further compression of the trie by allowing for\n// alternative representations of individual trie blocks.\n//\n// triegen allows generating multiple tries as a single structure. This is\n// useful when, for example, one wants to generate tries for several languages\n// that have a lot of values in common. Some existing libraries for\n// internationalization store all per-language data as a dynamically loadable\n// chunk. The go.text packages are designed with the assumption that the user\n// typically wants to compile in support for all supported languages, in line\n// with the approach common to Go to create a single standalone binary. The\n// multi-root trie approach can give significant storage savings in this\n// scenario.\n//\n// triegen generates both tables and code. The code is optimized to use the\n// automatically chosen data types. The following code is generated for a Trie\n// or multiple Tries named \"foo\":\n//\t- type fooTrie\n//\t\tThe trie type.\n//\n//\t- func newFooTrie(x int) *fooTrie\n//\t\tTrie constructor, where x is the index of the trie passed to Gen.\n//\n//\t- func (t *fooTrie) lookup(s []byte) (v uintX, sz int)\n//\t\tThe lookup method, where uintX is automatically chosen.\n//\n//\t- func lookupString, lookupUnsafe and lookupStringUnsafe\n//\t\tVariants of the above.\n//\n//\t- var fooValues and fooIndex and any tables generated by Compacters.\n//\t\tThe core trie data.\n//\n//\t- var fooTrieHandles\n//\t\tIndexes of starter blocks in case of multiple trie roots.\n//\n// It is recommended that users test the generated trie by checking the returned\n// value for every rune. Such exhaustive tests are possible as the the number of\n// runes in Unicode is limited.\npackage triegen // import \"golang.org/x/text/internal/triegen\"\n\n// TODO: Arguably, the internally optimized data types would not have to be\n// exposed in the generated API. We could also investigate not generating the\n// code, but using it through a package. We would have to investigate the impact\n// on performance of making such change, though. For packages like unicode/norm,\n// small changes like this could tank performance.\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash/crc64\"\n\t\"io\"\n\t\"log\"\n\t\"unicode/utf8\"\n)\n\n// builder builds a set of tries for associating values with runes. The set of\n// tries can share common index and value blocks.\ntype builder struct {\n\tName string\n\n\t// ValueType is the type of the trie values looked up.\n\tValueType string\n\n\t// ValueSize is the byte size of the ValueType.\n\tValueSize int\n\n\t// IndexType is the type of trie index values used for all UTF-8 bytes of\n\t// a rune except the last one.\n\tIndexType string\n\n\t// IndexSize is the byte size of the IndexType.\n\tIndexSize int\n\n\t// SourceType is used when generating the lookup functions. If the user\n\t// requests StringSupport, all lookup functions will be generated for\n\t// string input as well.\n\tSourceType string\n\n\tTrie []*Trie\n\n\tIndexBlocks []*node\n\tValueBlocks [][]uint64\n\tCompactions []compaction\n\tChecksum    uint64\n\n\tASCIIBlock   string\n\tStarterBlock string\n\n\tindexBlockIdx map[uint64]int\n\tvalueBlockIdx map[uint64]nodeIndex\n\tasciiBlockIdx map[uint64]int\n\n\t// Stats are used to fill out the template.\n\tStats struct {\n\t\tNValueEntries int\n\t\tNValueBytes   int\n\t\tNIndexEntries int\n\t\tNIndexBytes   int\n\t\tNHandleBytes  int\n\t}\n\n\terr error\n}\n\n// A nodeIndex encodes the index of a node, which is defined by the compaction\n// which stores it and an index within the compaction. For internal nodes, the\n// compaction is always 0.\ntype nodeIndex struct {\n\tcompaction int\n\tindex      int\n}\n\n// compaction keeps track of stats used for the compaction.\ntype compaction struct {\n\tc         Compacter\n\tblocks    []*node\n\tmaxHandle uint32\n\ttotalSize int\n\n\t// Used by template-based generator and thus exported.\n\tCutoff  uint32\n\tOffset  uint32\n\tHandler string\n}\n\nfunc (b *builder) setError(err error) {\n\tif b.err == nil {\n\t\tb.err = err\n\t}\n}\n\n// An Option can be passed to Gen.\ntype Option func(b *builder) error\n\n// Compact configures the trie generator to use the given Compacter.\nfunc Compact(c Compacter) Option {\n\treturn func(b *builder) error {\n\t\tb.Compactions = append(b.Compactions, compaction{\n\t\t\tc:       c,\n\t\t\tHandler: c.Handler() + \"(n, b)\"})\n\t\treturn nil\n\t}\n}\n\n// Gen writes Go code for a shared trie lookup structure to w for the given\n// Tries. The generated trie type will be called nameTrie. newNameTrie(x) will\n// return the *nameTrie for tries[x]. A value can be looked up by using one of\n// the various lookup methods defined on nameTrie. It returns the table size of\n// the generated trie.\nfunc Gen(w io.Writer, name string, tries []*Trie, opts ...Option) (sz int, err error) {\n\t// The index contains two dummy blocks, followed by the zero block. The zero\n\t// block is at offset 0x80, so that the offset for the zero block for\n\t// continuation bytes is 0.\n\tb := &builder{\n\t\tName:        name,\n\t\tTrie:        tries,\n\t\tIndexBlocks: []*node{{}, {}, {}},\n\t\tCompactions: []compaction{{\n\t\t\tHandler: name + \"Values[n<<6+uint32(b)]\",\n\t\t}},\n\t\t// The 0 key in indexBlockIdx and valueBlockIdx is the hash of the zero\n\t\t// block.\n\t\tindexBlockIdx: map[uint64]int{0: 0},\n\t\tvalueBlockIdx: map[uint64]nodeIndex{0: {}},\n\t\tasciiBlockIdx: map[uint64]int{},\n\t}\n\tb.Compactions[0].c = (*simpleCompacter)(b)\n\n\tfor _, f := range opts {\n\t\tif err := f(b); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tb.build()\n\tif b.err != nil {\n\t\treturn 0, b.err\n\t}\n\tif err = b.print(w); err != nil {\n\t\treturn 0, err\n\t}\n\treturn b.Size(), nil\n}\n\n// A Trie represents a single root node of a trie. A builder may build several\n// overlapping tries at once.\ntype Trie struct {\n\troot *node\n\n\thiddenTrie\n}\n\n// hiddenTrie contains values we want to be visible to the template generator,\n// but hidden from the API documentation.\ntype hiddenTrie struct {\n\tName         string\n\tChecksum     uint64\n\tASCIIIndex   int\n\tStarterIndex int\n}\n\n// NewTrie returns a new trie root.\nfunc NewTrie(name string) *Trie {\n\treturn &Trie{\n\t\t&node{\n\t\t\tchildren: make([]*node, blockSize),\n\t\t\tvalues:   make([]uint64, utf8.RuneSelf),\n\t\t},\n\t\thiddenTrie{Name: name},\n\t}\n}\n\n// Gen is a convenience wrapper around the Gen func passing t as the only trie\n// and uses the name passed to NewTrie. It returns the size of the generated\n// tables.\nfunc (t *Trie) Gen(w io.Writer, opts ...Option) (sz int, err error) {\n\treturn Gen(w, t.Name, []*Trie{t}, opts...)\n}\n\n// node is a node of the intermediate trie structure.\ntype node struct {\n\t// children holds this node's children. It is always of length 64.\n\t// A child node may be nil.\n\tchildren []*node\n\n\t// values contains the values of this node. If it is non-nil, this node is\n\t// either a root or leaf node:\n\t// For root nodes, len(values) == 128 and it maps the bytes in [0x00, 0x7F].\n\t// For leaf nodes, len(values) ==  64 and it maps the bytes in [0x80, 0xBF].\n\tvalues []uint64\n\n\tindex nodeIndex\n}\n\n// Insert associates value with the given rune. Insert will panic if a non-zero\n// value is passed for an invalid rune.\nfunc (t *Trie) Insert(r rune, value uint64) {\n\tif value == 0 {\n\t\treturn\n\t}\n\ts := string(r)\n\tif []rune(s)[0] != r && value != 0 {\n\t\t// Note: The UCD tables will always assign what amounts to a zero value\n\t\t// to a surrogate. Allowing a zero value for an illegal rune allows\n\t\t// users to iterate over [0..MaxRune] without having to explicitly\n\t\t// exclude surrogates, which would be tedious.\n\t\tpanic(fmt.Sprintf(\"triegen: non-zero value for invalid rune %U\", r))\n\t}\n\tif len(s) == 1 {\n\t\t// It is a root node value (ASCII).\n\t\tt.root.values[s[0]] = value\n\t\treturn\n\t}\n\n\tn := t.root\n\tfor ; len(s) > 1; s = s[1:] {\n\t\tif n.children == nil {\n\t\t\tn.children = make([]*node, blockSize)\n\t\t}\n\t\tp := s[0] % blockSize\n\t\tc := n.children[p]\n\t\tif c == nil {\n\t\t\tc = &node{}\n\t\t\tn.children[p] = c\n\t\t}\n\t\tif len(s) > 2 && c.values != nil {\n\t\t\tlog.Fatalf(\"triegen: insert(%U): found internal node with values\", r)\n\t\t}\n\t\tn = c\n\t}\n\tif n.values == nil {\n\t\tn.values = make([]uint64, blockSize)\n\t}\n\tif n.children != nil {\n\t\tlog.Fatalf(\"triegen: insert(%U): found leaf node that also has child nodes\", r)\n\t}\n\tn.values[s[0]-0x80] = value\n}\n\n// Size returns the number of bytes the generated trie will take to store. It\n// needs to be exported as it is used in the templates.\nfunc (b *builder) Size() int {\n\t// Index blocks.\n\tsz := len(b.IndexBlocks) * blockSize * b.IndexSize\n\n\t// Skip the first compaction, which represents the normal value blocks, as\n\t// its totalSize does not account for the ASCII blocks, which are managed\n\t// separately.\n\tsz += len(b.ValueBlocks) * blockSize * b.ValueSize\n\tfor _, c := range b.Compactions[1:] {\n\t\tsz += c.totalSize\n\t}\n\n\t// TODO: this computation does not account for the fixed overhead of a using\n\t// a compaction, either code or data. As for data, though, the typical\n\t// overhead of data is in the order of bytes (2 bytes for cases). Further,\n\t// the savings of using a compaction should anyway be substantial for it to\n\t// be worth it.\n\n\t// For multi-root tries, we also need to account for the handles.\n\tif len(b.Trie) > 1 {\n\t\tsz += 2 * b.IndexSize * len(b.Trie)\n\t}\n\treturn sz\n}\n\nfunc (b *builder) build() {\n\t// Compute the sizes of the values.\n\tvar vmax uint64\n\tfor _, t := range b.Trie {\n\t\tvmax = maxValue(t.root, vmax)\n\t}\n\tb.ValueType, b.ValueSize = getIntType(vmax)\n\n\t// Compute all block allocations.\n\t// TODO: first compute the ASCII blocks for all tries and then the other\n\t// nodes. ASCII blocks are more restricted in placement, as they require two\n\t// blocks to be placed consecutively. Processing them first may improve\n\t// sharing (at least one zero block can be expected to be saved.)\n\tfor _, t := range b.Trie {\n\t\tb.Checksum += b.buildTrie(t)\n\t}\n\n\t// Compute the offsets for all the Compacters.\n\toffset := uint32(0)\n\tfor i := range b.Compactions {\n\t\tc := &b.Compactions[i]\n\t\tc.Offset = offset\n\t\toffset += c.maxHandle + 1\n\t\tc.Cutoff = offset\n\t}\n\n\t// Compute the sizes of indexes.\n\t// TODO: different byte positions could have different sizes. So far we have\n\t// not found a case where this is beneficial.\n\timax := uint64(b.Compactions[len(b.Compactions)-1].Cutoff)\n\tfor _, ib := range b.IndexBlocks {\n\t\tif x := uint64(ib.index.index); x > imax {\n\t\t\timax = x\n\t\t}\n\t}\n\tb.IndexType, b.IndexSize = getIntType(imax)\n}\n\nfunc maxValue(n *node, max uint64) uint64 {\n\tif n == nil {\n\t\treturn max\n\t}\n\tfor _, c := range n.children {\n\t\tmax = maxValue(c, max)\n\t}\n\tfor _, v := range n.values {\n\t\tif max < v {\n\t\t\tmax = v\n\t\t}\n\t}\n\treturn max\n}\n\nfunc getIntType(v uint64) (string, int) {\n\tswitch {\n\tcase v < 1<<8:\n\t\treturn \"uint8\", 1\n\tcase v < 1<<16:\n\t\treturn \"uint16\", 2\n\tcase v < 1<<32:\n\t\treturn \"uint32\", 4\n\t}\n\treturn \"uint64\", 8\n}\n\nconst (\n\tblockSize = 64\n\n\t// Subtract two blocks to offset 0x80, the first continuation byte.\n\tblockOffset = 2\n\n\t// Subtract three blocks to offset 0xC0, the first non-ASCII starter.\n\trootBlockOffset = 3\n)\n\nvar crcTable = crc64.MakeTable(crc64.ISO)\n\nfunc (b *builder) buildTrie(t *Trie) uint64 {\n\tn := t.root\n\n\t// Get the ASCII offset. For the first trie, the ASCII block will be at\n\t// position 0.\n\thasher := crc64.New(crcTable)\n\tbinary.Write(hasher, binary.BigEndian, n.values)\n\thash := hasher.Sum64()\n\n\tv, ok := b.asciiBlockIdx[hash]\n\tif !ok {\n\t\tv = len(b.ValueBlocks)\n\t\tb.asciiBlockIdx[hash] = v\n\n\t\tb.ValueBlocks = append(b.ValueBlocks, n.values[:blockSize], n.values[blockSize:])\n\t\tif v == 0 {\n\t\t\t// Add the zero block at position 2 so that it will be assigned a\n\t\t\t// zero reference in the lookup blocks.\n\t\t\t// TODO: always do this? This would allow us to remove a check from\n\t\t\t// the trie lookup, but at the expense of extra space. Analyze\n\t\t\t// performance for unicode/norm.\n\t\t\tb.ValueBlocks = append(b.ValueBlocks, make([]uint64, blockSize))\n\t\t}\n\t}\n\tt.ASCIIIndex = v\n\n\t// Compute remaining offsets.\n\tt.Checksum = b.computeOffsets(n, true)\n\t// We already subtracted the normal blockOffset from the index. Subtract the\n\t// difference for starter bytes.\n\tt.StarterIndex = n.index.index - (rootBlockOffset - blockOffset)\n\treturn t.Checksum\n}\n\nfunc (b *builder) computeOffsets(n *node, root bool) uint64 {\n\t// For the first trie, the root lookup block will be at position 3, which is\n\t// the offset for UTF-8 non-ASCII starter bytes.\n\tfirst := len(b.IndexBlocks) == rootBlockOffset\n\tif first {\n\t\tb.IndexBlocks = append(b.IndexBlocks, n)\n\t}\n\n\t// We special-case the cases where all values recursively are 0. This allows\n\t// for the use of a zero block to which all such values can be directed.\n\thash := uint64(0)\n\tif n.children != nil || n.values != nil {\n\t\thasher := crc64.New(crcTable)\n\t\tfor _, c := range n.children {\n\t\t\tvar v uint64\n\t\t\tif c != nil {\n\t\t\t\tv = b.computeOffsets(c, false)\n\t\t\t}\n\t\t\tbinary.Write(hasher, binary.BigEndian, v)\n\t\t}\n\t\tbinary.Write(hasher, binary.BigEndian, n.values)\n\t\thash = hasher.Sum64()\n\t}\n\n\tif first {\n\t\tb.indexBlockIdx[hash] = rootBlockOffset - blockOffset\n\t}\n\n\t// Compacters don't apply to internal nodes.\n\tif n.children != nil {\n\t\tv, ok := b.indexBlockIdx[hash]\n\t\tif !ok {\n\t\t\tv = len(b.IndexBlocks) - blockOffset\n\t\t\tb.IndexBlocks = append(b.IndexBlocks, n)\n\t\t\tb.indexBlockIdx[hash] = v\n\t\t}\n\t\tn.index = nodeIndex{0, v}\n\t} else {\n\t\th, ok := b.valueBlockIdx[hash]\n\t\tif !ok {\n\t\t\tbestI, bestSize := 0, blockSize*b.ValueSize\n\t\t\tfor i, c := range b.Compactions[1:] {\n\t\t\t\tif sz, ok := c.c.Size(n.values); ok && bestSize > sz {\n\t\t\t\t\tbestI, bestSize = i+1, sz\n\t\t\t\t}\n\t\t\t}\n\t\t\tc := &b.Compactions[bestI]\n\t\t\tc.totalSize += bestSize\n\t\t\tv := c.c.Store(n.values)\n\t\t\tif c.maxHandle < v {\n\t\t\t\tc.maxHandle = v\n\t\t\t}\n\t\t\th = nodeIndex{bestI, int(v)}\n\t\t\tb.valueBlockIdx[hash] = h\n\t\t}\n\t\tn.index = h\n\t}\n\treturn hash\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/ucd/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/internal/ucd/ucd.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 ucd provides a parser for Unicode Character Database files, the\n// format of which is defined in http://www.unicode.org/reports/tr44/. See\n// http://www.unicode.org/Public/UCD/latest/ucd/ for example files.\n//\n// It currently does not support substitutions of missing fields.\npackage ucd // import \"golang.org/x/text/internal/ucd\"\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"log\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// UnicodeData.txt fields.\nconst (\n\tCodePoint = iota\n\tName\n\tGeneralCategory\n\tCanonicalCombiningClass\n\tBidiClass\n\tDecompMapping\n\tDecimalValue\n\tDigitValue\n\tNumericValue\n\tBidiMirrored\n\tUnicode1Name\n\tISOComment\n\tSimpleUppercaseMapping\n\tSimpleLowercaseMapping\n\tSimpleTitlecaseMapping\n)\n\n// Parse calls f for each entry in the given reader of a UCD file. It will close\n// the reader upon return. It will call log.Fatal if any error occurred.\n//\n// This implements the most common usage pattern of using Parser.\nfunc Parse(r io.ReadCloser, f func(p *Parser)) {\n\tdefer r.Close()\n\n\tp := New(r)\n\tfor p.Next() {\n\t\tf(p)\n\t}\n\tif err := p.Err(); err != nil {\n\t\tr.Close() // os.Exit will cause defers not to be called.\n\t\tlog.Fatal(err)\n\t}\n}\n\n// An Option is used to configure a Parser.\ntype Option func(p *Parser)\n\nfunc keepRanges(p *Parser) {\n\tp.keepRanges = true\n}\n\nvar (\n\t// KeepRanges prevents the expansion of ranges. The raw ranges can be\n\t// obtained by calling Range(0) on the parser.\n\tKeepRanges Option = keepRanges\n)\n\n// The Part option register a handler for lines starting with a '@'. The text\n// after a '@' is available as the first field. Comments are handled as usual.\nfunc Part(f func(p *Parser)) Option {\n\treturn func(p *Parser) {\n\t\tp.partHandler = f\n\t}\n}\n\n// The CommentHandler option passes comments that are on a line by itself to\n// a given handler.\nfunc CommentHandler(f func(s string)) Option {\n\treturn func(p *Parser) {\n\t\tp.commentHandler = f\n\t}\n}\n\n// A Parser parses Unicode Character Database (UCD) files.\ntype Parser struct {\n\tscanner *bufio.Scanner\n\n\tkeepRanges bool // Don't expand rune ranges in field 0.\n\n\terr     error\n\tcomment []byte\n\tfield   [][]byte\n\t// parsedRange is needed in case Range(0) is called more than once for one\n\t// field. In some cases this requires scanning ahead.\n\tparsedRange          bool\n\trangeStart, rangeEnd rune\n\n\tpartHandler    func(p *Parser)\n\tcommentHandler func(s string)\n}\n\nfunc (p *Parser) setError(err error) {\n\tif p.err == nil {\n\t\tp.err = err\n\t}\n}\n\nfunc (p *Parser) getField(i int) []byte {\n\tif i >= len(p.field) {\n\t\treturn nil\n\t}\n\treturn p.field[i]\n}\n\n// Err returns a non-nil error if any error occurred during parsing.\nfunc (p *Parser) Err() error {\n\treturn p.err\n}\n\n// New returns a Parser for the given Reader.\nfunc New(r io.Reader, o ...Option) *Parser {\n\tp := &Parser{\n\t\tscanner: bufio.NewScanner(r),\n\t}\n\tfor _, f := range o {\n\t\tf(p)\n\t}\n\treturn p\n}\n\n// Next parses the next line in the file. It returns true if a line was parsed\n// and false if it reached the end of the file.\nfunc (p *Parser) Next() bool {\n\tif !p.keepRanges && p.rangeStart < p.rangeEnd {\n\t\tp.rangeStart++\n\t\treturn true\n\t}\n\tp.comment = nil\n\tp.field = p.field[:0]\n\tp.parsedRange = false\n\n\tfor p.scanner.Scan() {\n\t\tb := p.scanner.Bytes()\n\t\tif len(b) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif b[0] == '#' {\n\t\t\tif p.commentHandler != nil {\n\t\t\t\tp.commentHandler(strings.TrimSpace(string(b[1:])))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Parse line\n\t\tif i := bytes.IndexByte(b, '#'); i != -1 {\n\t\t\tp.comment = bytes.TrimSpace(b[i+1:])\n\t\t\tb = b[:i]\n\t\t}\n\t\tif b[0] == '@' {\n\t\t\tif p.partHandler != nil {\n\t\t\t\tp.field = append(p.field, bytes.TrimSpace(b[1:]))\n\t\t\t\tp.partHandler(p)\n\t\t\t\tp.field = p.field[:0]\n\t\t\t}\n\t\t\tp.comment = nil\n\t\t\tcontinue\n\t\t}\n\t\tfor {\n\t\t\ti := bytes.IndexByte(b, ';')\n\t\t\tif i == -1 {\n\t\t\t\tp.field = append(p.field, bytes.TrimSpace(b))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.field = append(p.field, bytes.TrimSpace(b[:i]))\n\t\t\tb = b[i+1:]\n\t\t}\n\t\tif !p.keepRanges {\n\t\t\tp.rangeStart, p.rangeEnd = p.getRange(0)\n\t\t}\n\t\treturn true\n\t}\n\tp.setError(p.scanner.Err())\n\treturn false\n}\n\nfunc parseRune(b []byte) (rune, error) {\n\tif len(b) > 2 && b[0] == 'U' && b[1] == '+' {\n\t\tb = b[2:]\n\t}\n\tx, err := strconv.ParseUint(string(b), 16, 32)\n\treturn rune(x), err\n}\n\nfunc (p *Parser) parseRune(b []byte) rune {\n\tx, err := parseRune(b)\n\tp.setError(err)\n\treturn x\n}\n\n// Rune parses and returns field i as a rune.\nfunc (p *Parser) Rune(i int) rune {\n\tif i > 0 || p.keepRanges {\n\t\treturn p.parseRune(p.getField(i))\n\t}\n\treturn p.rangeStart\n}\n\n// Runes interprets and returns field i as a sequence of runes.\nfunc (p *Parser) Runes(i int) (runes []rune) {\n\tadd := func(b []byte) {\n\t\tif b = bytes.TrimSpace(b); len(b) > 0 {\n\t\t\trunes = append(runes, p.parseRune(b))\n\t\t}\n\t}\n\tfor b := p.getField(i); ; {\n\t\ti := bytes.IndexByte(b, ' ')\n\t\tif i == -1 {\n\t\t\tadd(b)\n\t\t\tbreak\n\t\t}\n\t\tadd(b[:i])\n\t\tb = b[i+1:]\n\t}\n\treturn\n}\n\nvar (\n\terrIncorrectLegacyRange = errors.New(\"ucd: unmatched <* First>\")\n\n\t// reRange matches one line of a legacy rune range.\n\treRange = regexp.MustCompile(\"^([0-9A-F]*);<([^,]*), ([^>]*)>(.*)$\")\n)\n\n// Range parses and returns field i as a rune range. A range is inclusive at\n// both ends. If the field only has one rune, first and last will be identical.\n// It supports the legacy format for ranges used in UnicodeData.txt.\nfunc (p *Parser) Range(i int) (first, last rune) {\n\tif !p.keepRanges {\n\t\treturn p.rangeStart, p.rangeStart\n\t}\n\treturn p.getRange(i)\n}\n\nfunc (p *Parser) getRange(i int) (first, last rune) {\n\tb := p.getField(i)\n\tif k := bytes.Index(b, []byte(\"..\")); k != -1 {\n\t\treturn p.parseRune(b[:k]), p.parseRune(b[k+2:])\n\t}\n\t// The first field may not be a rune, in which case we may ignore any error\n\t// and set the range as 0..0.\n\tx, err := parseRune(b)\n\tif err != nil {\n\t\t// Disable range parsing henceforth. This ensures that an error will be\n\t\t// returned if the user subsequently will try to parse this field as\n\t\t// a Rune.\n\t\tp.keepRanges = true\n\t}\n\t// Special case for UnicodeData that was retained for backwards compatibility.\n\tif i == 0 && len(p.field) > 1 && bytes.HasSuffix(p.field[1], []byte(\"First>\")) {\n\t\tif p.parsedRange {\n\t\t\treturn p.rangeStart, p.rangeEnd\n\t\t}\n\t\tmf := reRange.FindStringSubmatch(p.scanner.Text())\n\t\tif mf == nil || !p.scanner.Scan() {\n\t\t\tp.setError(errIncorrectLegacyRange)\n\t\t\treturn x, x\n\t\t}\n\t\t// Using Bytes would be more efficient here, but Text is a lot easier\n\t\t// and this is not a frequent case.\n\t\tml := reRange.FindStringSubmatch(p.scanner.Text())\n\t\tif ml == nil || mf[2] != ml[2] || ml[3] != \"Last\" || mf[4] != ml[4] {\n\t\t\tp.setError(errIncorrectLegacyRange)\n\t\t\treturn x, x\n\t\t}\n\t\tp.rangeStart, p.rangeEnd = x, p.parseRune(p.scanner.Bytes()[:len(ml[1])])\n\t\tp.parsedRange = true\n\t\treturn p.rangeStart, p.rangeEnd\n\t}\n\treturn x, x\n}\n\n// bools recognizes all valid UCD boolean values.\nvar bools = map[string]bool{\n\t\"\":      false,\n\t\"N\":     false,\n\t\"No\":    false,\n\t\"F\":     false,\n\t\"False\": false,\n\t\"Y\":     true,\n\t\"Yes\":   true,\n\t\"T\":     true,\n\t\"True\":  true,\n}\n\n// Bool parses and returns field i as a boolean value.\nfunc (p *Parser) Bool(i int) bool {\n\tb := p.getField(i)\n\tfor s, v := range bools {\n\t\tif bstrEq(b, s) {\n\t\t\treturn v\n\t\t}\n\t}\n\tp.setError(strconv.ErrSyntax)\n\treturn false\n}\n\n// Int parses and returns field i as an integer value.\nfunc (p *Parser) Int(i int) int {\n\tx, err := strconv.ParseInt(string(p.getField(i)), 10, 64)\n\tp.setError(err)\n\treturn int(x)\n}\n\n// Uint parses and returns field i as an unsigned integer value.\nfunc (p *Parser) Uint(i int) uint {\n\tx, err := strconv.ParseUint(string(p.getField(i)), 10, 64)\n\tp.setError(err)\n\treturn uint(x)\n}\n\n// Float parses and returns field i as a decimal value.\nfunc (p *Parser) Float(i int) float64 {\n\tx, err := strconv.ParseFloat(string(p.getField(i)), 64)\n\tp.setError(err)\n\treturn x\n}\n\n// String parses and returns field i as a string value.\nfunc (p *Parser) String(i int) string {\n\treturn string(p.getField(i))\n}\n\n// Strings parses and returns field i as a space-separated list of strings.\nfunc (p *Parser) Strings(i int) []string {\n\tss := strings.Split(string(p.getField(i)), \" \")\n\tfor i, s := range ss {\n\t\tss[i] = strings.TrimSpace(s)\n\t}\n\treturn ss\n}\n\n// Comment returns the comments for the current line.\nfunc (p *Parser) Comment() string {\n\treturn string(p.comment)\n}\n\nvar errUndefinedEnum = errors.New(\"ucd: undefined enum value\")\n\n// Enum interprets and returns field i as a value that must be one of the values\n// in enum.\nfunc (p *Parser) Enum(i int, enum ...string) string {\n\tb := p.getField(i)\n\tfor _, s := range enum {\n\t\tif bstrEq(b, s) {\n\t\t\treturn s\n\t\t}\n\t}\n\tp.setError(errUndefinedEnum)\n\treturn \"\"\n}\n\nfunc bstrEq(b []byte, s string) bool {\n\tif len(b) != len(s) {\n\t\treturn false\n\t}\n\tfor i, c := range b {\n\t\tif c != s[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/transform/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": "12fa-docker-golang/chapter3/viper/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 be returned\n\t// regardless of whether atEOF is true. If err is nil, then 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/base.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 cldr\n\nimport (\n\t\"encoding/xml\"\n\t\"regexp\"\n\t\"strconv\"\n)\n\n// Elem is implemented by every XML element.\ntype Elem interface {\n\tsetEnclosing(Elem)\n\tsetName(string)\n\tenclosing() Elem\n\n\tGetCommon() *Common\n}\n\ntype hidden struct {\n\tCharData string `xml:\",chardata\"`\n\tAlias    *struct {\n\t\tCommon\n\t\tSource string `xml:\"source,attr\"`\n\t\tPath   string `xml:\"path,attr\"`\n\t} `xml:\"alias\"`\n\tDef *struct {\n\t\tCommon\n\t\tChoice string `xml:\"choice,attr,omitempty\"`\n\t\tType   string `xml:\"type,attr,omitempty\"`\n\t} `xml:\"default\"`\n}\n\n// Common holds several of the most common attributes and sub elements\n// of an XML element.\ntype Common struct {\n\tXMLName         xml.Name\n\tname            string\n\tenclElem        Elem\n\tType            string `xml:\"type,attr,omitempty\"`\n\tReference       string `xml:\"reference,attr,omitempty\"`\n\tAlt             string `xml:\"alt,attr,omitempty\"`\n\tValidSubLocales string `xml:\"validSubLocales,attr,omitempty\"`\n\tDraft           string `xml:\"draft,attr,omitempty\"`\n\thidden\n}\n\n// Default returns the default type to select from the enclosed list\n// or \"\" if no default value is specified.\nfunc (e *Common) Default() string {\n\tif e.Def == nil {\n\t\treturn \"\"\n\t}\n\tif e.Def.Choice != \"\" {\n\t\treturn e.Def.Choice\n\t} else if e.Def.Type != \"\" {\n\t\t// Type is still used by the default element in collation.\n\t\treturn e.Def.Type\n\t}\n\treturn \"\"\n}\n\n// GetCommon returns e. It is provided such that Common implements Elem.\nfunc (e *Common) GetCommon() *Common {\n\treturn e\n}\n\n// Data returns the character data accumulated for this element.\nfunc (e *Common) Data() string {\n\te.CharData = charRe.ReplaceAllStringFunc(e.CharData, replaceUnicode)\n\treturn e.CharData\n}\n\nfunc (e *Common) setName(s string) {\n\te.name = s\n}\n\nfunc (e *Common) enclosing() Elem {\n\treturn e.enclElem\n}\n\nfunc (e *Common) setEnclosing(en Elem) {\n\te.enclElem = en\n}\n\n// Escape characters that can be escaped without further escaping the string.\nvar charRe = regexp.MustCompile(`&#x[0-9a-fA-F]*;|\\\\u[0-9a-fA-F]{4}|\\\\U[0-9a-fA-F]{8}|\\\\x[0-9a-fA-F]{2}|\\\\[0-7]{3}|\\\\[abtnvfr]`)\n\n// replaceUnicode converts hexadecimal Unicode codepoint notations to a one-rune string.\n// It assumes the input string is correctly formatted.\nfunc replaceUnicode(s string) string {\n\tif s[1] == '#' {\n\t\tr, _ := strconv.ParseInt(s[3:len(s)-1], 16, 32)\n\t\treturn string(r)\n\t}\n\tr, _, _, _ := strconv.UnquoteChar(s, 0)\n\treturn string(r)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/cldr.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//go:generate go run makexml.go -output xml.go\n\n// Package cldr provides a parser for LDML and related XML formats.\n// This package is intended to be used by the table generation tools\n// for the various internationalization-related packages.\n// As the XML types are generated from the CLDR DTD, and as the CLDR standard\n// is periodically amended, this package may change considerably over time.\n// This mostly means that data may appear and disappear between versions.\n// That is, old code should keep compiling for newer versions, but data\n// may have moved or changed.\n// CLDR version 22 is the first version supported by this package.\n// Older versions may not work.\npackage cldr // import \"golang.org/x/text/unicode/cldr\"\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\n// CLDR provides access to parsed data of the Unicode Common Locale Data Repository.\ntype CLDR struct {\n\tparent   map[string][]string\n\tlocale   map[string]*LDML\n\tresolved map[string]*LDML\n\tbcp47    *LDMLBCP47\n\tsupp     *SupplementalData\n}\n\nfunc makeCLDR() *CLDR {\n\treturn &CLDR{\n\t\tparent:   make(map[string][]string),\n\t\tlocale:   make(map[string]*LDML),\n\t\tresolved: make(map[string]*LDML),\n\t\tbcp47:    &LDMLBCP47{},\n\t\tsupp:     &SupplementalData{},\n\t}\n}\n\n// BCP47 returns the parsed BCP47 LDML data. If no such data was parsed, nil is returned.\nfunc (cldr *CLDR) BCP47() *LDMLBCP47 {\n\treturn nil\n}\n\n// Draft indicates the draft level of an element.\ntype Draft int\n\nconst (\n\tApproved Draft = iota\n\tContributed\n\tProvisional\n\tUnconfirmed\n)\n\nvar drafts = []string{\"unconfirmed\", \"provisional\", \"contributed\", \"approved\", \"\"}\n\n// ParseDraft returns the Draft value corresponding to the given string. The\n// empty string corresponds to Approved.\nfunc ParseDraft(level string) (Draft, error) {\n\tif level == \"\" {\n\t\treturn Approved, nil\n\t}\n\tfor i, s := range drafts {\n\t\tif level == s {\n\t\t\treturn Unconfirmed - Draft(i), nil\n\t\t}\n\t}\n\treturn Approved, fmt.Errorf(\"cldr: unknown draft level %q\", level)\n}\n\nfunc (d Draft) String() string {\n\treturn drafts[len(drafts)-1-int(d)]\n}\n\n// SetDraftLevel sets which draft levels to include in the evaluated LDML.\n// Any draft element for which the draft level is higher than lev will be excluded.\n// If multiple draft levels are available for a single element, the one with the\n// lowest draft level will be selected, unless preferDraft is true, in which case\n// the highest draft will be chosen.\n// It is assumed that the underlying LDML is canonicalized.\nfunc (cldr *CLDR) SetDraftLevel(lev Draft, preferDraft bool) {\n\t// TODO: implement\n\tcldr.resolved = make(map[string]*LDML)\n}\n\n// RawLDML returns the LDML XML for id in unresolved form.\n// id must be one of the strings returned by Locales.\nfunc (cldr *CLDR) RawLDML(loc string) *LDML {\n\treturn cldr.locale[loc]\n}\n\n// LDML returns the fully resolved LDML XML for loc, which must be one of\n// the strings returned by Locales.\nfunc (cldr *CLDR) LDML(loc string) (*LDML, error) {\n\treturn cldr.resolve(loc)\n}\n\n// Supplemental returns the parsed supplemental data. If no such data was parsed,\n// nil is returned.\nfunc (cldr *CLDR) Supplemental() *SupplementalData {\n\treturn cldr.supp\n}\n\n// Locales returns the locales for which there exist files.\n// Valid sublocales for which there is no file are not included.\n// The root locale is always sorted first.\nfunc (cldr *CLDR) Locales() []string {\n\tloc := []string{\"root\"}\n\thasRoot := false\n\tfor l, _ := range cldr.locale {\n\t\tif l == \"root\" {\n\t\t\thasRoot = true\n\t\t\tcontinue\n\t\t}\n\t\tloc = append(loc, l)\n\t}\n\tsort.Strings(loc[1:])\n\tif !hasRoot {\n\t\treturn loc[1:]\n\t}\n\treturn loc\n}\n\n// Get fills in the fields of x based on the XPath path.\nfunc Get(e Elem, path string) (res Elem, err error) {\n\treturn walkXPath(e, path)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/collate.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 cldr\n\nimport (\n\t\"bufio\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// RuleProcessor can be passed to Collator's Process method, which\n// parses the rules and calls the respective method for each rule found.\ntype RuleProcessor interface {\n\tReset(anchor string, before int) error\n\tInsert(level int, str, context, extend string) error\n\tIndex(id string)\n}\n\nconst (\n\t// cldrIndex is a Unicode-reserved sentinel value used to mark the start\n\t// of a grouping within an index.\n\t// We ignore any rule that starts with this rune.\n\t// See http://unicode.org/reports/tr35/#Collation_Elements for details.\n\tcldrIndex = \"\\uFDD0\"\n\n\t// specialAnchor is the format in which to represent logical reset positions,\n\t// such as \"first tertiary ignorable\".\n\tspecialAnchor = \"<%s/>\"\n)\n\n// Process parses the rules for the tailorings of this collation\n// and calls the respective methods of p for each rule found.\nfunc (c Collation) Process(p RuleProcessor) (err error) {\n\tif len(c.Cr) > 0 {\n\t\tif len(c.Cr) > 1 {\n\t\t\treturn fmt.Errorf(\"multiple cr elements, want 0 or 1\")\n\t\t}\n\t\treturn processRules(p, c.Cr[0].Data())\n\t}\n\tif c.Rules.Any != nil {\n\t\treturn c.processXML(p)\n\t}\n\treturn errors.New(\"no tailoring data\")\n}\n\n// processRules parses rules in the Collation Rule Syntax defined in\n// http://www.unicode.org/reports/tr35/tr35-collation.html#Collation_Tailorings.\nfunc processRules(p RuleProcessor, s string) (err error) {\n\tchk := func(s string, e error) string {\n\t\tif err == nil {\n\t\t\terr = e\n\t\t}\n\t\treturn s\n\t}\n\ti := 0 // Save the line number for use after the loop.\n\tscanner := bufio.NewScanner(strings.NewReader(s))\n\tfor ; scanner.Scan() && err == nil; i++ {\n\t\tfor s := skipSpace(scanner.Text()); s != \"\" && s[0] != '#'; s = skipSpace(s) {\n\t\t\tlevel := 5\n\t\t\tvar ch byte\n\t\t\tswitch ch, s = s[0], s[1:]; ch {\n\t\t\tcase '&': // followed by <anchor> or '[' <key> ']'\n\t\t\t\tif s = skipSpace(s); consume(&s, '[') {\n\t\t\t\t\ts = chk(parseSpecialAnchor(p, s))\n\t\t\t\t} else {\n\t\t\t\t\ts = chk(parseAnchor(p, 0, s))\n\t\t\t\t}\n\t\t\tcase '<': // sort relation '<'{1,4}, optionally followed by '*'.\n\t\t\t\tfor level = 1; consume(&s, '<'); level++ {\n\t\t\t\t}\n\t\t\t\tif level > 4 {\n\t\t\t\t\terr = fmt.Errorf(\"level %d > 4\", level)\n\t\t\t\t}\n\t\t\t\tfallthrough\n\t\t\tcase '=': // identity relation, optionally followed by *.\n\t\t\t\tif consume(&s, '*') {\n\t\t\t\t\ts = chk(parseSequence(p, level, s))\n\t\t\t\t} else {\n\t\t\t\t\ts = chk(parseOrder(p, level, s))\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tchk(\"\", fmt.Errorf(\"illegal operator %q\", ch))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif chk(\"\", scanner.Err()); err != nil {\n\t\treturn fmt.Errorf(\"%d: %v\", i, err)\n\t}\n\treturn nil\n}\n\n// parseSpecialAnchor parses the anchor syntax which is either of the form\n//    ['before' <level>] <anchor>\n// or\n//    [<label>]\n// The starting should already be consumed.\nfunc parseSpecialAnchor(p RuleProcessor, s string) (tail string, err error) {\n\ti := strings.IndexByte(s, ']')\n\tif i == -1 {\n\t\treturn \"\", errors.New(\"unmatched bracket\")\n\t}\n\ta := strings.TrimSpace(s[:i])\n\ts = s[i+1:]\n\tif strings.HasPrefix(a, \"before \") {\n\t\tl, err := strconv.ParseUint(skipSpace(a[len(\"before \"):]), 10, 3)\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\t\treturn parseAnchor(p, int(l), s)\n\t}\n\treturn s, p.Reset(fmt.Sprintf(specialAnchor, a), 0)\n}\n\nfunc parseAnchor(p RuleProcessor, level int, s string) (tail string, err error) {\n\tanchor, s, err := scanString(s)\n\tif err != nil {\n\t\treturn s, err\n\t}\n\treturn s, p.Reset(anchor, level)\n}\n\nfunc parseOrder(p RuleProcessor, level int, s string) (tail string, err error) {\n\tvar value, context, extend string\n\tif value, s, err = scanString(s); err != nil {\n\t\treturn s, err\n\t}\n\tif strings.HasPrefix(value, cldrIndex) {\n\t\tp.Index(value[len(cldrIndex):])\n\t\treturn\n\t}\n\tif consume(&s, '|') {\n\t\tif context, s, err = scanString(s); err != nil {\n\t\t\treturn s, errors.New(\"missing string after context\")\n\t\t}\n\t}\n\tif consume(&s, '/') {\n\t\tif extend, s, err = scanString(s); err != nil {\n\t\t\treturn s, errors.New(\"missing string after extension\")\n\t\t}\n\t}\n\treturn s, p.Insert(level, value, context, extend)\n}\n\n// scanString scans a single input string.\nfunc scanString(s string) (str, tail string, err error) {\n\tif s = skipSpace(s); s == \"\" {\n\t\treturn s, s, errors.New(\"missing string\")\n\t}\n\tbuf := [16]byte{} // small but enough to hold most cases.\n\tvalue := buf[:0]\n\tfor s != \"\" {\n\t\tif consume(&s, '\\'') {\n\t\t\ti := strings.IndexByte(s, '\\'')\n\t\t\tif i == -1 {\n\t\t\t\treturn \"\", \"\", errors.New(`unmatched single quote`)\n\t\t\t}\n\t\t\tif i == 0 {\n\t\t\t\tvalue = append(value, '\\'')\n\t\t\t} else {\n\t\t\t\tvalue = append(value, s[:i]...)\n\t\t\t}\n\t\t\ts = s[i+1:]\n\t\t\tcontinue\n\t\t}\n\t\tr, sz := utf8.DecodeRuneInString(s)\n\t\tif unicode.IsSpace(r) || strings.ContainsRune(\"&<=#\", r) {\n\t\t\tbreak\n\t\t}\n\t\tvalue = append(value, s[:sz]...)\n\t\ts = s[sz:]\n\t}\n\treturn string(value), skipSpace(s), nil\n}\n\nfunc parseSequence(p RuleProcessor, level int, s string) (tail string, err error) {\n\tif s = skipSpace(s); s == \"\" {\n\t\treturn s, errors.New(\"empty sequence\")\n\t}\n\tlast := rune(0)\n\tfor s != \"\" {\n\t\tr, sz := utf8.DecodeRuneInString(s)\n\t\ts = s[sz:]\n\n\t\tif r == '-' {\n\t\t\t// We have a range. The first element was already written.\n\t\t\tif last == 0 {\n\t\t\t\treturn s, errors.New(\"range without starter value\")\n\t\t\t}\n\t\t\tr, sz = utf8.DecodeRuneInString(s)\n\t\t\ts = s[sz:]\n\t\t\tif r == utf8.RuneError || r < last {\n\t\t\t\treturn s, fmt.Errorf(\"invalid range %q-%q\", last, r)\n\t\t\t}\n\t\t\tfor i := last + 1; i <= r; i++ {\n\t\t\t\tif err := p.Insert(level, string(i), \"\", \"\"); err != nil {\n\t\t\t\t\treturn s, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tlast = 0\n\t\t\tcontinue\n\t\t}\n\n\t\tif unicode.IsSpace(r) || unicode.IsPunct(r) {\n\t\t\tbreak\n\t\t}\n\n\t\t// normal case\n\t\tif err := p.Insert(level, string(r), \"\", \"\"); err != nil {\n\t\t\treturn s, err\n\t\t}\n\t\tlast = r\n\t}\n\treturn s, nil\n}\n\nfunc skipSpace(s string) string {\n\treturn strings.TrimLeftFunc(s, unicode.IsSpace)\n}\n\n// consumes returns whether the next byte is ch. If so, it gobbles it by\n// updating s.\nfunc consume(s *string, ch byte) (ok bool) {\n\tif *s == \"\" || (*s)[0] != ch {\n\t\treturn false\n\t}\n\t*s = (*s)[1:]\n\treturn true\n}\n\n// The following code parses Collation rules of CLDR version 24 and before.\n\nvar lmap = map[byte]int{\n\t'p': 1,\n\t's': 2,\n\t't': 3,\n\t'i': 5,\n}\n\ntype rulesElem struct {\n\tRules struct {\n\t\tCommon\n\t\tAny []*struct {\n\t\t\tXMLName xml.Name\n\t\t\trule\n\t\t} `xml:\",any\"`\n\t} `xml:\"rules\"`\n}\n\ntype rule struct {\n\tValue  string `xml:\",chardata\"`\n\tBefore string `xml:\"before,attr\"`\n\tAny    []*struct {\n\t\tXMLName xml.Name\n\t\trule\n\t} `xml:\",any\"`\n}\n\nvar emptyValueError = errors.New(\"cldr: empty rule value\")\n\nfunc (r *rule) value() (string, error) {\n\t// Convert hexadecimal Unicode codepoint notation to a string.\n\ts := charRe.ReplaceAllStringFunc(r.Value, replaceUnicode)\n\tr.Value = s\n\tif s == \"\" {\n\t\tif len(r.Any) != 1 {\n\t\t\treturn \"\", emptyValueError\n\t\t}\n\t\tr.Value = fmt.Sprintf(specialAnchor, r.Any[0].XMLName.Local)\n\t\tr.Any = nil\n\t} else if len(r.Any) != 0 {\n\t\treturn \"\", fmt.Errorf(\"cldr: XML elements found in collation rule: %v\", r.Any)\n\t}\n\treturn r.Value, nil\n}\n\nfunc (r rule) process(p RuleProcessor, name, context, extend string) error {\n\tv, err := r.value()\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch name {\n\tcase \"p\", \"s\", \"t\", \"i\":\n\t\tif strings.HasPrefix(v, cldrIndex) {\n\t\t\tp.Index(v[len(cldrIndex):])\n\t\t\treturn nil\n\t\t}\n\t\tif err := p.Insert(lmap[name[0]], v, context, extend); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"pc\", \"sc\", \"tc\", \"ic\":\n\t\tlevel := lmap[name[0]]\n\t\tfor _, s := range v {\n\t\t\tif err := p.Insert(level, string(s), context, extend); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"cldr: unsupported tag: %q\", name)\n\t}\n\treturn nil\n}\n\n// processXML parses the format of CLDR versions 24 and older.\nfunc (c Collation) processXML(p RuleProcessor) (err error) {\n\t// Collation is generated and defined in xml.go.\n\tvar v string\n\tfor _, r := range c.Rules.Any {\n\t\tswitch r.XMLName.Local {\n\t\tcase \"reset\":\n\t\t\tlevel := 0\n\t\t\tswitch r.Before {\n\t\t\tcase \"primary\", \"1\":\n\t\t\t\tlevel = 1\n\t\t\tcase \"secondary\", \"2\":\n\t\t\t\tlevel = 2\n\t\t\tcase \"tertiary\", \"3\":\n\t\t\t\tlevel = 3\n\t\t\tcase \"\":\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"cldr: unknown level %q\", r.Before)\n\t\t\t}\n\t\t\tv, err = r.value()\n\t\t\tif err == nil {\n\t\t\t\terr = p.Reset(v, level)\n\t\t\t}\n\t\tcase \"x\":\n\t\t\tvar context, extend string\n\t\t\tfor _, r1 := range r.Any {\n\t\t\t\tv, err = r1.value()\n\t\t\t\tswitch r1.XMLName.Local {\n\t\t\t\tcase \"context\":\n\t\t\t\t\tcontext = v\n\t\t\t\tcase \"extend\":\n\t\t\t\t\textend = v\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, r1 := range r.Any {\n\t\t\t\tif t := r1.XMLName.Local; t == \"context\" || t == \"extend\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tr1.rule.process(p, r1.XMLName.Local, context, extend)\n\t\t\t}\n\t\tdefault:\n\t\t\terr = r.rule.process(p, r.XMLName.Local, \"\", \"\")\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/decode.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 cldr\n\nimport (\n\t\"archive/zip\"\n\t\"bytes\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n)\n\n// A Decoder loads an archive of CLDR data.\ntype Decoder struct {\n\tdirFilter     []string\n\tsectionFilter []string\n\tloader        Loader\n\tcldr          *CLDR\n\tcurLocale     string\n}\n\n// SetSectionFilter takes a list top-level LDML element names to which\n// evaluation of LDML should be limited.  It automatically calls SetDirFilter.\nfunc (d *Decoder) SetSectionFilter(filter ...string) {\n\td.sectionFilter = filter\n\t// TODO: automatically set dir filter\n}\n\n// SetDirFilter limits the loading of LDML XML files of the specied directories.\n// Note that sections may be split across directories differently for different CLDR versions.\n// For more robust code, use SetSectionFilter.\nfunc (d *Decoder) SetDirFilter(dir ...string) {\n\td.dirFilter = dir\n}\n\n// A Loader provides access to the files of a CLDR archive.\ntype Loader interface {\n\tLen() int\n\tPath(i int) string\n\tReader(i int) (io.ReadCloser, error)\n}\n\nvar fileRe = regexp.MustCompile(\".*/(.*)/(.*)\\\\.xml\")\n\n// Decode loads and decodes the files represented by l.\nfunc (d *Decoder) Decode(l Loader) (cldr *CLDR, err error) {\n\td.cldr = makeCLDR()\n\tfor i := 0; i < l.Len(); i++ {\n\t\tfname := l.Path(i)\n\t\tif m := fileRe.FindStringSubmatch(fname); m != nil {\n\t\t\tif len(d.dirFilter) > 0 && !in(d.dirFilter, m[1]) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar r io.Reader\n\t\t\tif r, err = l.Reader(i); err == nil {\n\t\t\t\terr = d.decode(m[1], m[2], r)\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\td.cldr.finalize(d.sectionFilter)\n\treturn d.cldr, nil\n}\n\nfunc (d *Decoder) decode(dir, id string, r io.Reader) error {\n\tvar v interface{}\n\tvar l *LDML\n\tcldr := d.cldr\n\tswitch {\n\tcase dir == \"supplemental\":\n\t\tv = cldr.supp\n\tcase dir == \"transforms\":\n\t\treturn nil\n\tcase dir == \"bcp47\":\n\t\tv = cldr.bcp47\n\tcase dir == \"validity\":\n\t\treturn nil\n\tdefault:\n\t\tok := false\n\t\tif v, ok = cldr.locale[id]; !ok {\n\t\t\tl = &LDML{}\n\t\t\tv, cldr.locale[id] = l, l\n\t\t}\n\t}\n\tx := xml.NewDecoder(r)\n\tif err := x.Decode(v); err != nil {\n\t\tlog.Printf(\"%s/%s: %v\", dir, id, err)\n\t\treturn err\n\t}\n\tif l != nil {\n\t\tif l.Identity == nil {\n\t\t\treturn fmt.Errorf(\"%s/%s: missing identity element\", dir, id)\n\t\t}\n\t\t// TODO: verify when CLDR bug http://unicode.org/cldr/trac/ticket/8970\n\t\t// is resolved.\n\t\t// path := strings.Split(id, \"_\")\n\t\t// if lang := l.Identity.Language.Type; lang != path[0] {\n\t\t// \treturn fmt.Errorf(\"%s/%s: language was %s; want %s\", dir, id, lang, path[0])\n\t\t// }\n\t}\n\treturn nil\n}\n\ntype pathLoader []string\n\nfunc makePathLoader(path string) (pl pathLoader, err error) {\n\terr = filepath.Walk(path, func(path string, _ os.FileInfo, err error) error {\n\t\tpl = append(pl, path)\n\t\treturn err\n\t})\n\treturn pl, err\n}\n\nfunc (pl pathLoader) Len() int {\n\treturn len(pl)\n}\n\nfunc (pl pathLoader) Path(i int) string {\n\treturn pl[i]\n}\n\nfunc (pl pathLoader) Reader(i int) (io.ReadCloser, error) {\n\treturn os.Open(pl[i])\n}\n\n// DecodePath loads CLDR data from the given path.\nfunc (d *Decoder) DecodePath(path string) (cldr *CLDR, err error) {\n\tloader, err := makePathLoader(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn d.Decode(loader)\n}\n\ntype zipLoader struct {\n\tr *zip.Reader\n}\n\nfunc (zl zipLoader) Len() int {\n\treturn len(zl.r.File)\n}\n\nfunc (zl zipLoader) Path(i int) string {\n\treturn zl.r.File[i].Name\n}\n\nfunc (zl zipLoader) Reader(i int) (io.ReadCloser, error) {\n\treturn zl.r.File[i].Open()\n}\n\n// DecodeZip loads CLDR data from the zip archive for which r is the source.\nfunc (d *Decoder) DecodeZip(r io.Reader) (cldr *CLDR, err error) {\n\tbuffer, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tarchive, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer)))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn d.Decode(zipLoader{archive})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/makexml.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 ignore\n\n// This tool generates types for the various XML formats of CLDR.\npackage main\n\nimport (\n\t\"archive/zip\"\n\t\"bytes\"\n\t\"encoding/xml\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"golang.org/x/text/internal/gen\"\n)\n\nvar outputFile = flag.String(\"output\", \"xml.go\", \"output file name\")\n\nfunc main() {\n\tflag.Parse()\n\n\tr := gen.OpenCLDRCoreZip()\n\tbuffer, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\tlog.Fatal(\"Could not read zip file\")\n\t}\n\tr.Close()\n\tz, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer)))\n\tif err != nil {\n\t\tlog.Fatalf(\"Could not read zip archive: %v\", err)\n\t}\n\n\tvar buf bytes.Buffer\n\n\tversion := gen.CLDRVersion()\n\n\tfor _, dtd := range files {\n\t\tfor _, f := range z.File {\n\t\t\tif strings.HasSuffix(f.Name, dtd.file+\".dtd\") {\n\t\t\t\tr, err := f.Open()\n\t\t\t\tfailOnError(err)\n\n\t\t\t\tb := makeBuilder(&buf, dtd)\n\t\t\t\tb.parseDTD(r)\n\t\t\t\tb.resolve(b.index[dtd.top[0]])\n\t\t\t\tb.write()\n\t\t\t\tif b.version != \"\" && version != b.version {\n\t\t\t\t\tprintln(f.Name)\n\t\t\t\t\tlog.Fatalf(\"main: inconsistent versions: found %s; want %s\", b.version, version)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tfmt.Fprintln(&buf, \"// Version is the version of CLDR from which the XML definitions are generated.\")\n\tfmt.Fprintf(&buf, \"const Version = %q\\n\", version)\n\n\tgen.WriteGoFile(*outputFile, \"cldr\", buf.Bytes())\n}\n\nfunc failOnError(err error) {\n\tif err != nil {\n\t\tlog.New(os.Stderr, \"\", log.Lshortfile).Output(2, err.Error())\n\t\tos.Exit(1)\n\t}\n}\n\n// configuration data per DTD type\ntype dtd struct {\n\tfile string   // base file name\n\troot string   // Go name of the root XML element\n\ttop  []string // create a different type for this section\n\n\tskipElem    []string // hard-coded or deprecated elements\n\tskipAttr    []string // attributes to exclude\n\tpredefined  []string // hard-coded elements exist of the form <name>Elem\n\tforceRepeat []string // elements to make slices despite DTD\n}\n\nvar files = []dtd{\n\t{\n\t\tfile: \"ldmlBCP47\",\n\t\troot: \"LDMLBCP47\",\n\t\ttop:  []string{\"ldmlBCP47\"},\n\t\tskipElem: []string{\n\t\t\t\"cldrVersion\", // deprecated, not used\n\t\t},\n\t},\n\t{\n\t\tfile: \"ldmlSupplemental\",\n\t\troot: \"SupplementalData\",\n\t\ttop:  []string{\"supplementalData\"},\n\t\tskipElem: []string{\n\t\t\t\"cldrVersion\", // deprecated, not used\n\t\t},\n\t\tforceRepeat: []string{\n\t\t\t\"plurals\", // data defined in plurals.xml and ordinals.xml\n\t\t},\n\t},\n\t{\n\t\tfile: \"ldml\",\n\t\troot: \"LDML\",\n\t\ttop: []string{\n\t\t\t\"ldml\", \"collation\", \"calendar\", \"timeZoneNames\", \"localeDisplayNames\", \"numbers\",\n\t\t},\n\t\tskipElem: []string{\n\t\t\t\"cp\",       // not used anywhere\n\t\t\t\"special\",  // not used anywhere\n\t\t\t\"fallback\", // deprecated, not used\n\t\t\t\"alias\",    // in Common\n\t\t\t\"default\",  // in Common\n\t\t},\n\t\tskipAttr: []string{\n\t\t\t\"hiraganaQuarternary\", // typo in DTD, correct version included as well\n\t\t},\n\t\tpredefined: []string{\"rules\"},\n\t},\n}\n\nvar comments = map[string]string{\n\t\"ldmlBCP47\": `\n// LDMLBCP47 holds information on allowable values for various variables in LDML.\n`,\n\t\"supplementalData\": `\n// SupplementalData holds information relevant for internationalization\n// and proper use of CLDR, but that is not contained in the locale hierarchy.\n`,\n\t\"ldml\": `\n// LDML is the top-level type for locale-specific data.\n`,\n\t\"collation\": `\n// Collation contains rules that specify a certain sort-order,\n// as a tailoring of the root order. \n// The parsed rules are obtained by passing a RuleProcessor to Collation's\n// Process method.\n`,\n\t\"calendar\": `\n// Calendar specifies the fields used for formatting and parsing dates and times.\n// The month and quarter names are identified numerically, starting at 1.\n// The day (of the week) names are identified with short strings, since there is\n// no universally-accepted numeric designation.\n`,\n\t\"dates\": `\n// Dates contains information regarding the format and parsing of dates and times.\n`,\n\t\"localeDisplayNames\": `\n// LocaleDisplayNames specifies localized display names for for scripts, languages,\n// countries, currencies, and variants.\n`,\n\t\"numbers\": `\n// Numbers supplies information for formatting and parsing numbers and currencies.\n`,\n}\n\ntype element struct {\n\tname      string // XML element name\n\tcategory  string // elements contained by this element\n\tsignature string // category + attrKey*\n\n\tattr []*attribute // attributes supported by this element.\n\tsub  []struct {   // parsed and evaluated sub elements of this element.\n\t\te      *element\n\t\trepeat bool // true if the element needs to be a slice\n\t}\n\n\tresolved bool // prevent multiple resolutions of this element.\n}\n\ntype attribute struct {\n\tname string\n\tkey  string\n\tlist []string\n\n\ttag string // Go tag\n}\n\nvar (\n\treHead  = regexp.MustCompile(` *(\\w+) +([\\w\\-]+)`)\n\treAttr  = regexp.MustCompile(` *(\\w+) *(?:(\\w+)|\\(([\\w\\- \\|]+)\\)) *(?:#([A-Z]*) *(?:\\\"([\\.\\d+])\\\")?)? *(\"[\\w\\-:]*\")?`)\n\treElem  = regexp.MustCompile(`^ *(EMPTY|ANY|\\(.*\\)[\\*\\+\\?]?) *$`)\n\treToken = regexp.MustCompile(`\\w\\-`)\n)\n\n// builder is used to read in the DTD files from CLDR and generate Go code\n// to be used with the encoding/xml package.\ntype builder struct {\n\tw       io.Writer\n\tindex   map[string]*element\n\telem    []*element\n\tinfo    dtd\n\tversion string\n}\n\nfunc makeBuilder(w io.Writer, d dtd) builder {\n\treturn builder{\n\t\tw:     w,\n\t\tindex: make(map[string]*element),\n\t\telem:  []*element{},\n\t\tinfo:  d,\n\t}\n}\n\n// parseDTD parses a DTD file.\nfunc (b *builder) parseDTD(r io.Reader) {\n\tfor d := xml.NewDecoder(r); ; {\n\t\tt, err := d.Token()\n\t\tif t == nil {\n\t\t\tbreak\n\t\t}\n\t\tfailOnError(err)\n\t\tdir, ok := t.(xml.Directive)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tm := reHead.FindSubmatch(dir)\n\t\tdir = dir[len(m[0]):]\n\t\tename := string(m[2])\n\t\tel, elementFound := b.index[ename]\n\t\tswitch string(m[1]) {\n\t\tcase \"ELEMENT\":\n\t\t\tif elementFound {\n\t\t\t\tlog.Fatal(\"parseDTD: duplicate entry for element %q\", ename)\n\t\t\t}\n\t\t\tm := reElem.FindSubmatch(dir)\n\t\t\tif m == nil {\n\t\t\t\tlog.Fatalf(\"parseDTD: invalid element %q\", string(dir))\n\t\t\t}\n\t\t\tif len(m[0]) != len(dir) {\n\t\t\t\tlog.Fatal(\"parseDTD: invalid element %q\", string(dir), len(dir), len(m[0]), string(m[0]))\n\t\t\t}\n\t\t\ts := string(m[1])\n\t\t\tel = &element{\n\t\t\t\tname:     ename,\n\t\t\t\tcategory: s,\n\t\t\t}\n\t\t\tb.index[ename] = el\n\t\tcase \"ATTLIST\":\n\t\t\tif !elementFound {\n\t\t\t\tlog.Fatalf(\"parseDTD: unknown element %q\", ename)\n\t\t\t}\n\t\t\ts := string(dir)\n\t\t\tm := reAttr.FindStringSubmatch(s)\n\t\t\tif m == nil {\n\t\t\t\tlog.Fatal(fmt.Errorf(\"parseDTD: invalid attribute %q\", string(dir)))\n\t\t\t}\n\t\t\tif m[4] == \"FIXED\" {\n\t\t\t\tb.version = m[5]\n\t\t\t} else {\n\t\t\t\tswitch m[1] {\n\t\t\t\tcase \"draft\", \"references\", \"alt\", \"validSubLocales\", \"standard\" /* in Common */ :\n\t\t\t\tcase \"type\", \"choice\":\n\t\t\t\tdefault:\n\t\t\t\t\tel.attr = append(el.attr, &attribute{\n\t\t\t\t\t\tname: m[1],\n\t\t\t\t\t\tkey:  s,\n\t\t\t\t\t\tlist: reToken.FindAllString(m[3], -1),\n\t\t\t\t\t})\n\t\t\t\t\tel.signature = fmt.Sprintf(\"%s=%s+%s\", el.signature, m[1], m[2])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar reCat = regexp.MustCompile(`[ ,\\|]*(?:(\\(|\\)|\\#?[\\w_-]+)([\\*\\+\\?]?))?`)\n\n// resolve takes a parsed element and converts it into structured data\n// that can be used to generate the XML code.\nfunc (b *builder) resolve(e *element) {\n\tif e.resolved {\n\t\treturn\n\t}\n\tb.elem = append(b.elem, e)\n\te.resolved = true\n\ts := e.category\n\tfound := make(map[string]bool)\n\tsequenceStart := []int{}\n\tfor len(s) > 0 {\n\t\tm := reCat.FindStringSubmatch(s)\n\t\tif m == nil {\n\t\t\tlog.Fatalf(\"%s: invalid category string %q\", e.name, s)\n\t\t}\n\t\trepeat := m[2] == \"*\" || m[2] == \"+\" || in(b.info.forceRepeat, m[1])\n\t\tswitch m[1] {\n\t\tcase \"\":\n\t\tcase \"(\":\n\t\t\tsequenceStart = append(sequenceStart, len(e.sub))\n\t\tcase \")\":\n\t\t\tif len(sequenceStart) == 0 {\n\t\t\t\tlog.Fatalf(\"%s: unmatched closing parenthesis\", e.name)\n\t\t\t}\n\t\t\tfor i := sequenceStart[len(sequenceStart)-1]; i < len(e.sub); i++ {\n\t\t\t\te.sub[i].repeat = e.sub[i].repeat || repeat\n\t\t\t}\n\t\t\tsequenceStart = sequenceStart[:len(sequenceStart)-1]\n\t\tdefault:\n\t\t\tif in(b.info.skipElem, m[1]) {\n\t\t\t} else if sub, ok := b.index[m[1]]; ok {\n\t\t\t\tif !found[sub.name] {\n\t\t\t\t\te.sub = append(e.sub, struct {\n\t\t\t\t\t\te      *element\n\t\t\t\t\t\trepeat bool\n\t\t\t\t\t}{sub, repeat})\n\t\t\t\t\tfound[sub.name] = true\n\t\t\t\t\tb.resolve(sub)\n\t\t\t\t}\n\t\t\t} else if m[1] == \"#PCDATA\" || m[1] == \"ANY\" {\n\t\t\t} else if m[1] != \"EMPTY\" {\n\t\t\t\tlog.Fatalf(\"resolve:%s: element %q not found\", e.name, m[1])\n\t\t\t}\n\t\t}\n\t\ts = s[len(m[0]):]\n\t}\n}\n\n// return true if s is contained in set.\nfunc in(set []string, s string) bool {\n\tfor _, v := range set {\n\t\tif v == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nvar repl = strings.NewReplacer(\"-\", \" \", \"_\", \" \")\n\n// title puts the first character or each character following '_' in title case and\n// removes all occurrences of '_'.\nfunc title(s string) string {\n\treturn strings.Replace(strings.Title(repl.Replace(s)), \" \", \"\", -1)\n}\n\n// writeElem generates Go code for a single element, recursively.\nfunc (b *builder) writeElem(tab int, e *element) {\n\tp := func(f string, x ...interface{}) {\n\t\tf = strings.Replace(f, \"\\n\", \"\\n\"+strings.Repeat(\"\\t\", tab), -1)\n\t\tfmt.Fprintf(b.w, f, x...)\n\t}\n\tif len(e.sub) == 0 && len(e.attr) == 0 {\n\t\tp(\"Common\")\n\t\treturn\n\t}\n\tp(\"struct {\")\n\ttab++\n\tp(\"\\nCommon\")\n\tfor _, attr := range e.attr {\n\t\tif !in(b.info.skipAttr, attr.name) {\n\t\t\tp(\"\\n%s string `xml:\\\"%s,attr\\\"`\", title(attr.name), attr.name)\n\t\t}\n\t}\n\tfor _, sub := range e.sub {\n\t\tif in(b.info.predefined, sub.e.name) {\n\t\t\tp(\"\\n%sElem\", sub.e.name)\n\t\t\tcontinue\n\t\t}\n\t\tif in(b.info.skipElem, sub.e.name) {\n\t\t\tcontinue\n\t\t}\n\t\tp(\"\\n%s \", title(sub.e.name))\n\t\tif sub.repeat {\n\t\t\tp(\"[]\")\n\t\t}\n\t\tp(\"*\")\n\t\tif in(b.info.top, sub.e.name) {\n\t\t\tp(title(sub.e.name))\n\t\t} else {\n\t\t\tb.writeElem(tab, sub.e)\n\t\t}\n\t\tp(\" `xml:\\\"%s\\\"`\", sub.e.name)\n\t}\n\ttab--\n\tp(\"\\n}\")\n}\n\n// write generates the Go XML code.\nfunc (b *builder) write() {\n\tfor i, name := range b.info.top {\n\t\te := b.index[name]\n\t\tif e != nil {\n\t\t\tfmt.Fprintf(b.w, comments[name])\n\t\t\tname := title(e.name)\n\t\t\tif i == 0 {\n\t\t\t\tname = b.info.root\n\t\t\t}\n\t\t\tfmt.Fprintf(b.w, \"type %s \", name)\n\t\t\tb.writeElem(0, e)\n\t\t\tfmt.Fprint(b.w, \"\\n\")\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/resolve.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 cldr\n\n// This file implements the various inheritance constructs defined by LDML.\n// See http://www.unicode.org/reports/tr35/#Inheritance_and_Validity\n// for more details.\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// fieldIter iterates over fields in a struct. It includes\n// fields of embedded structs.\ntype fieldIter struct {\n\tv        reflect.Value\n\tindex, n []int\n}\n\nfunc iter(v reflect.Value) fieldIter {\n\tif v.Kind() != reflect.Struct {\n\t\tlog.Panicf(\"value %v must be a struct\", v)\n\t}\n\ti := fieldIter{\n\t\tv:     v,\n\t\tindex: []int{0},\n\t\tn:     []int{v.NumField()},\n\t}\n\ti.descent()\n\treturn i\n}\n\nfunc (i *fieldIter) descent() {\n\tfor f := i.field(); f.Anonymous && f.Type.NumField() > 0; f = i.field() {\n\t\ti.index = append(i.index, 0)\n\t\ti.n = append(i.n, f.Type.NumField())\n\t}\n}\n\nfunc (i *fieldIter) done() bool {\n\treturn len(i.index) == 1 && i.index[0] >= i.n[0]\n}\n\nfunc skip(f reflect.StructField) bool {\n\treturn !f.Anonymous && (f.Name[0] < 'A' || f.Name[0] > 'Z')\n}\n\nfunc (i *fieldIter) next() {\n\tfor {\n\t\tk := len(i.index) - 1\n\t\ti.index[k]++\n\t\tif i.index[k] < i.n[k] {\n\t\t\tif !skip(i.field()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif k == 0 {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ti.index = i.index[:k]\n\t\t\ti.n = i.n[:k]\n\t\t}\n\t}\n\ti.descent()\n}\n\nfunc (i *fieldIter) value() reflect.Value {\n\treturn i.v.FieldByIndex(i.index)\n}\n\nfunc (i *fieldIter) field() reflect.StructField {\n\treturn i.v.Type().FieldByIndex(i.index)\n}\n\ntype visitor func(v reflect.Value) error\n\nvar stopDescent = fmt.Errorf(\"do not recurse\")\n\nfunc (f visitor) visit(x interface{}) error {\n\treturn f.visitRec(reflect.ValueOf(x))\n}\n\n// visit recursively calls f on all nodes in v.\nfunc (f visitor) visitRec(v reflect.Value) error {\n\tif v.Kind() == reflect.Ptr {\n\t\tif v.IsNil() {\n\t\t\treturn nil\n\t\t}\n\t\treturn f.visitRec(v.Elem())\n\t}\n\tif err := f(v); err != nil {\n\t\tif err == stopDescent {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\tswitch v.Kind() {\n\tcase reflect.Struct:\n\t\tfor i := iter(v); !i.done(); i.next() {\n\t\t\tif err := f.visitRec(i.value()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase reflect.Slice:\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tif err := f.visitRec(v.Index(i)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// getPath is used for error reporting purposes only.\nfunc getPath(e Elem) string {\n\tif e == nil {\n\t\treturn \"<nil>\"\n\t}\n\tif e.enclosing() == nil {\n\t\treturn e.GetCommon().name\n\t}\n\tif e.GetCommon().Type == \"\" {\n\t\treturn fmt.Sprintf(\"%s.%s\", getPath(e.enclosing()), e.GetCommon().name)\n\t}\n\treturn fmt.Sprintf(\"%s.%s[type=%s]\", getPath(e.enclosing()), e.GetCommon().name, e.GetCommon().Type)\n}\n\n// xmlName returns the xml name of the element or attribute\nfunc xmlName(f reflect.StructField) (name string, attr bool) {\n\ttags := strings.Split(f.Tag.Get(\"xml\"), \",\")\n\tfor _, s := range tags {\n\t\tattr = attr || s == \"attr\"\n\t}\n\treturn tags[0], attr\n}\n\nfunc findField(v reflect.Value, key string) (reflect.Value, error) {\n\tv = reflect.Indirect(v)\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tif n, _ := xmlName(i.field()); n == key {\n\t\t\treturn i.value(), nil\n\t\t}\n\t}\n\treturn reflect.Value{}, fmt.Errorf(\"cldr: no field %q in element %#v\", key, v.Interface())\n}\n\nvar xpathPart = regexp.MustCompile(`(\\pL+)(?:\\[@(\\pL+)='([\\w-]+)'\\])?`)\n\nfunc walkXPath(e Elem, path string) (res Elem, err error) {\n\tfor _, c := range strings.Split(path, \"/\") {\n\t\tif c == \"..\" {\n\t\t\tif e = e.enclosing(); e == nil {\n\t\t\t\tpanic(\"path ..\")\n\t\t\t\treturn nil, fmt.Errorf(`cldr: \"..\" moves past root in path %q`, path)\n\t\t\t}\n\t\t\tcontinue\n\t\t} else if c == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tm := xpathPart.FindStringSubmatch(c)\n\t\tif len(m) == 0 || len(m[0]) != len(c) {\n\t\t\treturn nil, fmt.Errorf(\"cldr: syntax error in path component %q\", c)\n\t\t}\n\t\tv, err := findField(reflect.ValueOf(e), m[1])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch v.Kind() {\n\t\tcase reflect.Slice:\n\t\t\ti := 0\n\t\t\tif m[2] != \"\" || v.Len() > 1 {\n\t\t\t\tif m[2] == \"\" {\n\t\t\t\t\tm[2] = \"type\"\n\t\t\t\t\tif m[3] = e.GetCommon().Default(); m[3] == \"\" {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"cldr: type selector or default value needed for element %s\", m[1])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor ; i < v.Len(); i++ {\n\t\t\t\t\tvi := v.Index(i)\n\t\t\t\t\tkey, err := findField(vi.Elem(), m[2])\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\tkey = reflect.Indirect(key)\n\t\t\t\t\tif key.Kind() == reflect.String && key.String() == m[3] {\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 i == v.Len() || v.Index(i).IsNil() {\n\t\t\t\treturn nil, fmt.Errorf(\"no %s found with %s==%s\", m[1], m[2], m[3])\n\t\t\t}\n\t\t\te = v.Index(i).Interface().(Elem)\n\t\tcase reflect.Ptr:\n\t\t\tif v.IsNil() {\n\t\t\t\treturn nil, fmt.Errorf(\"cldr: element %q not found within element %q\", m[1], e.GetCommon().name)\n\t\t\t}\n\t\t\tvar ok bool\n\t\t\tif e, ok = v.Interface().(Elem); !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"cldr: %q is not an XML element\", m[1])\n\t\t\t} else if m[2] != \"\" || m[3] != \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"cldr: no type selector allowed for element %s\", m[1])\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"cldr: %q is not an XML element\", m[1])\n\t\t}\n\t}\n\treturn e, nil\n}\n\nconst absPrefix = \"//ldml/\"\n\nfunc (cldr *CLDR) resolveAlias(e Elem, src, path string) (res Elem, err error) {\n\tif src != \"locale\" {\n\t\tif !strings.HasPrefix(path, absPrefix) {\n\t\t\treturn nil, fmt.Errorf(\"cldr: expected absolute path, found %q\", path)\n\t\t}\n\t\tpath = path[len(absPrefix):]\n\t\tif e, err = cldr.resolve(src); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn walkXPath(e, path)\n}\n\nfunc (cldr *CLDR) resolveAndMergeAlias(e Elem) error {\n\talias := e.GetCommon().Alias\n\tif alias == nil {\n\t\treturn nil\n\t}\n\ta, err := cldr.resolveAlias(e, alias.Source, alias.Path)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"%v: error evaluating path %q: %v\", getPath(e), alias.Path, err)\n\t}\n\t// Ensure alias node was already evaluated. TODO: avoid double evaluation.\n\terr = cldr.resolveAndMergeAlias(a)\n\tv := reflect.ValueOf(e).Elem()\n\tfor i := iter(reflect.ValueOf(a).Elem()); !i.done(); i.next() {\n\t\tif vv := i.value(); vv.Kind() != reflect.Ptr || !vv.IsNil() {\n\t\t\tif _, attr := xmlName(i.field()); !attr {\n\t\t\t\tv.FieldByIndex(i.index).Set(vv)\n\t\t\t}\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (cldr *CLDR) aliasResolver() visitor {\n\treturn func(v reflect.Value) (err error) {\n\t\tif e, ok := v.Addr().Interface().(Elem); ok {\n\t\t\terr = cldr.resolveAndMergeAlias(e)\n\t\t\tif err == nil && blocking[e.GetCommon().name] {\n\t\t\t\treturn stopDescent\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n}\n\n// elements within blocking elements do not inherit.\n// Taken from CLDR's supplementalMetaData.xml.\nvar blocking = map[string]bool{\n\t\"identity\":         true,\n\t\"supplementalData\": true,\n\t\"cldrTest\":         true,\n\t\"collation\":        true,\n\t\"transform\":        true,\n}\n\n// Distinguishing attributes affect inheritance; two elements with different\n// distinguishing attributes are treated as different for purposes of inheritance,\n// except when such attributes occur in the indicated elements.\n// Taken from CLDR's supplementalMetaData.xml.\nvar distinguishing = map[string][]string{\n\t\"key\":        nil,\n\t\"request_id\": nil,\n\t\"id\":         nil,\n\t\"registry\":   nil,\n\t\"alt\":        nil,\n\t\"iso4217\":    nil,\n\t\"iso3166\":    nil,\n\t\"mzone\":      nil,\n\t\"from\":       nil,\n\t\"to\":         nil,\n\t\"type\": []string{\n\t\t\"abbreviationFallback\",\n\t\t\"default\",\n\t\t\"mapping\",\n\t\t\"measurementSystem\",\n\t\t\"preferenceOrdering\",\n\t},\n\t\"numberSystem\": nil,\n}\n\nfunc in(set []string, s string) bool {\n\tfor _, v := range set {\n\t\tif v == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// attrKey computes a key based on the distinguishable attributes of\n// an element and it's values.\nfunc attrKey(v reflect.Value, exclude ...string) string {\n\tparts := []string{}\n\tename := v.Interface().(Elem).GetCommon().name\n\tv = v.Elem()\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tif name, attr := xmlName(i.field()); attr {\n\t\t\tif except, ok := distinguishing[name]; ok && !in(exclude, name) && !in(except, ename) {\n\t\t\t\tv := i.value()\n\t\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\t\tv = v.Elem()\n\t\t\t\t}\n\t\t\t\tif v.IsValid() {\n\t\t\t\t\tparts = append(parts, fmt.Sprintf(\"%s=%s\", name, v.String()))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(parts)\n\treturn strings.Join(parts, \";\")\n}\n\n// Key returns a key for e derived from all distinguishing attributes\n// except those specified by exclude.\nfunc Key(e Elem, exclude ...string) string {\n\treturn attrKey(reflect.ValueOf(e), exclude...)\n}\n\n// linkEnclosing sets the enclosing element as well as the name\n// for all sub-elements of child, recursively.\nfunc linkEnclosing(parent, child Elem) {\n\tchild.setEnclosing(parent)\n\tv := reflect.ValueOf(child).Elem()\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tvf := i.value()\n\t\tif vf.Kind() == reflect.Slice {\n\t\t\tfor j := 0; j < vf.Len(); j++ {\n\t\t\t\tlinkEnclosing(child, vf.Index(j).Interface().(Elem))\n\t\t\t}\n\t\t} else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct {\n\t\t\tlinkEnclosing(child, vf.Interface().(Elem))\n\t\t}\n\t}\n}\n\nfunc setNames(e Elem, name string) {\n\te.setName(name)\n\tv := reflect.ValueOf(e).Elem()\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tvf := i.value()\n\t\tname, _ = xmlName(i.field())\n\t\tif vf.Kind() == reflect.Slice {\n\t\t\tfor j := 0; j < vf.Len(); j++ {\n\t\t\t\tsetNames(vf.Index(j).Interface().(Elem), name)\n\t\t\t}\n\t\t} else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct {\n\t\t\tsetNames(vf.Interface().(Elem), name)\n\t\t}\n\t}\n}\n\n// deepCopy copies elements of v recursively.  All elements of v that may\n// be modified by inheritance are explicitly copied.\nfunc deepCopy(v reflect.Value) reflect.Value {\n\tswitch v.Kind() {\n\tcase reflect.Ptr:\n\t\tif v.IsNil() || v.Elem().Kind() != reflect.Struct {\n\t\t\treturn v\n\t\t}\n\t\tnv := reflect.New(v.Elem().Type())\n\t\tnv.Elem().Set(v.Elem())\n\t\tdeepCopyRec(nv.Elem(), v.Elem())\n\t\treturn nv\n\tcase reflect.Slice:\n\t\tnv := reflect.MakeSlice(v.Type(), v.Len(), v.Len())\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tdeepCopyRec(nv.Index(i), v.Index(i))\n\t\t}\n\t\treturn nv\n\t}\n\tpanic(\"deepCopy: must be called with pointer or slice\")\n}\n\n// deepCopyRec is only called by deepCopy.\nfunc deepCopyRec(nv, v reflect.Value) {\n\tif v.Kind() == reflect.Struct {\n\t\tt := v.Type()\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tif name, attr := xmlName(t.Field(i)); name != \"\" && !attr {\n\t\t\t\tdeepCopyRec(nv.Field(i), v.Field(i))\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnv.Set(deepCopy(v))\n\t}\n}\n\n// newNode is used to insert a missing node during inheritance.\nfunc (cldr *CLDR) newNode(v, enc reflect.Value) reflect.Value {\n\tn := reflect.New(v.Type())\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tif name, attr := xmlName(i.field()); name == \"\" || attr {\n\t\t\tn.Elem().FieldByIndex(i.index).Set(i.value())\n\t\t}\n\t}\n\tn.Interface().(Elem).GetCommon().setEnclosing(enc.Addr().Interface().(Elem))\n\treturn n\n}\n\n// v, parent must be pointers to struct\nfunc (cldr *CLDR) inheritFields(v, parent reflect.Value) (res reflect.Value, err error) {\n\tt := v.Type()\n\tnv := reflect.New(t)\n\tnv.Elem().Set(v)\n\tfor i := iter(v); !i.done(); i.next() {\n\t\tvf := i.value()\n\t\tf := i.field()\n\t\tname, attr := xmlName(f)\n\t\tif name == \"\" || attr {\n\t\t\tcontinue\n\t\t}\n\t\tpf := parent.FieldByIndex(i.index)\n\t\tif blocking[name] {\n\t\t\tif vf.IsNil() {\n\t\t\t\tvf = pf\n\t\t\t}\n\t\t\tnv.Elem().FieldByIndex(i.index).Set(deepCopy(vf))\n\t\t\tcontinue\n\t\t}\n\t\tswitch f.Type.Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tif f.Type.Elem().Kind() == reflect.Struct {\n\t\t\t\tif !vf.IsNil() {\n\t\t\t\t\tif vf, err = cldr.inheritStructPtr(vf, pf); err != nil {\n\t\t\t\t\t\treturn reflect.Value{}, err\n\t\t\t\t\t}\n\t\t\t\t\tvf.Interface().(Elem).setEnclosing(nv.Interface().(Elem))\n\t\t\t\t\tnv.Elem().FieldByIndex(i.index).Set(vf)\n\t\t\t\t} else if !pf.IsNil() {\n\t\t\t\t\tn := cldr.newNode(pf.Elem(), v)\n\t\t\t\t\tif vf, err = cldr.inheritStructPtr(n, pf); err != nil {\n\t\t\t\t\t\treturn reflect.Value{}, err\n\t\t\t\t\t}\n\t\t\t\t\tvf.Interface().(Elem).setEnclosing(nv.Interface().(Elem))\n\t\t\t\t\tnv.Elem().FieldByIndex(i.index).Set(vf)\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\tvf, err := cldr.inheritSlice(nv.Elem(), vf, pf)\n\t\t\tif err != nil {\n\t\t\t\treturn reflect.Zero(t), err\n\t\t\t}\n\t\t\tnv.Elem().FieldByIndex(i.index).Set(vf)\n\t\t}\n\t}\n\treturn nv, nil\n}\n\nfunc root(e Elem) *LDML {\n\tfor ; e.enclosing() != nil; e = e.enclosing() {\n\t}\n\treturn e.(*LDML)\n}\n\n// inheritStructPtr first merges possible aliases in with v and then inherits\n// any underspecified elements from parent.\nfunc (cldr *CLDR) inheritStructPtr(v, parent reflect.Value) (r reflect.Value, err error) {\n\tif !v.IsNil() {\n\t\te := v.Interface().(Elem).GetCommon()\n\t\talias := e.Alias\n\t\tif alias == nil && !parent.IsNil() {\n\t\t\talias = parent.Interface().(Elem).GetCommon().Alias\n\t\t}\n\t\tif alias != nil {\n\t\t\ta, err := cldr.resolveAlias(v.Interface().(Elem), alias.Source, alias.Path)\n\t\t\tif a != nil {\n\t\t\t\tif v, err = cldr.inheritFields(v.Elem(), reflect.ValueOf(a).Elem()); err != nil {\n\t\t\t\t\treturn reflect.Value{}, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !parent.IsNil() {\n\t\t\treturn cldr.inheritFields(v.Elem(), parent.Elem())\n\t\t}\n\t} else if parent.IsNil() {\n\t\tpanic(\"should not reach here\")\n\t}\n\treturn v, nil\n}\n\n// Must be slice of struct pointers.\nfunc (cldr *CLDR) inheritSlice(enc, v, parent reflect.Value) (res reflect.Value, err error) {\n\tt := v.Type()\n\tindex := make(map[string]reflect.Value)\n\tif !v.IsNil() {\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tvi := v.Index(i)\n\t\t\tkey := attrKey(vi)\n\t\t\tindex[key] = vi\n\t\t}\n\t}\n\tif !parent.IsNil() {\n\t\tfor i := 0; i < parent.Len(); i++ {\n\t\t\tvi := parent.Index(i)\n\t\t\tkey := attrKey(vi)\n\t\t\tif w, ok := index[key]; ok {\n\t\t\t\tindex[key], err = cldr.inheritStructPtr(w, vi)\n\t\t\t} else {\n\t\t\t\tn := cldr.newNode(vi.Elem(), enc)\n\t\t\t\tindex[key], err = cldr.inheritStructPtr(n, vi)\n\t\t\t}\n\t\t\tindex[key].Interface().(Elem).setEnclosing(enc.Addr().Interface().(Elem))\n\t\t\tif err != nil {\n\t\t\t\treturn v, err\n\t\t\t}\n\t\t}\n\t}\n\tkeys := make([]string, 0, len(index))\n\tfor k, _ := range index {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\tsl := reflect.MakeSlice(t, len(index), len(index))\n\tfor i, k := range keys {\n\t\tsl.Index(i).Set(index[k])\n\t}\n\treturn sl, nil\n}\n\nfunc parentLocale(loc string) string {\n\tparts := strings.Split(loc, \"_\")\n\tif len(parts) == 1 {\n\t\treturn \"root\"\n\t}\n\tparts = parts[:len(parts)-1]\n\tkey := strings.Join(parts, \"_\")\n\treturn key\n}\n\nfunc (cldr *CLDR) resolve(loc string) (res *LDML, err error) {\n\tif r := cldr.resolved[loc]; r != nil {\n\t\treturn r, nil\n\t}\n\tx := cldr.RawLDML(loc)\n\tif x == nil {\n\t\treturn nil, fmt.Errorf(\"cldr: unknown locale %q\", loc)\n\t}\n\tvar v reflect.Value\n\tif loc == \"root\" {\n\t\tx = deepCopy(reflect.ValueOf(x)).Interface().(*LDML)\n\t\tlinkEnclosing(nil, x)\n\t\terr = cldr.aliasResolver().visit(x)\n\t} else {\n\t\tkey := parentLocale(loc)\n\t\tvar parent *LDML\n\t\tfor ; cldr.locale[key] == nil; key = parentLocale(key) {\n\t\t}\n\t\tif parent, err = cldr.resolve(key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tv, err = cldr.inheritFields(reflect.ValueOf(x).Elem(), reflect.ValueOf(parent).Elem())\n\t\tx = v.Interface().(*LDML)\n\t\tlinkEnclosing(nil, x)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcldr.resolved[loc] = x\n\treturn x, err\n}\n\n// finalize finalizes the initialization of the raw LDML structs.  It also\n// removed unwanted fields, as specified by filter, so that they will not\n// be unnecessarily evaluated.\nfunc (cldr *CLDR) finalize(filter []string) {\n\tfor _, x := range cldr.locale {\n\t\tif filter != nil {\n\t\t\tv := reflect.ValueOf(x).Elem()\n\t\t\tt := v.Type()\n\t\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\t\tf := t.Field(i)\n\t\t\t\tname, _ := xmlName(f)\n\t\t\t\tif name != \"\" && name != \"identity\" && !in(filter, name) {\n\t\t\t\t\tv.Field(i).Set(reflect.Zero(f.Type))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlinkEnclosing(nil, x) // for resolving aliases and paths\n\t\tsetNames(x, \"ldml\")\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/slice.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 cldr\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n)\n\n// Slice provides utilities for modifying slices of elements.\n// It can be wrapped around any slice of which the element type implements\n// interface Elem.\ntype Slice struct {\n\tptr reflect.Value\n\ttyp reflect.Type\n}\n\n// Value returns the reflect.Value of the underlying slice.\nfunc (s *Slice) Value() reflect.Value {\n\treturn s.ptr.Elem()\n}\n\n// MakeSlice wraps a pointer to a slice of Elems.\n// It replaces the array pointed to by the slice so that subsequent modifications\n// do not alter the data in a CLDR type.\n// It panics if an incorrect type is passed.\nfunc MakeSlice(slicePtr interface{}) Slice {\n\tptr := reflect.ValueOf(slicePtr)\n\tif ptr.Kind() != reflect.Ptr {\n\t\tpanic(fmt.Sprintf(\"MakeSlice: argument must be pointer to slice, found %v\", ptr.Type()))\n\t}\n\tsl := ptr.Elem()\n\tif sl.Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"MakeSlice: argument must point to a slice, found %v\", sl.Type()))\n\t}\n\tintf := reflect.TypeOf((*Elem)(nil)).Elem()\n\tif !sl.Type().Elem().Implements(intf) {\n\t\tpanic(fmt.Sprintf(\"MakeSlice: element type of slice (%v) does not implement Elem\", sl.Type().Elem()))\n\t}\n\tnsl := reflect.MakeSlice(sl.Type(), sl.Len(), sl.Len())\n\treflect.Copy(nsl, sl)\n\tsl.Set(nsl)\n\treturn Slice{\n\t\tptr: ptr,\n\t\ttyp: sl.Type().Elem().Elem(),\n\t}\n}\n\nfunc (s Slice) indexForAttr(a string) []int {\n\tfor i := iter(reflect.Zero(s.typ)); !i.done(); i.next() {\n\t\tif n, _ := xmlName(i.field()); n == a {\n\t\t\treturn i.index\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"MakeSlice: no attribute %q for type %v\", a, s.typ))\n}\n\n// Filter filters s to only include elements for which fn returns true.\nfunc (s Slice) Filter(fn func(e Elem) bool) {\n\tk := 0\n\tsl := s.Value()\n\tfor i := 0; i < sl.Len(); i++ {\n\t\tvi := sl.Index(i)\n\t\tif fn(vi.Interface().(Elem)) {\n\t\t\tsl.Index(k).Set(vi)\n\t\t\tk++\n\t\t}\n\t}\n\tsl.Set(sl.Slice(0, k))\n}\n\n// Group finds elements in s for which fn returns the same value and groups\n// them in a new Slice.\nfunc (s Slice) Group(fn func(e Elem) string) []Slice {\n\tm := make(map[string][]reflect.Value)\n\tsl := s.Value()\n\tfor i := 0; i < sl.Len(); i++ {\n\t\tvi := sl.Index(i)\n\t\tkey := fn(vi.Interface().(Elem))\n\t\tm[key] = append(m[key], vi)\n\t}\n\tkeys := []string{}\n\tfor k, _ := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\tres := []Slice{}\n\tfor _, k := range keys {\n\t\tnsl := reflect.New(sl.Type())\n\t\tnsl.Elem().Set(reflect.Append(nsl.Elem(), m[k]...))\n\t\tres = append(res, MakeSlice(nsl.Interface()))\n\t}\n\treturn res\n}\n\n// SelectAnyOf filters s to contain only elements for which attr matches\n// any of the values.\nfunc (s Slice) SelectAnyOf(attr string, values ...string) {\n\tindex := s.indexForAttr(attr)\n\ts.Filter(func(e Elem) bool {\n\t\tvf := reflect.ValueOf(e).Elem().FieldByIndex(index)\n\t\treturn in(values, vf.String())\n\t})\n}\n\n// SelectOnePerGroup filters s to include at most one element e per group of\n// elements matching Key(attr), where e has an attribute a that matches any\n// the values in v.\n// If more than one element in a group matches a value in v preference\n// is given to the element that matches the first value in v.\nfunc (s Slice) SelectOnePerGroup(a string, v []string) {\n\tindex := s.indexForAttr(a)\n\tgrouped := s.Group(func(e Elem) string { return Key(e, a) })\n\tsl := s.Value()\n\tsl.Set(sl.Slice(0, 0))\n\tfor _, g := range grouped {\n\t\te := reflect.Value{}\n\t\tfound := len(v)\n\t\tgsl := g.Value()\n\t\tfor i := 0; i < gsl.Len(); i++ {\n\t\t\tvi := gsl.Index(i).Elem().FieldByIndex(index)\n\t\t\tj := 0\n\t\t\tfor ; j < len(v) && v[j] != vi.String(); j++ {\n\t\t\t}\n\t\t\tif j < found {\n\t\t\t\tfound = j\n\t\t\t\te = gsl.Index(i)\n\t\t\t}\n\t\t}\n\t\tif found < len(v) {\n\t\t\tsl.Set(reflect.Append(sl, e))\n\t\t}\n\t}\n}\n\n// SelectDraft drops all elements from the list with a draft level smaller than d\n// and selects the highest draft level of the remaining.\n// This method assumes that the input CLDR is canonicalized.\nfunc (s Slice) SelectDraft(d Draft) {\n\ts.SelectOnePerGroup(\"draft\", drafts[len(drafts)-2-int(d):])\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/cldr/xml.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\npackage cldr\n\n// LDMLBCP47 holds information on allowable values for various variables in LDML.\ntype LDMLBCP47 struct {\n\tCommon\n\tVersion *struct {\n\t\tCommon\n\t\tNumber string `xml:\"number,attr\"`\n\t} `xml:\"version\"`\n\tGeneration *struct {\n\t\tCommon\n\t\tDate string `xml:\"date,attr\"`\n\t} `xml:\"generation\"`\n\tKeyword []*struct {\n\t\tCommon\n\t\tKey []*struct {\n\t\t\tCommon\n\t\t\tExtension   string `xml:\"extension,attr\"`\n\t\t\tName        string `xml:\"name,attr\"`\n\t\t\tDescription string `xml:\"description,attr\"`\n\t\t\tDeprecated  string `xml:\"deprecated,attr\"`\n\t\t\tPreferred   string `xml:\"preferred,attr\"`\n\t\t\tAlias       string `xml:\"alias,attr\"`\n\t\t\tValueType   string `xml:\"valueType,attr\"`\n\t\t\tSince       string `xml:\"since,attr\"`\n\t\t\tType        []*struct {\n\t\t\t\tCommon\n\t\t\t\tName        string `xml:\"name,attr\"`\n\t\t\t\tDescription string `xml:\"description,attr\"`\n\t\t\t\tDeprecated  string `xml:\"deprecated,attr\"`\n\t\t\t\tPreferred   string `xml:\"preferred,attr\"`\n\t\t\t\tAlias       string `xml:\"alias,attr\"`\n\t\t\t\tSince       string `xml:\"since,attr\"`\n\t\t\t} `xml:\"type\"`\n\t\t} `xml:\"key\"`\n\t} `xml:\"keyword\"`\n\tAttribute []*struct {\n\t\tCommon\n\t\tName        string `xml:\"name,attr\"`\n\t\tDescription string `xml:\"description,attr\"`\n\t\tDeprecated  string `xml:\"deprecated,attr\"`\n\t\tPreferred   string `xml:\"preferred,attr\"`\n\t\tSince       string `xml:\"since,attr\"`\n\t} `xml:\"attribute\"`\n}\n\n// SupplementalData holds information relevant for internationalization\n// and proper use of CLDR, but that is not contained in the locale hierarchy.\ntype SupplementalData struct {\n\tCommon\n\tVersion *struct {\n\t\tCommon\n\t\tNumber string `xml:\"number,attr\"`\n\t} `xml:\"version\"`\n\tGeneration *struct {\n\t\tCommon\n\t\tDate string `xml:\"date,attr\"`\n\t} `xml:\"generation\"`\n\tCurrencyData *struct {\n\t\tCommon\n\t\tFractions []*struct {\n\t\t\tCommon\n\t\t\tInfo []*struct {\n\t\t\t\tCommon\n\t\t\t\tIso4217      string `xml:\"iso4217,attr\"`\n\t\t\t\tDigits       string `xml:\"digits,attr\"`\n\t\t\t\tRounding     string `xml:\"rounding,attr\"`\n\t\t\t\tCashDigits   string `xml:\"cashDigits,attr\"`\n\t\t\t\tCashRounding string `xml:\"cashRounding,attr\"`\n\t\t\t} `xml:\"info\"`\n\t\t} `xml:\"fractions\"`\n\t\tRegion []*struct {\n\t\t\tCommon\n\t\t\tIso3166  string `xml:\"iso3166,attr\"`\n\t\t\tCurrency []*struct {\n\t\t\t\tCommon\n\t\t\t\tBefore       string `xml:\"before,attr\"`\n\t\t\t\tFrom         string `xml:\"from,attr\"`\n\t\t\t\tTo           string `xml:\"to,attr\"`\n\t\t\t\tIso4217      string `xml:\"iso4217,attr\"`\n\t\t\t\tDigits       string `xml:\"digits,attr\"`\n\t\t\t\tRounding     string `xml:\"rounding,attr\"`\n\t\t\t\tCashRounding string `xml:\"cashRounding,attr\"`\n\t\t\t\tTender       string `xml:\"tender,attr\"`\n\t\t\t\tAlternate    []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tIso4217 string `xml:\"iso4217,attr\"`\n\t\t\t\t} `xml:\"alternate\"`\n\t\t\t} `xml:\"currency\"`\n\t\t} `xml:\"region\"`\n\t} `xml:\"currencyData\"`\n\tTerritoryContainment *struct {\n\t\tCommon\n\t\tGroup []*struct {\n\t\t\tCommon\n\t\t\tContains string `xml:\"contains,attr\"`\n\t\t\tGrouping string `xml:\"grouping,attr\"`\n\t\t\tStatus   string `xml:\"status,attr\"`\n\t\t} `xml:\"group\"`\n\t} `xml:\"territoryContainment\"`\n\tSubdivisionContainment *struct {\n\t\tCommon\n\t\tSubgroup []*struct {\n\t\t\tCommon\n\t\t\tSubtype  string `xml:\"subtype,attr\"`\n\t\t\tContains string `xml:\"contains,attr\"`\n\t\t} `xml:\"subgroup\"`\n\t} `xml:\"subdivisionContainment\"`\n\tLanguageData *struct {\n\t\tCommon\n\t\tLanguage []*struct {\n\t\t\tCommon\n\t\t\tScripts     string `xml:\"scripts,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t\tVariants    string `xml:\"variants,attr\"`\n\t\t} `xml:\"language\"`\n\t} `xml:\"languageData\"`\n\tTerritoryInfo *struct {\n\t\tCommon\n\t\tTerritory []*struct {\n\t\t\tCommon\n\t\t\tGdp                string `xml:\"gdp,attr\"`\n\t\t\tLiteracyPercent    string `xml:\"literacyPercent,attr\"`\n\t\t\tPopulation         string `xml:\"population,attr\"`\n\t\t\tLanguagePopulation []*struct {\n\t\t\t\tCommon\n\t\t\t\tWritingPercent    string `xml:\"writingPercent,attr\"`\n\t\t\t\tPopulationPercent string `xml:\"populationPercent,attr\"`\n\t\t\t\tOfficialStatus    string `xml:\"officialStatus,attr\"`\n\t\t\t} `xml:\"languagePopulation\"`\n\t\t} `xml:\"territory\"`\n\t} `xml:\"territoryInfo\"`\n\tPostalCodeData *struct {\n\t\tCommon\n\t\tPostCodeRegex []*struct {\n\t\t\tCommon\n\t\t\tTerritoryId string `xml:\"territoryId,attr\"`\n\t\t} `xml:\"postCodeRegex\"`\n\t} `xml:\"postalCodeData\"`\n\tCalendarData *struct {\n\t\tCommon\n\t\tCalendar []*struct {\n\t\t\tCommon\n\t\t\tTerritories    string  `xml:\"territories,attr\"`\n\t\t\tCalendarSystem *Common `xml:\"calendarSystem\"`\n\t\t\tEras           *struct {\n\t\t\t\tCommon\n\t\t\t\tEra []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tStart string `xml:\"start,attr\"`\n\t\t\t\t\tEnd   string `xml:\"end,attr\"`\n\t\t\t\t} `xml:\"era\"`\n\t\t\t} `xml:\"eras\"`\n\t\t} `xml:\"calendar\"`\n\t} `xml:\"calendarData\"`\n\tCalendarPreferenceData *struct {\n\t\tCommon\n\t\tCalendarPreference []*struct {\n\t\t\tCommon\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t\tOrdering    string `xml:\"ordering,attr\"`\n\t\t} `xml:\"calendarPreference\"`\n\t} `xml:\"calendarPreferenceData\"`\n\tWeekData *struct {\n\t\tCommon\n\t\tMinDays []*struct {\n\t\t\tCommon\n\t\t\tCount       string `xml:\"count,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"minDays\"`\n\t\tFirstDay []*struct {\n\t\t\tCommon\n\t\t\tDay         string `xml:\"day,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"firstDay\"`\n\t\tWeekendStart []*struct {\n\t\t\tCommon\n\t\t\tDay         string `xml:\"day,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"weekendStart\"`\n\t\tWeekendEnd []*struct {\n\t\t\tCommon\n\t\t\tDay         string `xml:\"day,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"weekendEnd\"`\n\t\tWeekOfPreference []*struct {\n\t\t\tCommon\n\t\t\tLocales  string `xml:\"locales,attr\"`\n\t\t\tOrdering string `xml:\"ordering,attr\"`\n\t\t} `xml:\"weekOfPreference\"`\n\t} `xml:\"weekData\"`\n\tTimeData *struct {\n\t\tCommon\n\t\tHours []*struct {\n\t\t\tCommon\n\t\t\tAllowed   string `xml:\"allowed,attr\"`\n\t\t\tPreferred string `xml:\"preferred,attr\"`\n\t\t\tRegions   string `xml:\"regions,attr\"`\n\t\t} `xml:\"hours\"`\n\t} `xml:\"timeData\"`\n\tMeasurementData *struct {\n\t\tCommon\n\t\tMeasurementSystem []*struct {\n\t\t\tCommon\n\t\t\tCategory    string `xml:\"category,attr\"`\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"measurementSystem\"`\n\t\tPaperSize []*struct {\n\t\t\tCommon\n\t\t\tTerritories string `xml:\"territories,attr\"`\n\t\t} `xml:\"paperSize\"`\n\t} `xml:\"measurementData\"`\n\tUnitPreferenceData *struct {\n\t\tCommon\n\t\tUnitPreferences []*struct {\n\t\t\tCommon\n\t\t\tCategory       string `xml:\"category,attr\"`\n\t\t\tUsage          string `xml:\"usage,attr\"`\n\t\t\tScope          string `xml:\"scope,attr\"`\n\t\t\tUnitPreference []*struct {\n\t\t\t\tCommon\n\t\t\t\tRegions string `xml:\"regions,attr\"`\n\t\t\t} `xml:\"unitPreference\"`\n\t\t} `xml:\"unitPreferences\"`\n\t} `xml:\"unitPreferenceData\"`\n\tTimezoneData *struct {\n\t\tCommon\n\t\tMapTimezones []*struct {\n\t\t\tCommon\n\t\t\tOtherVersion string `xml:\"otherVersion,attr\"`\n\t\t\tTypeVersion  string `xml:\"typeVersion,attr\"`\n\t\t\tMapZone      []*struct {\n\t\t\t\tCommon\n\t\t\t\tOther     string `xml:\"other,attr\"`\n\t\t\t\tTerritory string `xml:\"territory,attr\"`\n\t\t\t} `xml:\"mapZone\"`\n\t\t} `xml:\"mapTimezones\"`\n\t\tZoneFormatting []*struct {\n\t\t\tCommon\n\t\t\tMultizone   string `xml:\"multizone,attr\"`\n\t\t\tTzidVersion string `xml:\"tzidVersion,attr\"`\n\t\t\tZoneItem    []*struct {\n\t\t\t\tCommon\n\t\t\t\tTerritory string `xml:\"territory,attr\"`\n\t\t\t\tAliases   string `xml:\"aliases,attr\"`\n\t\t\t} `xml:\"zoneItem\"`\n\t\t} `xml:\"zoneFormatting\"`\n\t} `xml:\"timezoneData\"`\n\tCharacters *struct {\n\t\tCommon\n\t\tCharacterFallback []*struct {\n\t\t\tCommon\n\t\t\tCharacter []*struct {\n\t\t\t\tCommon\n\t\t\t\tValue      string    `xml:\"value,attr\"`\n\t\t\t\tSubstitute []*Common `xml:\"substitute\"`\n\t\t\t} `xml:\"character\"`\n\t\t} `xml:\"character-fallback\"`\n\t} `xml:\"characters\"`\n\tTransforms *struct {\n\t\tCommon\n\t\tTransform []*struct {\n\t\t\tCommon\n\t\t\tSource        string    `xml:\"source,attr\"`\n\t\t\tTarget        string    `xml:\"target,attr\"`\n\t\t\tVariant       string    `xml:\"variant,attr\"`\n\t\t\tDirection     string    `xml:\"direction,attr\"`\n\t\t\tAlias         string    `xml:\"alias,attr\"`\n\t\t\tBackwardAlias string    `xml:\"backwardAlias,attr\"`\n\t\t\tVisibility    string    `xml:\"visibility,attr\"`\n\t\t\tComment       []*Common `xml:\"comment\"`\n\t\t\tTRule         []*Common `xml:\"tRule\"`\n\t\t} `xml:\"transform\"`\n\t} `xml:\"transforms\"`\n\tMetadata *struct {\n\t\tCommon\n\t\tAttributeOrder *Common `xml:\"attributeOrder\"`\n\t\tElementOrder   *Common `xml:\"elementOrder\"`\n\t\tSerialElements *Common `xml:\"serialElements\"`\n\t\tSuppress       *struct {\n\t\t\tCommon\n\t\t\tAttributes []*struct {\n\t\t\t\tCommon\n\t\t\t\tElement        string `xml:\"element,attr\"`\n\t\t\t\tAttribute      string `xml:\"attribute,attr\"`\n\t\t\t\tAttributeValue string `xml:\"attributeValue,attr\"`\n\t\t\t} `xml:\"attributes\"`\n\t\t} `xml:\"suppress\"`\n\t\tValidity *struct {\n\t\t\tCommon\n\t\t\tVariable []*struct {\n\t\t\t\tCommon\n\t\t\t\tId string `xml:\"id,attr\"`\n\t\t\t} `xml:\"variable\"`\n\t\t\tAttributeValues []*struct {\n\t\t\t\tCommon\n\t\t\t\tDtds       string `xml:\"dtds,attr\"`\n\t\t\t\tElements   string `xml:\"elements,attr\"`\n\t\t\t\tAttributes string `xml:\"attributes,attr\"`\n\t\t\t\tOrder      string `xml:\"order,attr\"`\n\t\t\t} `xml:\"attributeValues\"`\n\t\t} `xml:\"validity\"`\n\t\tAlias *struct {\n\t\t\tCommon\n\t\t\tLanguageAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"languageAlias\"`\n\t\t\tScriptAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"scriptAlias\"`\n\t\t\tTerritoryAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"territoryAlias\"`\n\t\t\tSubdivisionAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"subdivisionAlias\"`\n\t\t\tVariantAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"variantAlias\"`\n\t\t\tZoneAlias []*struct {\n\t\t\t\tCommon\n\t\t\t\tReplacement string `xml:\"replacement,attr\"`\n\t\t\t\tReason      string `xml:\"reason,attr\"`\n\t\t\t} `xml:\"zoneAlias\"`\n\t\t} `xml:\"alias\"`\n\t\tDeprecated *struct {\n\t\t\tCommon\n\t\t\tDeprecatedItems []*struct {\n\t\t\t\tCommon\n\t\t\t\tElements   string `xml:\"elements,attr\"`\n\t\t\t\tAttributes string `xml:\"attributes,attr\"`\n\t\t\t\tValues     string `xml:\"values,attr\"`\n\t\t\t} `xml:\"deprecatedItems\"`\n\t\t} `xml:\"deprecated\"`\n\t\tDistinguishing *struct {\n\t\t\tCommon\n\t\t\tDistinguishingItems []*struct {\n\t\t\t\tCommon\n\t\t\t\tExclude    string `xml:\"exclude,attr\"`\n\t\t\t\tElements   string `xml:\"elements,attr\"`\n\t\t\t\tAttributes string `xml:\"attributes,attr\"`\n\t\t\t} `xml:\"distinguishingItems\"`\n\t\t} `xml:\"distinguishing\"`\n\t\tBlocking *struct {\n\t\t\tCommon\n\t\t\tBlockingItems []*struct {\n\t\t\t\tCommon\n\t\t\t\tElements string `xml:\"elements,attr\"`\n\t\t\t} `xml:\"blockingItems\"`\n\t\t} `xml:\"blocking\"`\n\t\tCoverageAdditions *struct {\n\t\t\tCommon\n\t\t\tLanguageCoverage []*struct {\n\t\t\t\tCommon\n\t\t\t\tValues string `xml:\"values,attr\"`\n\t\t\t} `xml:\"languageCoverage\"`\n\t\t\tScriptCoverage []*struct {\n\t\t\t\tCommon\n\t\t\t\tValues string `xml:\"values,attr\"`\n\t\t\t} `xml:\"scriptCoverage\"`\n\t\t\tTerritoryCoverage []*struct {\n\t\t\t\tCommon\n\t\t\t\tValues string `xml:\"values,attr\"`\n\t\t\t} `xml:\"territoryCoverage\"`\n\t\t\tCurrencyCoverage []*struct {\n\t\t\t\tCommon\n\t\t\t\tValues string `xml:\"values,attr\"`\n\t\t\t} `xml:\"currencyCoverage\"`\n\t\t\tTimezoneCoverage []*struct {\n\t\t\t\tCommon\n\t\t\t\tValues string `xml:\"values,attr\"`\n\t\t\t} `xml:\"timezoneCoverage\"`\n\t\t} `xml:\"coverageAdditions\"`\n\t\tSkipDefaultLocale *struct {\n\t\t\tCommon\n\t\t\tServices string `xml:\"services,attr\"`\n\t\t} `xml:\"skipDefaultLocale\"`\n\t\tDefaultContent *struct {\n\t\t\tCommon\n\t\t\tLocales string `xml:\"locales,attr\"`\n\t\t} `xml:\"defaultContent\"`\n\t} `xml:\"metadata\"`\n\tCodeMappings *struct {\n\t\tCommon\n\t\tLanguageCodes []*struct {\n\t\t\tCommon\n\t\t\tAlpha3 string `xml:\"alpha3,attr\"`\n\t\t} `xml:\"languageCodes\"`\n\t\tTerritoryCodes []*struct {\n\t\t\tCommon\n\t\t\tNumeric  string `xml:\"numeric,attr\"`\n\t\t\tAlpha3   string `xml:\"alpha3,attr\"`\n\t\t\tFips10   string `xml:\"fips10,attr\"`\n\t\t\tInternet string `xml:\"internet,attr\"`\n\t\t} `xml:\"territoryCodes\"`\n\t\tCurrencyCodes []*struct {\n\t\t\tCommon\n\t\t\tNumeric string `xml:\"numeric,attr\"`\n\t\t} `xml:\"currencyCodes\"`\n\t} `xml:\"codeMappings\"`\n\tParentLocales *struct {\n\t\tCommon\n\t\tParentLocale []*struct {\n\t\t\tCommon\n\t\t\tParent  string `xml:\"parent,attr\"`\n\t\t\tLocales string `xml:\"locales,attr\"`\n\t\t} `xml:\"parentLocale\"`\n\t} `xml:\"parentLocales\"`\n\tLikelySubtags *struct {\n\t\tCommon\n\t\tLikelySubtag []*struct {\n\t\t\tCommon\n\t\t\tFrom string `xml:\"from,attr\"`\n\t\t\tTo   string `xml:\"to,attr\"`\n\t\t} `xml:\"likelySubtag\"`\n\t} `xml:\"likelySubtags\"`\n\tMetazoneInfo *struct {\n\t\tCommon\n\t\tTimezone []*struct {\n\t\t\tCommon\n\t\t\tUsesMetazone []*struct {\n\t\t\t\tCommon\n\t\t\t\tFrom  string `xml:\"from,attr\"`\n\t\t\t\tTo    string `xml:\"to,attr\"`\n\t\t\t\tMzone string `xml:\"mzone,attr\"`\n\t\t\t} `xml:\"usesMetazone\"`\n\t\t} `xml:\"timezone\"`\n\t} `xml:\"metazoneInfo\"`\n\tPlurals []*struct {\n\t\tCommon\n\t\tPluralRules []*struct {\n\t\t\tCommon\n\t\t\tLocales    string `xml:\"locales,attr\"`\n\t\t\tPluralRule []*struct {\n\t\t\t\tCommon\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"pluralRule\"`\n\t\t} `xml:\"pluralRules\"`\n\t\tPluralRanges []*struct {\n\t\t\tCommon\n\t\t\tLocales     string `xml:\"locales,attr\"`\n\t\t\tPluralRange []*struct {\n\t\t\t\tCommon\n\t\t\t\tStart  string `xml:\"start,attr\"`\n\t\t\t\tEnd    string `xml:\"end,attr\"`\n\t\t\t\tResult string `xml:\"result,attr\"`\n\t\t\t} `xml:\"pluralRange\"`\n\t\t} `xml:\"pluralRanges\"`\n\t} `xml:\"plurals\"`\n\tTelephoneCodeData *struct {\n\t\tCommon\n\t\tCodesByTerritory []*struct {\n\t\t\tCommon\n\t\t\tTerritory            string `xml:\"territory,attr\"`\n\t\t\tTelephoneCountryCode []*struct {\n\t\t\t\tCommon\n\t\t\t\tCode string `xml:\"code,attr\"`\n\t\t\t\tFrom string `xml:\"from,attr\"`\n\t\t\t\tTo   string `xml:\"to,attr\"`\n\t\t\t} `xml:\"telephoneCountryCode\"`\n\t\t} `xml:\"codesByTerritory\"`\n\t} `xml:\"telephoneCodeData\"`\n\tNumberingSystems *struct {\n\t\tCommon\n\t\tNumberingSystem []*struct {\n\t\t\tCommon\n\t\t\tId     string `xml:\"id,attr\"`\n\t\t\tRadix  string `xml:\"radix,attr\"`\n\t\t\tDigits string `xml:\"digits,attr\"`\n\t\t\tRules  string `xml:\"rules,attr\"`\n\t\t} `xml:\"numberingSystem\"`\n\t} `xml:\"numberingSystems\"`\n\tBcp47KeywordMappings *struct {\n\t\tCommon\n\t\tMapKeys *struct {\n\t\t\tCommon\n\t\t\tKeyMap []*struct {\n\t\t\t\tCommon\n\t\t\t\tBcp47 string `xml:\"bcp47,attr\"`\n\t\t\t} `xml:\"keyMap\"`\n\t\t} `xml:\"mapKeys\"`\n\t\tMapTypes []*struct {\n\t\t\tCommon\n\t\t\tTypeMap []*struct {\n\t\t\t\tCommon\n\t\t\t\tBcp47 string `xml:\"bcp47,attr\"`\n\t\t\t} `xml:\"typeMap\"`\n\t\t} `xml:\"mapTypes\"`\n\t} `xml:\"bcp47KeywordMappings\"`\n\tGender *struct {\n\t\tCommon\n\t\tPersonList []*struct {\n\t\t\tCommon\n\t\t\tLocales string `xml:\"locales,attr\"`\n\t\t} `xml:\"personList\"`\n\t} `xml:\"gender\"`\n\tReferences *struct {\n\t\tCommon\n\t\tReference []*struct {\n\t\t\tCommon\n\t\t\tUri string `xml:\"uri,attr\"`\n\t\t} `xml:\"reference\"`\n\t} `xml:\"references\"`\n\tLanguageMatching *struct {\n\t\tCommon\n\t\tLanguageMatches []*struct {\n\t\t\tCommon\n\t\t\tLanguageMatch []*struct {\n\t\t\t\tCommon\n\t\t\t\tDesired   string `xml:\"desired,attr\"`\n\t\t\t\tOneway    string `xml:\"oneway,attr\"`\n\t\t\t\tPercent   string `xml:\"percent,attr\"`\n\t\t\t\tSupported string `xml:\"supported,attr\"`\n\t\t\t} `xml:\"languageMatch\"`\n\t\t} `xml:\"languageMatches\"`\n\t} `xml:\"languageMatching\"`\n\tDayPeriodRuleSet []*struct {\n\t\tCommon\n\t\tDayPeriodRules []*struct {\n\t\t\tCommon\n\t\t\tLocales       string `xml:\"locales,attr\"`\n\t\t\tDayPeriodRule []*struct {\n\t\t\t\tCommon\n\t\t\t\tAt     string `xml:\"at,attr\"`\n\t\t\t\tAfter  string `xml:\"after,attr\"`\n\t\t\t\tBefore string `xml:\"before,attr\"`\n\t\t\t\tFrom   string `xml:\"from,attr\"`\n\t\t\t\tTo     string `xml:\"to,attr\"`\n\t\t\t} `xml:\"dayPeriodRule\"`\n\t\t} `xml:\"dayPeriodRules\"`\n\t} `xml:\"dayPeriodRuleSet\"`\n\tMetaZones *struct {\n\t\tCommon\n\t\tMetazoneInfo *struct {\n\t\t\tCommon\n\t\t\tTimezone []*struct {\n\t\t\t\tCommon\n\t\t\t\tUsesMetazone []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tFrom  string `xml:\"from,attr\"`\n\t\t\t\t\tTo    string `xml:\"to,attr\"`\n\t\t\t\t\tMzone string `xml:\"mzone,attr\"`\n\t\t\t\t} `xml:\"usesMetazone\"`\n\t\t\t} `xml:\"timezone\"`\n\t\t} `xml:\"metazoneInfo\"`\n\t\tMapTimezones *struct {\n\t\t\tCommon\n\t\t\tOtherVersion string `xml:\"otherVersion,attr\"`\n\t\t\tTypeVersion  string `xml:\"typeVersion,attr\"`\n\t\t\tMapZone      []*struct {\n\t\t\t\tCommon\n\t\t\t\tOther     string `xml:\"other,attr\"`\n\t\t\t\tTerritory string `xml:\"territory,attr\"`\n\t\t\t} `xml:\"mapZone\"`\n\t\t} `xml:\"mapTimezones\"`\n\t} `xml:\"metaZones\"`\n\tPrimaryZones *struct {\n\t\tCommon\n\t\tPrimaryZone []*struct {\n\t\t\tCommon\n\t\t\tIso3166 string `xml:\"iso3166,attr\"`\n\t\t} `xml:\"primaryZone\"`\n\t} `xml:\"primaryZones\"`\n\tWindowsZones *struct {\n\t\tCommon\n\t\tMapTimezones *struct {\n\t\t\tCommon\n\t\t\tOtherVersion string `xml:\"otherVersion,attr\"`\n\t\t\tTypeVersion  string `xml:\"typeVersion,attr\"`\n\t\t\tMapZone      []*struct {\n\t\t\t\tCommon\n\t\t\t\tOther     string `xml:\"other,attr\"`\n\t\t\t\tTerritory string `xml:\"territory,attr\"`\n\t\t\t} `xml:\"mapZone\"`\n\t\t} `xml:\"mapTimezones\"`\n\t} `xml:\"windowsZones\"`\n\tCoverageLevels *struct {\n\t\tCommon\n\t\tApprovalRequirements *struct {\n\t\t\tCommon\n\t\t\tApprovalRequirement []*struct {\n\t\t\t\tCommon\n\t\t\t\tVotes   string `xml:\"votes,attr\"`\n\t\t\t\tLocales string `xml:\"locales,attr\"`\n\t\t\t\tPaths   string `xml:\"paths,attr\"`\n\t\t\t} `xml:\"approvalRequirement\"`\n\t\t} `xml:\"approvalRequirements\"`\n\t\tCoverageVariable []*struct {\n\t\t\tCommon\n\t\t\tKey   string `xml:\"key,attr\"`\n\t\t\tValue string `xml:\"value,attr\"`\n\t\t} `xml:\"coverageVariable\"`\n\t\tCoverageLevel []*struct {\n\t\t\tCommon\n\t\t\tInLanguage  string `xml:\"inLanguage,attr\"`\n\t\t\tInScript    string `xml:\"inScript,attr\"`\n\t\t\tInTerritory string `xml:\"inTerritory,attr\"`\n\t\t\tValue       string `xml:\"value,attr\"`\n\t\t\tMatch       string `xml:\"match,attr\"`\n\t\t} `xml:\"coverageLevel\"`\n\t} `xml:\"coverageLevels\"`\n\tIdValidity *struct {\n\t\tCommon\n\t\tId []*struct {\n\t\t\tCommon\n\t\t\tIdStatus string `xml:\"idStatus,attr\"`\n\t\t} `xml:\"id\"`\n\t} `xml:\"idValidity\"`\n\tRgScope *struct {\n\t\tCommon\n\t\tRgPath []*struct {\n\t\t\tCommon\n\t\t\tPath string `xml:\"path,attr\"`\n\t\t} `xml:\"rgPath\"`\n\t} `xml:\"rgScope\"`\n}\n\n// LDML is the top-level type for locale-specific data.\ntype LDML struct {\n\tCommon\n\tVersion  string `xml:\"version,attr\"`\n\tIdentity *struct {\n\t\tCommon\n\t\tVersion *struct {\n\t\t\tCommon\n\t\t\tNumber string `xml:\"number,attr\"`\n\t\t} `xml:\"version\"`\n\t\tGeneration *struct {\n\t\t\tCommon\n\t\t\tDate string `xml:\"date,attr\"`\n\t\t} `xml:\"generation\"`\n\t\tLanguage  *Common `xml:\"language\"`\n\t\tScript    *Common `xml:\"script\"`\n\t\tTerritory *Common `xml:\"territory\"`\n\t\tVariant   *Common `xml:\"variant\"`\n\t} `xml:\"identity\"`\n\tLocaleDisplayNames *LocaleDisplayNames `xml:\"localeDisplayNames\"`\n\tLayout             *struct {\n\t\tCommon\n\t\tOrientation []*struct {\n\t\t\tCommon\n\t\t\tCharacters     string    `xml:\"characters,attr\"`\n\t\t\tLines          string    `xml:\"lines,attr\"`\n\t\t\tCharacterOrder []*Common `xml:\"characterOrder\"`\n\t\t\tLineOrder      []*Common `xml:\"lineOrder\"`\n\t\t} `xml:\"orientation\"`\n\t\tInList []*struct {\n\t\t\tCommon\n\t\t\tCasing string `xml:\"casing,attr\"`\n\t\t} `xml:\"inList\"`\n\t\tInText []*Common `xml:\"inText\"`\n\t} `xml:\"layout\"`\n\tContextTransforms *struct {\n\t\tCommon\n\t\tContextTransformUsage []*struct {\n\t\t\tCommon\n\t\t\tContextTransform []*Common `xml:\"contextTransform\"`\n\t\t} `xml:\"contextTransformUsage\"`\n\t} `xml:\"contextTransforms\"`\n\tCharacters *struct {\n\t\tCommon\n\t\tExemplarCharacters []*Common `xml:\"exemplarCharacters\"`\n\t\tEllipsis           []*Common `xml:\"ellipsis\"`\n\t\tMoreInformation    []*Common `xml:\"moreInformation\"`\n\t\tStopwords          []*struct {\n\t\t\tCommon\n\t\t\tStopwordList []*Common `xml:\"stopwordList\"`\n\t\t} `xml:\"stopwords\"`\n\t\tIndexLabels []*struct {\n\t\t\tCommon\n\t\t\tIndexSeparator           []*Common `xml:\"indexSeparator\"`\n\t\t\tCompressedIndexSeparator []*Common `xml:\"compressedIndexSeparator\"`\n\t\t\tIndexRangePattern        []*Common `xml:\"indexRangePattern\"`\n\t\t\tIndexLabelBefore         []*Common `xml:\"indexLabelBefore\"`\n\t\t\tIndexLabelAfter          []*Common `xml:\"indexLabelAfter\"`\n\t\t\tIndexLabel               []*struct {\n\t\t\t\tCommon\n\t\t\t\tIndexSource string `xml:\"indexSource,attr\"`\n\t\t\t\tPriority    string `xml:\"priority,attr\"`\n\t\t\t} `xml:\"indexLabel\"`\n\t\t} `xml:\"indexLabels\"`\n\t\tMapping []*struct {\n\t\t\tCommon\n\t\t\tRegistry string `xml:\"registry,attr\"`\n\t\t} `xml:\"mapping\"`\n\t} `xml:\"characters\"`\n\tDelimiters *struct {\n\t\tCommon\n\t\tQuotationStart          []*Common `xml:\"quotationStart\"`\n\t\tQuotationEnd            []*Common `xml:\"quotationEnd\"`\n\t\tAlternateQuotationStart []*Common `xml:\"alternateQuotationStart\"`\n\t\tAlternateQuotationEnd   []*Common `xml:\"alternateQuotationEnd\"`\n\t} `xml:\"delimiters\"`\n\tMeasurement *struct {\n\t\tCommon\n\t\tMeasurementSystem []*Common `xml:\"measurementSystem\"`\n\t\tPaperSize         []*struct {\n\t\t\tCommon\n\t\t\tHeight []*Common `xml:\"height\"`\n\t\t\tWidth  []*Common `xml:\"width\"`\n\t\t} `xml:\"paperSize\"`\n\t} `xml:\"measurement\"`\n\tDates *struct {\n\t\tCommon\n\t\tLocalizedPatternChars []*Common `xml:\"localizedPatternChars\"`\n\t\tDateRangePattern      []*Common `xml:\"dateRangePattern\"`\n\t\tCalendars             *struct {\n\t\t\tCommon\n\t\t\tCalendar []*Calendar `xml:\"calendar\"`\n\t\t} `xml:\"calendars\"`\n\t\tFields *struct {\n\t\t\tCommon\n\t\t\tField []*struct {\n\t\t\t\tCommon\n\t\t\t\tDisplayName []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"displayName\"`\n\t\t\t\tRelative     []*Common `xml:\"relative\"`\n\t\t\t\tRelativeTime []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tRelativeTimePattern []*struct {\n\t\t\t\t\t\tCommon\n\t\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t\t} `xml:\"relativeTimePattern\"`\n\t\t\t\t} `xml:\"relativeTime\"`\n\t\t\t\tRelativePeriod []*Common `xml:\"relativePeriod\"`\n\t\t\t} `xml:\"field\"`\n\t\t} `xml:\"fields\"`\n\t\tTimeZoneNames *TimeZoneNames `xml:\"timeZoneNames\"`\n\t} `xml:\"dates\"`\n\tNumbers *Numbers `xml:\"numbers\"`\n\tUnits   *struct {\n\t\tCommon\n\t\tUnit []*struct {\n\t\t\tCommon\n\t\t\tDisplayName []*struct {\n\t\t\t\tCommon\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"displayName\"`\n\t\t\tUnitPattern []*struct {\n\t\t\t\tCommon\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"unitPattern\"`\n\t\t\tPerUnitPattern []*Common `xml:\"perUnitPattern\"`\n\t\t} `xml:\"unit\"`\n\t\tUnitLength []*struct {\n\t\t\tCommon\n\t\t\tCompoundUnit []*struct {\n\t\t\t\tCommon\n\t\t\t\tCompoundUnitPattern []*Common `xml:\"compoundUnitPattern\"`\n\t\t\t} `xml:\"compoundUnit\"`\n\t\t\tUnit []*struct {\n\t\t\t\tCommon\n\t\t\t\tDisplayName []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"displayName\"`\n\t\t\t\tUnitPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"unitPattern\"`\n\t\t\t\tPerUnitPattern []*Common `xml:\"perUnitPattern\"`\n\t\t\t} `xml:\"unit\"`\n\t\t\tCoordinateUnit []*struct {\n\t\t\t\tCommon\n\t\t\t\tCoordinateUnitPattern []*Common `xml:\"coordinateUnitPattern\"`\n\t\t\t} `xml:\"coordinateUnit\"`\n\t\t} `xml:\"unitLength\"`\n\t\tDurationUnit []*struct {\n\t\t\tCommon\n\t\t\tDurationUnitPattern []*Common `xml:\"durationUnitPattern\"`\n\t\t} `xml:\"durationUnit\"`\n\t} `xml:\"units\"`\n\tListPatterns *struct {\n\t\tCommon\n\t\tListPattern []*struct {\n\t\t\tCommon\n\t\t\tListPatternPart []*Common `xml:\"listPatternPart\"`\n\t\t} `xml:\"listPattern\"`\n\t} `xml:\"listPatterns\"`\n\tCollations *struct {\n\t\tCommon\n\t\tVersion          string       `xml:\"version,attr\"`\n\t\tDefaultCollation *Common      `xml:\"defaultCollation\"`\n\t\tCollation        []*Collation `xml:\"collation\"`\n\t} `xml:\"collations\"`\n\tPosix *struct {\n\t\tCommon\n\t\tMessages []*struct {\n\t\t\tCommon\n\t\t\tYesstr  []*Common `xml:\"yesstr\"`\n\t\t\tNostr   []*Common `xml:\"nostr\"`\n\t\t\tYesexpr []*Common `xml:\"yesexpr\"`\n\t\t\tNoexpr  []*Common `xml:\"noexpr\"`\n\t\t} `xml:\"messages\"`\n\t} `xml:\"posix\"`\n\tCharacterLabels *struct {\n\t\tCommon\n\t\tCharacterLabelPattern []*struct {\n\t\t\tCommon\n\t\t\tCount string `xml:\"count,attr\"`\n\t\t} `xml:\"characterLabelPattern\"`\n\t\tCharacterLabel []*Common `xml:\"characterLabel\"`\n\t} `xml:\"characterLabels\"`\n\tSegmentations *struct {\n\t\tCommon\n\t\tSegmentation []*struct {\n\t\t\tCommon\n\t\t\tVariables *struct {\n\t\t\t\tCommon\n\t\t\t\tVariable []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tId string `xml:\"id,attr\"`\n\t\t\t\t} `xml:\"variable\"`\n\t\t\t} `xml:\"variables\"`\n\t\t\tSegmentRules *struct {\n\t\t\t\tCommon\n\t\t\t\tRule []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tId string `xml:\"id,attr\"`\n\t\t\t\t} `xml:\"rule\"`\n\t\t\t} `xml:\"segmentRules\"`\n\t\t\tExceptions *struct {\n\t\t\t\tCommon\n\t\t\t\tException []*Common `xml:\"exception\"`\n\t\t\t} `xml:\"exceptions\"`\n\t\t\tSuppressions *struct {\n\t\t\t\tCommon\n\t\t\t\tSuppression []*Common `xml:\"suppression\"`\n\t\t\t} `xml:\"suppressions\"`\n\t\t} `xml:\"segmentation\"`\n\t} `xml:\"segmentations\"`\n\tRbnf *struct {\n\t\tCommon\n\t\tRulesetGrouping []*struct {\n\t\t\tCommon\n\t\t\tRuleset []*struct {\n\t\t\t\tCommon\n\t\t\t\tAccess        string `xml:\"access,attr\"`\n\t\t\t\tAllowsParsing string `xml:\"allowsParsing,attr\"`\n\t\t\t\tRbnfrule      []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tValue  string `xml:\"value,attr\"`\n\t\t\t\t\tRadix  string `xml:\"radix,attr\"`\n\t\t\t\t\tDecexp string `xml:\"decexp,attr\"`\n\t\t\t\t} `xml:\"rbnfrule\"`\n\t\t\t} `xml:\"ruleset\"`\n\t\t} `xml:\"rulesetGrouping\"`\n\t} `xml:\"rbnf\"`\n\tAnnotations *struct {\n\t\tCommon\n\t\tAnnotation []*struct {\n\t\t\tCommon\n\t\t\tCp  string `xml:\"cp,attr\"`\n\t\t\tTts string `xml:\"tts,attr\"`\n\t\t} `xml:\"annotation\"`\n\t} `xml:\"annotations\"`\n\tMetadata *struct {\n\t\tCommon\n\t\tCasingData *struct {\n\t\t\tCommon\n\t\t\tCasingItem []*struct {\n\t\t\t\tCommon\n\t\t\t\tOverride   string `xml:\"override,attr\"`\n\t\t\t\tForceError string `xml:\"forceError,attr\"`\n\t\t\t} `xml:\"casingItem\"`\n\t\t} `xml:\"casingData\"`\n\t} `xml:\"metadata\"`\n\tReferences *struct {\n\t\tCommon\n\t\tReference []*struct {\n\t\t\tCommon\n\t\t\tUri string `xml:\"uri,attr\"`\n\t\t} `xml:\"reference\"`\n\t} `xml:\"references\"`\n}\n\n// Collation contains rules that specify a certain sort-order,\n// as a tailoring of the root order.\n// The parsed rules are obtained by passing a RuleProcessor to Collation's\n// Process method.\ntype Collation struct {\n\tCommon\n\tVisibility string  `xml:\"visibility,attr\"`\n\tBase       *Common `xml:\"base\"`\n\tImport     []*struct {\n\t\tCommon\n\t\tSource string `xml:\"source,attr\"`\n\t} `xml:\"import\"`\n\tSettings *struct {\n\t\tCommon\n\t\tStrength           string `xml:\"strength,attr\"`\n\t\tAlternate          string `xml:\"alternate,attr\"`\n\t\tBackwards          string `xml:\"backwards,attr\"`\n\t\tNormalization      string `xml:\"normalization,attr\"`\n\t\tCaseLevel          string `xml:\"caseLevel,attr\"`\n\t\tCaseFirst          string `xml:\"caseFirst,attr\"`\n\t\tHiraganaQuaternary string `xml:\"hiraganaQuaternary,attr\"`\n\t\tMaxVariable        string `xml:\"maxVariable,attr\"`\n\t\tNumeric            string `xml:\"numeric,attr\"`\n\t\tPrivate            string `xml:\"private,attr\"`\n\t\tVariableTop        string `xml:\"variableTop,attr\"`\n\t\tReorder            string `xml:\"reorder,attr\"`\n\t} `xml:\"settings\"`\n\tSuppressContractions *Common   `xml:\"suppress_contractions\"`\n\tOptimize             *Common   `xml:\"optimize\"`\n\tCr                   []*Common `xml:\"cr\"`\n\trulesElem\n}\n\n// Calendar specifies the fields used for formatting and parsing dates and times.\n// The month and quarter names are identified numerically, starting at 1.\n// The day (of the week) names are identified with short strings, since there is\n// no universally-accepted numeric designation.\ntype Calendar struct {\n\tCommon\n\tMonths *struct {\n\t\tCommon\n\t\tMonthContext []*struct {\n\t\t\tCommon\n\t\t\tMonthWidth []*struct {\n\t\t\t\tCommon\n\t\t\t\tMonth []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tYeartype string `xml:\"yeartype,attr\"`\n\t\t\t\t} `xml:\"month\"`\n\t\t\t} `xml:\"monthWidth\"`\n\t\t} `xml:\"monthContext\"`\n\t} `xml:\"months\"`\n\tMonthNames *struct {\n\t\tCommon\n\t\tMonth []*struct {\n\t\t\tCommon\n\t\t\tYeartype string `xml:\"yeartype,attr\"`\n\t\t} `xml:\"month\"`\n\t} `xml:\"monthNames\"`\n\tMonthAbbr *struct {\n\t\tCommon\n\t\tMonth []*struct {\n\t\t\tCommon\n\t\t\tYeartype string `xml:\"yeartype,attr\"`\n\t\t} `xml:\"month\"`\n\t} `xml:\"monthAbbr\"`\n\tMonthPatterns *struct {\n\t\tCommon\n\t\tMonthPatternContext []*struct {\n\t\t\tCommon\n\t\t\tMonthPatternWidth []*struct {\n\t\t\t\tCommon\n\t\t\t\tMonthPattern []*Common `xml:\"monthPattern\"`\n\t\t\t} `xml:\"monthPatternWidth\"`\n\t\t} `xml:\"monthPatternContext\"`\n\t} `xml:\"monthPatterns\"`\n\tDays *struct {\n\t\tCommon\n\t\tDayContext []*struct {\n\t\t\tCommon\n\t\t\tDayWidth []*struct {\n\t\t\t\tCommon\n\t\t\t\tDay []*Common `xml:\"day\"`\n\t\t\t} `xml:\"dayWidth\"`\n\t\t} `xml:\"dayContext\"`\n\t} `xml:\"days\"`\n\tDayNames *struct {\n\t\tCommon\n\t\tDay []*Common `xml:\"day\"`\n\t} `xml:\"dayNames\"`\n\tDayAbbr *struct {\n\t\tCommon\n\t\tDay []*Common `xml:\"day\"`\n\t} `xml:\"dayAbbr\"`\n\tQuarters *struct {\n\t\tCommon\n\t\tQuarterContext []*struct {\n\t\t\tCommon\n\t\t\tQuarterWidth []*struct {\n\t\t\t\tCommon\n\t\t\t\tQuarter []*Common `xml:\"quarter\"`\n\t\t\t} `xml:\"quarterWidth\"`\n\t\t} `xml:\"quarterContext\"`\n\t} `xml:\"quarters\"`\n\tWeek *struct {\n\t\tCommon\n\t\tMinDays []*struct {\n\t\t\tCommon\n\t\t\tCount string `xml:\"count,attr\"`\n\t\t} `xml:\"minDays\"`\n\t\tFirstDay []*struct {\n\t\t\tCommon\n\t\t\tDay string `xml:\"day,attr\"`\n\t\t} `xml:\"firstDay\"`\n\t\tWeekendStart []*struct {\n\t\t\tCommon\n\t\t\tDay  string `xml:\"day,attr\"`\n\t\t\tTime string `xml:\"time,attr\"`\n\t\t} `xml:\"weekendStart\"`\n\t\tWeekendEnd []*struct {\n\t\t\tCommon\n\t\t\tDay  string `xml:\"day,attr\"`\n\t\t\tTime string `xml:\"time,attr\"`\n\t\t} `xml:\"weekendEnd\"`\n\t} `xml:\"week\"`\n\tAm         []*Common `xml:\"am\"`\n\tPm         []*Common `xml:\"pm\"`\n\tDayPeriods *struct {\n\t\tCommon\n\t\tDayPeriodContext []*struct {\n\t\t\tCommon\n\t\t\tDayPeriodWidth []*struct {\n\t\t\t\tCommon\n\t\t\t\tDayPeriod []*Common `xml:\"dayPeriod\"`\n\t\t\t} `xml:\"dayPeriodWidth\"`\n\t\t} `xml:\"dayPeriodContext\"`\n\t} `xml:\"dayPeriods\"`\n\tEras *struct {\n\t\tCommon\n\t\tEraNames *struct {\n\t\t\tCommon\n\t\t\tEra []*Common `xml:\"era\"`\n\t\t} `xml:\"eraNames\"`\n\t\tEraAbbr *struct {\n\t\t\tCommon\n\t\t\tEra []*Common `xml:\"era\"`\n\t\t} `xml:\"eraAbbr\"`\n\t\tEraNarrow *struct {\n\t\t\tCommon\n\t\t\tEra []*Common `xml:\"era\"`\n\t\t} `xml:\"eraNarrow\"`\n\t} `xml:\"eras\"`\n\tCyclicNameSets *struct {\n\t\tCommon\n\t\tCyclicNameSet []*struct {\n\t\t\tCommon\n\t\t\tCyclicNameContext []*struct {\n\t\t\t\tCommon\n\t\t\t\tCyclicNameWidth []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCyclicName []*Common `xml:\"cyclicName\"`\n\t\t\t\t} `xml:\"cyclicNameWidth\"`\n\t\t\t} `xml:\"cyclicNameContext\"`\n\t\t} `xml:\"cyclicNameSet\"`\n\t} `xml:\"cyclicNameSets\"`\n\tDateFormats *struct {\n\t\tCommon\n\t\tDateFormatLength []*struct {\n\t\t\tCommon\n\t\t\tDateFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t\tDisplayName []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"displayName\"`\n\t\t\t} `xml:\"dateFormat\"`\n\t\t} `xml:\"dateFormatLength\"`\n\t} `xml:\"dateFormats\"`\n\tTimeFormats *struct {\n\t\tCommon\n\t\tTimeFormatLength []*struct {\n\t\t\tCommon\n\t\t\tTimeFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t\tDisplayName []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"displayName\"`\n\t\t\t} `xml:\"timeFormat\"`\n\t\t} `xml:\"timeFormatLength\"`\n\t} `xml:\"timeFormats\"`\n\tDateTimeFormats *struct {\n\t\tCommon\n\t\tDateTimeFormatLength []*struct {\n\t\t\tCommon\n\t\t\tDateTimeFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t\tDisplayName []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"displayName\"`\n\t\t\t} `xml:\"dateTimeFormat\"`\n\t\t} `xml:\"dateTimeFormatLength\"`\n\t\tAvailableFormats []*struct {\n\t\t\tCommon\n\t\t\tDateFormatItem []*struct {\n\t\t\t\tCommon\n\t\t\t\tId    string `xml:\"id,attr\"`\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"dateFormatItem\"`\n\t\t} `xml:\"availableFormats\"`\n\t\tAppendItems []*struct {\n\t\t\tCommon\n\t\t\tAppendItem []*struct {\n\t\t\t\tCommon\n\t\t\t\tRequest string `xml:\"request,attr\"`\n\t\t\t} `xml:\"appendItem\"`\n\t\t} `xml:\"appendItems\"`\n\t\tIntervalFormats []*struct {\n\t\t\tCommon\n\t\t\tIntervalFormatFallback []*Common `xml:\"intervalFormatFallback\"`\n\t\t\tIntervalFormatItem     []*struct {\n\t\t\t\tCommon\n\t\t\t\tId                 string `xml:\"id,attr\"`\n\t\t\t\tGreatestDifference []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tId string `xml:\"id,attr\"`\n\t\t\t\t} `xml:\"greatestDifference\"`\n\t\t\t} `xml:\"intervalFormatItem\"`\n\t\t} `xml:\"intervalFormats\"`\n\t} `xml:\"dateTimeFormats\"`\n\tFields []*struct {\n\t\tCommon\n\t\tField []*struct {\n\t\t\tCommon\n\t\t\tDisplayName []*struct {\n\t\t\t\tCommon\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"displayName\"`\n\t\t\tRelative     []*Common `xml:\"relative\"`\n\t\t\tRelativeTime []*struct {\n\t\t\t\tCommon\n\t\t\t\tRelativeTimePattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"relativeTimePattern\"`\n\t\t\t} `xml:\"relativeTime\"`\n\t\t\tRelativePeriod []*Common `xml:\"relativePeriod\"`\n\t\t} `xml:\"field\"`\n\t} `xml:\"fields\"`\n}\ntype TimeZoneNames struct {\n\tCommon\n\tHourFormat           []*Common `xml:\"hourFormat\"`\n\tHoursFormat          []*Common `xml:\"hoursFormat\"`\n\tGmtFormat            []*Common `xml:\"gmtFormat\"`\n\tGmtZeroFormat        []*Common `xml:\"gmtZeroFormat\"`\n\tRegionFormat         []*Common `xml:\"regionFormat\"`\n\tFallbackFormat       []*Common `xml:\"fallbackFormat\"`\n\tFallbackRegionFormat []*Common `xml:\"fallbackRegionFormat\"`\n\tAbbreviationFallback []*Common `xml:\"abbreviationFallback\"`\n\tPreferenceOrdering   []*Common `xml:\"preferenceOrdering\"`\n\tSingleCountries      []*struct {\n\t\tCommon\n\t\tList string `xml:\"list,attr\"`\n\t} `xml:\"singleCountries\"`\n\tZone []*struct {\n\t\tCommon\n\t\tLong []*struct {\n\t\t\tCommon\n\t\t\tGeneric  []*Common `xml:\"generic\"`\n\t\t\tStandard []*Common `xml:\"standard\"`\n\t\t\tDaylight []*Common `xml:\"daylight\"`\n\t\t} `xml:\"long\"`\n\t\tShort []*struct {\n\t\t\tCommon\n\t\t\tGeneric  []*Common `xml:\"generic\"`\n\t\t\tStandard []*Common `xml:\"standard\"`\n\t\t\tDaylight []*Common `xml:\"daylight\"`\n\t\t} `xml:\"short\"`\n\t\tCommonlyUsed []*struct {\n\t\t\tCommon\n\t\t\tUsed string `xml:\"used,attr\"`\n\t\t} `xml:\"commonlyUsed\"`\n\t\tExemplarCity []*Common `xml:\"exemplarCity\"`\n\t} `xml:\"zone\"`\n\tMetazone []*struct {\n\t\tCommon\n\t\tLong []*struct {\n\t\t\tCommon\n\t\t\tGeneric  []*Common `xml:\"generic\"`\n\t\t\tStandard []*Common `xml:\"standard\"`\n\t\t\tDaylight []*Common `xml:\"daylight\"`\n\t\t} `xml:\"long\"`\n\t\tShort []*struct {\n\t\t\tCommon\n\t\t\tGeneric  []*Common `xml:\"generic\"`\n\t\t\tStandard []*Common `xml:\"standard\"`\n\t\t\tDaylight []*Common `xml:\"daylight\"`\n\t\t} `xml:\"short\"`\n\t\tCommonlyUsed []*struct {\n\t\t\tCommon\n\t\t\tUsed string `xml:\"used,attr\"`\n\t\t} `xml:\"commonlyUsed\"`\n\t} `xml:\"metazone\"`\n}\n\n// LocaleDisplayNames specifies localized display names for for scripts, languages,\n// countries, currencies, and variants.\ntype LocaleDisplayNames struct {\n\tCommon\n\tLocaleDisplayPattern *struct {\n\t\tCommon\n\t\tLocalePattern        []*Common `xml:\"localePattern\"`\n\t\tLocaleSeparator      []*Common `xml:\"localeSeparator\"`\n\t\tLocaleKeyTypePattern []*Common `xml:\"localeKeyTypePattern\"`\n\t} `xml:\"localeDisplayPattern\"`\n\tLanguages *struct {\n\t\tCommon\n\t\tLanguage []*Common `xml:\"language\"`\n\t} `xml:\"languages\"`\n\tScripts *struct {\n\t\tCommon\n\t\tScript []*Common `xml:\"script\"`\n\t} `xml:\"scripts\"`\n\tTerritories *struct {\n\t\tCommon\n\t\tTerritory []*Common `xml:\"territory\"`\n\t} `xml:\"territories\"`\n\tSubdivisions *struct {\n\t\tCommon\n\t\tSubdivision []*Common `xml:\"subdivision\"`\n\t} `xml:\"subdivisions\"`\n\tVariants *struct {\n\t\tCommon\n\t\tVariant []*Common `xml:\"variant\"`\n\t} `xml:\"variants\"`\n\tKeys *struct {\n\t\tCommon\n\t\tKey []*Common `xml:\"key\"`\n\t} `xml:\"keys\"`\n\tTypes *struct {\n\t\tCommon\n\t\tType []*struct {\n\t\t\tCommon\n\t\t\tKey string `xml:\"key,attr\"`\n\t\t} `xml:\"type\"`\n\t} `xml:\"types\"`\n\tTransformNames *struct {\n\t\tCommon\n\t\tTransformName []*Common `xml:\"transformName\"`\n\t} `xml:\"transformNames\"`\n\tMeasurementSystemNames *struct {\n\t\tCommon\n\t\tMeasurementSystemName []*Common `xml:\"measurementSystemName\"`\n\t} `xml:\"measurementSystemNames\"`\n\tCodePatterns *struct {\n\t\tCommon\n\t\tCodePattern []*Common `xml:\"codePattern\"`\n\t} `xml:\"codePatterns\"`\n}\n\n// Numbers supplies information for formatting and parsing numbers and currencies.\ntype Numbers struct {\n\tCommon\n\tDefaultNumberingSystem []*Common `xml:\"defaultNumberingSystem\"`\n\tOtherNumberingSystems  []*struct {\n\t\tCommon\n\t\tNative      []*Common `xml:\"native\"`\n\t\tTraditional []*Common `xml:\"traditional\"`\n\t\tFinance     []*Common `xml:\"finance\"`\n\t} `xml:\"otherNumberingSystems\"`\n\tMinimumGroupingDigits []*Common `xml:\"minimumGroupingDigits\"`\n\tSymbols               []*struct {\n\t\tCommon\n\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\tDecimal      []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"decimal\"`\n\t\tGroup []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"group\"`\n\t\tList []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"list\"`\n\t\tPercentSign []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"percentSign\"`\n\t\tNativeZeroDigit []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"nativeZeroDigit\"`\n\t\tPatternDigit []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"patternDigit\"`\n\t\tPlusSign []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"plusSign\"`\n\t\tMinusSign []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"minusSign\"`\n\t\tExponential []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"exponential\"`\n\t\tSuperscriptingExponent []*Common `xml:\"superscriptingExponent\"`\n\t\tPerMille               []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"perMille\"`\n\t\tInfinity []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"infinity\"`\n\t\tNan []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"nan\"`\n\t\tCurrencyDecimal []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"currencyDecimal\"`\n\t\tCurrencyGroup []*struct {\n\t\t\tCommon\n\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t} `xml:\"currencyGroup\"`\n\t\tTimeSeparator []*Common `xml:\"timeSeparator\"`\n\t} `xml:\"symbols\"`\n\tDecimalFormats []*struct {\n\t\tCommon\n\t\tNumberSystem        string `xml:\"numberSystem,attr\"`\n\t\tDecimalFormatLength []*struct {\n\t\t\tCommon\n\t\t\tDecimalFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t} `xml:\"decimalFormat\"`\n\t\t} `xml:\"decimalFormatLength\"`\n\t} `xml:\"decimalFormats\"`\n\tScientificFormats []*struct {\n\t\tCommon\n\t\tNumberSystem           string `xml:\"numberSystem,attr\"`\n\t\tScientificFormatLength []*struct {\n\t\t\tCommon\n\t\t\tScientificFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t} `xml:\"scientificFormat\"`\n\t\t} `xml:\"scientificFormatLength\"`\n\t} `xml:\"scientificFormats\"`\n\tPercentFormats []*struct {\n\t\tCommon\n\t\tNumberSystem        string `xml:\"numberSystem,attr\"`\n\t\tPercentFormatLength []*struct {\n\t\t\tCommon\n\t\t\tPercentFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t} `xml:\"percentFormat\"`\n\t\t} `xml:\"percentFormatLength\"`\n\t} `xml:\"percentFormats\"`\n\tCurrencyFormats []*struct {\n\t\tCommon\n\t\tNumberSystem    string `xml:\"numberSystem,attr\"`\n\t\tCurrencySpacing []*struct {\n\t\t\tCommon\n\t\t\tBeforeCurrency []*struct {\n\t\t\t\tCommon\n\t\t\t\tCurrencyMatch    []*Common `xml:\"currencyMatch\"`\n\t\t\t\tSurroundingMatch []*Common `xml:\"surroundingMatch\"`\n\t\t\t\tInsertBetween    []*Common `xml:\"insertBetween\"`\n\t\t\t} `xml:\"beforeCurrency\"`\n\t\t\tAfterCurrency []*struct {\n\t\t\t\tCommon\n\t\t\t\tCurrencyMatch    []*Common `xml:\"currencyMatch\"`\n\t\t\t\tSurroundingMatch []*Common `xml:\"surroundingMatch\"`\n\t\t\t\tInsertBetween    []*Common `xml:\"insertBetween\"`\n\t\t\t} `xml:\"afterCurrency\"`\n\t\t} `xml:\"currencySpacing\"`\n\t\tCurrencyFormatLength []*struct {\n\t\t\tCommon\n\t\t\tCurrencyFormat []*struct {\n\t\t\t\tCommon\n\t\t\t\tPattern []*struct {\n\t\t\t\t\tCommon\n\t\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t\t} `xml:\"pattern\"`\n\t\t\t} `xml:\"currencyFormat\"`\n\t\t} `xml:\"currencyFormatLength\"`\n\t\tUnitPattern []*struct {\n\t\t\tCommon\n\t\t\tCount string `xml:\"count,attr\"`\n\t\t} `xml:\"unitPattern\"`\n\t} `xml:\"currencyFormats\"`\n\tCurrencies *struct {\n\t\tCommon\n\t\tCurrency []*struct {\n\t\t\tCommon\n\t\t\tPattern []*struct {\n\t\t\t\tCommon\n\t\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\t\tCount   string `xml:\"count,attr\"`\n\t\t\t} `xml:\"pattern\"`\n\t\t\tDisplayName []*struct {\n\t\t\t\tCommon\n\t\t\t\tCount string `xml:\"count,attr\"`\n\t\t\t} `xml:\"displayName\"`\n\t\t\tSymbol  []*Common `xml:\"symbol\"`\n\t\t\tDecimal []*struct {\n\t\t\t\tCommon\n\t\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t\t} `xml:\"decimal\"`\n\t\t\tGroup []*struct {\n\t\t\t\tCommon\n\t\t\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\t\t} `xml:\"group\"`\n\t\t} `xml:\"currency\"`\n\t} `xml:\"currencies\"`\n\tMiscPatterns []*struct {\n\t\tCommon\n\t\tNumberSystem string `xml:\"numberSystem,attr\"`\n\t\tPattern      []*struct {\n\t\t\tCommon\n\t\t\tNumbers string `xml:\"numbers,attr\"`\n\t\t\tCount   string `xml:\"count,attr\"`\n\t\t} `xml:\"pattern\"`\n\t} `xml:\"miscPatterns\"`\n}\n\n// Version is the version of CLDR from which the XML definitions are generated.\nconst Version = \"30\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/norm/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": "12fa-docker-golang/chapter3/viper/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// mkStreamSafe is a shorthand for declaring a streamSafe var and calling\n// first on it.\nfunc mkStreamSafe(p Properties) streamSafe {\n\treturn streamSafe(p.nTrailingNonStarters())\n}\n\n// first inserts the first rune of a segment.\nfunc (ss *streamSafe) first(p Properties) {\n\tif *ss != 0 {\n\t\tpanic(\"!= 0\")\n\t}\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 = 0\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\trb.ss = 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\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 http://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 http://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// 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": "12fa-docker-golang/chapter3/viper/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\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\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.\nfunc combine(a, b rune) rune {\n\tkey := uint32(uint16(a))<<16 + uint32(uint16(b))\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": "12fa-docker-golang/chapter3/viper/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\tif in.bytes == nil {\n\t\tif !isHangulString(in.str[p:]) {\n\t\t\treturn 0\n\t\t}\n\t\tr, _ = 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, _ = utf8.DecodeRune(in.bytes[p:])\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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}\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}\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 UTF8 rune.\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\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\ti.setDone()\n\t\treturn i.rb.src.bytes[i.p: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.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.ss.first(info)\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.ss.next(info)\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\tss := mkStreamSafe(i.info)\n\tfor {\n\t\tif sz := int(i.info.size); sz <= 1 {\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\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 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 := 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\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\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}\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\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\tss := mkStreamSafe(i.info)\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.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 := 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\ti.p = startp\n\ti.info = i.rb.f.info(i.rb.src, i.p)\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": "12fa-docker-golang/chapter3/viper/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\"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 http://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\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\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\tfmt.Fprintf(w, \"0x%.8X: 0x%.4X,\\n\", key, i)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprintf(w, \"}\\n\\n\")\n\t}\n\n\tfmt.Fprintf(w, \"// Total size of tables: %dKB (%d bytes)\\n\", (size+512)/1024, size)\n\tgen.WriteGoFile(\"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 http://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.WriteGoFile(\"data_test.go\", \"norm\", w.Bytes())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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: http://unicode.org/reports/tr15/ and\n// http://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\tss.first(info)\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\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 rb.nrune > 0 {\n\t\tif s := rb.ss.next(info); s == ssStarter {\n\t\t\tgoto end\n\t\t} else if s == ssOverflow {\n\t\t\trb.insertCGJ()\n\t\t\tgoto end\n\t\t}\n\t} else {\n\t\trb.ss.first(info)\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": "12fa-docker-golang/chapter3/viper/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// an 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": "12fa-docker-golang/chapter3/viper/vendor/golang.org/x/text/unicode/norm/tables.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\npackage norm\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{\n\t0x00410300: 0x00C0,\n\t0x00410301: 0x00C1,\n\t0x00410302: 0x00C2,\n\t0x00410303: 0x00C3,\n\t0x00410308: 0x00C4,\n\t0x0041030A: 0x00C5,\n\t0x00430327: 0x00C7,\n\t0x00450300: 0x00C8,\n\t0x00450301: 0x00C9,\n\t0x00450302: 0x00CA,\n\t0x00450308: 0x00CB,\n\t0x00490300: 0x00CC,\n\t0x00490301: 0x00CD,\n\t0x00490302: 0x00CE,\n\t0x00490308: 0x00CF,\n\t0x004E0303: 0x00D1,\n\t0x004F0300: 0x00D2,\n\t0x004F0301: 0x00D3,\n\t0x004F0302: 0x00D4,\n\t0x004F0303: 0x00D5,\n\t0x004F0308: 0x00D6,\n\t0x00550300: 0x00D9,\n\t0x00550301: 0x00DA,\n\t0x00550302: 0x00DB,\n\t0x00550308: 0x00DC,\n\t0x00590301: 0x00DD,\n\t0x00610300: 0x00E0,\n\t0x00610301: 0x00E1,\n\t0x00610302: 0x00E2,\n\t0x00610303: 0x00E3,\n\t0x00610308: 0x00E4,\n\t0x0061030A: 0x00E5,\n\t0x00630327: 0x00E7,\n\t0x00650300: 0x00E8,\n\t0x00650301: 0x00E9,\n\t0x00650302: 0x00EA,\n\t0x00650308: 0x00EB,\n\t0x00690300: 0x00EC,\n\t0x00690301: 0x00ED,\n\t0x00690302: 0x00EE,\n\t0x00690308: 0x00EF,\n\t0x006E0303: 0x00F1,\n\t0x006F0300: 0x00F2,\n\t0x006F0301: 0x00F3,\n\t0x006F0302: 0x00F4,\n\t0x006F0303: 0x00F5,\n\t0x006F0308: 0x00F6,\n\t0x00750300: 0x00F9,\n\t0x00750301: 0x00FA,\n\t0x00750302: 0x00FB,\n\t0x00750308: 0x00FC,\n\t0x00790301: 0x00FD,\n\t0x00790308: 0x00FF,\n\t0x00410304: 0x0100,\n\t0x00610304: 0x0101,\n\t0x00410306: 0x0102,\n\t0x00610306: 0x0103,\n\t0x00410328: 0x0104,\n\t0x00610328: 0x0105,\n\t0x00430301: 0x0106,\n\t0x00630301: 0x0107,\n\t0x00430302: 0x0108,\n\t0x00630302: 0x0109,\n\t0x00430307: 0x010A,\n\t0x00630307: 0x010B,\n\t0x0043030C: 0x010C,\n\t0x0063030C: 0x010D,\n\t0x0044030C: 0x010E,\n\t0x0064030C: 0x010F,\n\t0x00450304: 0x0112,\n\t0x00650304: 0x0113,\n\t0x00450306: 0x0114,\n\t0x00650306: 0x0115,\n\t0x00450307: 0x0116,\n\t0x00650307: 0x0117,\n\t0x00450328: 0x0118,\n\t0x00650328: 0x0119,\n\t0x0045030C: 0x011A,\n\t0x0065030C: 0x011B,\n\t0x00470302: 0x011C,\n\t0x00670302: 0x011D,\n\t0x00470306: 0x011E,\n\t0x00670306: 0x011F,\n\t0x00470307: 0x0120,\n\t0x00670307: 0x0121,\n\t0x00470327: 0x0122,\n\t0x00670327: 0x0123,\n\t0x00480302: 0x0124,\n\t0x00680302: 0x0125,\n\t0x00490303: 0x0128,\n\t0x00690303: 0x0129,\n\t0x00490304: 0x012A,\n\t0x00690304: 0x012B,\n\t0x00490306: 0x012C,\n\t0x00690306: 0x012D,\n\t0x00490328: 0x012E,\n\t0x00690328: 0x012F,\n\t0x00490307: 0x0130,\n\t0x004A0302: 0x0134,\n\t0x006A0302: 0x0135,\n\t0x004B0327: 0x0136,\n\t0x006B0327: 0x0137,\n\t0x004C0301: 0x0139,\n\t0x006C0301: 0x013A,\n\t0x004C0327: 0x013B,\n\t0x006C0327: 0x013C,\n\t0x004C030C: 0x013D,\n\t0x006C030C: 0x013E,\n\t0x004E0301: 0x0143,\n\t0x006E0301: 0x0144,\n\t0x004E0327: 0x0145,\n\t0x006E0327: 0x0146,\n\t0x004E030C: 0x0147,\n\t0x006E030C: 0x0148,\n\t0x004F0304: 0x014C,\n\t0x006F0304: 0x014D,\n\t0x004F0306: 0x014E,\n\t0x006F0306: 0x014F,\n\t0x004F030B: 0x0150,\n\t0x006F030B: 0x0151,\n\t0x00520301: 0x0154,\n\t0x00720301: 0x0155,\n\t0x00520327: 0x0156,\n\t0x00720327: 0x0157,\n\t0x0052030C: 0x0158,\n\t0x0072030C: 0x0159,\n\t0x00530301: 0x015A,\n\t0x00730301: 0x015B,\n\t0x00530302: 0x015C,\n\t0x00730302: 0x015D,\n\t0x00530327: 0x015E,\n\t0x00730327: 0x015F,\n\t0x0053030C: 0x0160,\n\t0x0073030C: 0x0161,\n\t0x00540327: 0x0162,\n\t0x00740327: 0x0163,\n\t0x0054030C: 0x0164,\n\t0x0074030C: 0x0165,\n\t0x00550303: 0x0168,\n\t0x00750303: 0x0169,\n\t0x00550304: 0x016A,\n\t0x00750304: 0x016B,\n\t0x00550306: 0x016C,\n\t0x00750306: 0x016D,\n\t0x0055030A: 0x016E,\n\t0x0075030A: 0x016F,\n\t0x0055030B: 0x0170,\n\t0x0075030B: 0x0171,\n\t0x00550328: 0x0172,\n\t0x00750328: 0x0173,\n\t0x00570302: 0x0174,\n\t0x00770302: 0x0175,\n\t0x00590302: 0x0176,\n\t0x00790302: 0x0177,\n\t0x00590308: 0x0178,\n\t0x005A0301: 0x0179,\n\t0x007A0301: 0x017A,\n\t0x005A0307: 0x017B,\n\t0x007A0307: 0x017C,\n\t0x005A030C: 0x017D,\n\t0x007A030C: 0x017E,\n\t0x004F031B: 0x01A0,\n\t0x006F031B: 0x01A1,\n\t0x0055031B: 0x01AF,\n\t0x0075031B: 0x01B0,\n\t0x0041030C: 0x01CD,\n\t0x0061030C: 0x01CE,\n\t0x0049030C: 0x01CF,\n\t0x0069030C: 0x01D0,\n\t0x004F030C: 0x01D1,\n\t0x006F030C: 0x01D2,\n\t0x0055030C: 0x01D3,\n\t0x0075030C: 0x01D4,\n\t0x00DC0304: 0x01D5,\n\t0x00FC0304: 0x01D6,\n\t0x00DC0301: 0x01D7,\n\t0x00FC0301: 0x01D8,\n\t0x00DC030C: 0x01D9,\n\t0x00FC030C: 0x01DA,\n\t0x00DC0300: 0x01DB,\n\t0x00FC0300: 0x01DC,\n\t0x00C40304: 0x01DE,\n\t0x00E40304: 0x01DF,\n\t0x02260304: 0x01E0,\n\t0x02270304: 0x01E1,\n\t0x00C60304: 0x01E2,\n\t0x00E60304: 0x01E3,\n\t0x0047030C: 0x01E6,\n\t0x0067030C: 0x01E7,\n\t0x004B030C: 0x01E8,\n\t0x006B030C: 0x01E9,\n\t0x004F0328: 0x01EA,\n\t0x006F0328: 0x01EB,\n\t0x01EA0304: 0x01EC,\n\t0x01EB0304: 0x01ED,\n\t0x01B7030C: 0x01EE,\n\t0x0292030C: 0x01EF,\n\t0x006A030C: 0x01F0,\n\t0x00470301: 0x01F4,\n\t0x00670301: 0x01F5,\n\t0x004E0300: 0x01F8,\n\t0x006E0300: 0x01F9,\n\t0x00C50301: 0x01FA,\n\t0x00E50301: 0x01FB,\n\t0x00C60301: 0x01FC,\n\t0x00E60301: 0x01FD,\n\t0x00D80301: 0x01FE,\n\t0x00F80301: 0x01FF,\n\t0x0041030F: 0x0200,\n\t0x0061030F: 0x0201,\n\t0x00410311: 0x0202,\n\t0x00610311: 0x0203,\n\t0x0045030F: 0x0204,\n\t0x0065030F: 0x0205,\n\t0x00450311: 0x0206,\n\t0x00650311: 0x0207,\n\t0x0049030F: 0x0208,\n\t0x0069030F: 0x0209,\n\t0x00490311: 0x020A,\n\t0x00690311: 0x020B,\n\t0x004F030F: 0x020C,\n\t0x006F030F: 0x020D,\n\t0x004F0311: 0x020E,\n\t0x006F0311: 0x020F,\n\t0x0052030F: 0x0210,\n\t0x0072030F: 0x0211,\n\t0x00520311: 0x0212,\n\t0x00720311: 0x0213,\n\t0x0055030F: 0x0214,\n\t0x0075030F: 0x0215,\n\t0x00550311: 0x0216,\n\t0x00750311: 0x0217,\n\t0x00530326: 0x0218,\n\t0x00730326: 0x0219,\n\t0x00540326: 0x021A,\n\t0x00740326: 0x021B,\n\t0x0048030C: 0x021E,\n\t0x0068030C: 0x021F,\n\t0x00410307: 0x0226,\n\t0x00610307: 0x0227,\n\t0x00450327: 0x0228,\n\t0x00650327: 0x0229,\n\t0x00D60304: 0x022A,\n\t0x00F60304: 0x022B,\n\t0x00D50304: 0x022C,\n\t0x00F50304: 0x022D,\n\t0x004F0307: 0x022E,\n\t0x006F0307: 0x022F,\n\t0x022E0304: 0x0230,\n\t0x022F0304: 0x0231,\n\t0x00590304: 0x0232,\n\t0x00790304: 0x0233,\n\t0x00A80301: 0x0385,\n\t0x03910301: 0x0386,\n\t0x03950301: 0x0388,\n\t0x03970301: 0x0389,\n\t0x03990301: 0x038A,\n\t0x039F0301: 0x038C,\n\t0x03A50301: 0x038E,\n\t0x03A90301: 0x038F,\n\t0x03CA0301: 0x0390,\n\t0x03990308: 0x03AA,\n\t0x03A50308: 0x03AB,\n\t0x03B10301: 0x03AC,\n\t0x03B50301: 0x03AD,\n\t0x03B70301: 0x03AE,\n\t0x03B90301: 0x03AF,\n\t0x03CB0301: 0x03B0,\n\t0x03B90308: 0x03CA,\n\t0x03C50308: 0x03CB,\n\t0x03BF0301: 0x03CC,\n\t0x03C50301: 0x03CD,\n\t0x03C90301: 0x03CE,\n\t0x03D20301: 0x03D3,\n\t0x03D20308: 0x03D4,\n\t0x04150300: 0x0400,\n\t0x04150308: 0x0401,\n\t0x04130301: 0x0403,\n\t0x04060308: 0x0407,\n\t0x041A0301: 0x040C,\n\t0x04180300: 0x040D,\n\t0x04230306: 0x040E,\n\t0x04180306: 0x0419,\n\t0x04380306: 0x0439,\n\t0x04350300: 0x0450,\n\t0x04350308: 0x0451,\n\t0x04330301: 0x0453,\n\t0x04560308: 0x0457,\n\t0x043A0301: 0x045C,\n\t0x04380300: 0x045D,\n\t0x04430306: 0x045E,\n\t0x0474030F: 0x0476,\n\t0x0475030F: 0x0477,\n\t0x04160306: 0x04C1,\n\t0x04360306: 0x04C2,\n\t0x04100306: 0x04D0,\n\t0x04300306: 0x04D1,\n\t0x04100308: 0x04D2,\n\t0x04300308: 0x04D3,\n\t0x04150306: 0x04D6,\n\t0x04350306: 0x04D7,\n\t0x04D80308: 0x04DA,\n\t0x04D90308: 0x04DB,\n\t0x04160308: 0x04DC,\n\t0x04360308: 0x04DD,\n\t0x04170308: 0x04DE,\n\t0x04370308: 0x04DF,\n\t0x04180304: 0x04E2,\n\t0x04380304: 0x04E3,\n\t0x04180308: 0x04E4,\n\t0x04380308: 0x04E5,\n\t0x041E0308: 0x04E6,\n\t0x043E0308: 0x04E7,\n\t0x04E80308: 0x04EA,\n\t0x04E90308: 0x04EB,\n\t0x042D0308: 0x04EC,\n\t0x044D0308: 0x04ED,\n\t0x04230304: 0x04EE,\n\t0x04430304: 0x04EF,\n\t0x04230308: 0x04F0,\n\t0x04430308: 0x04F1,\n\t0x0423030B: 0x04F2,\n\t0x0443030B: 0x04F3,\n\t0x04270308: 0x04F4,\n\t0x04470308: 0x04F5,\n\t0x042B0308: 0x04F8,\n\t0x044B0308: 0x04F9,\n\t0x06270653: 0x0622,\n\t0x06270654: 0x0623,\n\t0x06480654: 0x0624,\n\t0x06270655: 0x0625,\n\t0x064A0654: 0x0626,\n\t0x06D50654: 0x06C0,\n\t0x06C10654: 0x06C2,\n\t0x06D20654: 0x06D3,\n\t0x0928093C: 0x0929,\n\t0x0930093C: 0x0931,\n\t0x0933093C: 0x0934,\n\t0x09C709BE: 0x09CB,\n\t0x09C709D7: 0x09CC,\n\t0x0B470B56: 0x0B48,\n\t0x0B470B3E: 0x0B4B,\n\t0x0B470B57: 0x0B4C,\n\t0x0B920BD7: 0x0B94,\n\t0x0BC60BBE: 0x0BCA,\n\t0x0BC70BBE: 0x0BCB,\n\t0x0BC60BD7: 0x0BCC,\n\t0x0C460C56: 0x0C48,\n\t0x0CBF0CD5: 0x0CC0,\n\t0x0CC60CD5: 0x0CC7,\n\t0x0CC60CD6: 0x0CC8,\n\t0x0CC60CC2: 0x0CCA,\n\t0x0CCA0CD5: 0x0CCB,\n\t0x0D460D3E: 0x0D4A,\n\t0x0D470D3E: 0x0D4B,\n\t0x0D460D57: 0x0D4C,\n\t0x0DD90DCA: 0x0DDA,\n\t0x0DD90DCF: 0x0DDC,\n\t0x0DDC0DCA: 0x0DDD,\n\t0x0DD90DDF: 0x0DDE,\n\t0x1025102E: 0x1026,\n\t0x1B051B35: 0x1B06,\n\t0x1B071B35: 0x1B08,\n\t0x1B091B35: 0x1B0A,\n\t0x1B0B1B35: 0x1B0C,\n\t0x1B0D1B35: 0x1B0E,\n\t0x1B111B35: 0x1B12,\n\t0x1B3A1B35: 0x1B3B,\n\t0x1B3C1B35: 0x1B3D,\n\t0x1B3E1B35: 0x1B40,\n\t0x1B3F1B35: 0x1B41,\n\t0x1B421B35: 0x1B43,\n\t0x00410325: 0x1E00,\n\t0x00610325: 0x1E01,\n\t0x00420307: 0x1E02,\n\t0x00620307: 0x1E03,\n\t0x00420323: 0x1E04,\n\t0x00620323: 0x1E05,\n\t0x00420331: 0x1E06,\n\t0x00620331: 0x1E07,\n\t0x00C70301: 0x1E08,\n\t0x00E70301: 0x1E09,\n\t0x00440307: 0x1E0A,\n\t0x00640307: 0x1E0B,\n\t0x00440323: 0x1E0C,\n\t0x00640323: 0x1E0D,\n\t0x00440331: 0x1E0E,\n\t0x00640331: 0x1E0F,\n\t0x00440327: 0x1E10,\n\t0x00640327: 0x1E11,\n\t0x0044032D: 0x1E12,\n\t0x0064032D: 0x1E13,\n\t0x01120300: 0x1E14,\n\t0x01130300: 0x1E15,\n\t0x01120301: 0x1E16,\n\t0x01130301: 0x1E17,\n\t0x0045032D: 0x1E18,\n\t0x0065032D: 0x1E19,\n\t0x00450330: 0x1E1A,\n\t0x00650330: 0x1E1B,\n\t0x02280306: 0x1E1C,\n\t0x02290306: 0x1E1D,\n\t0x00460307: 0x1E1E,\n\t0x00660307: 0x1E1F,\n\t0x00470304: 0x1E20,\n\t0x00670304: 0x1E21,\n\t0x00480307: 0x1E22,\n\t0x00680307: 0x1E23,\n\t0x00480323: 0x1E24,\n\t0x00680323: 0x1E25,\n\t0x00480308: 0x1E26,\n\t0x00680308: 0x1E27,\n\t0x00480327: 0x1E28,\n\t0x00680327: 0x1E29,\n\t0x0048032E: 0x1E2A,\n\t0x0068032E: 0x1E2B,\n\t0x00490330: 0x1E2C,\n\t0x00690330: 0x1E2D,\n\t0x00CF0301: 0x1E2E,\n\t0x00EF0301: 0x1E2F,\n\t0x004B0301: 0x1E30,\n\t0x006B0301: 0x1E31,\n\t0x004B0323: 0x1E32,\n\t0x006B0323: 0x1E33,\n\t0x004B0331: 0x1E34,\n\t0x006B0331: 0x1E35,\n\t0x004C0323: 0x1E36,\n\t0x006C0323: 0x1E37,\n\t0x1E360304: 0x1E38,\n\t0x1E370304: 0x1E39,\n\t0x004C0331: 0x1E3A,\n\t0x006C0331: 0x1E3B,\n\t0x004C032D: 0x1E3C,\n\t0x006C032D: 0x1E3D,\n\t0x004D0301: 0x1E3E,\n\t0x006D0301: 0x1E3F,\n\t0x004D0307: 0x1E40,\n\t0x006D0307: 0x1E41,\n\t0x004D0323: 0x1E42,\n\t0x006D0323: 0x1E43,\n\t0x004E0307: 0x1E44,\n\t0x006E0307: 0x1E45,\n\t0x004E0323: 0x1E46,\n\t0x006E0323: 0x1E47,\n\t0x004E0331: 0x1E48,\n\t0x006E0331: 0x1E49,\n\t0x004E032D: 0x1E4A,\n\t0x006E032D: 0x1E4B,\n\t0x00D50301: 0x1E4C,\n\t0x00F50301: 0x1E4D,\n\t0x00D50308: 0x1E4E,\n\t0x00F50308: 0x1E4F,\n\t0x014C0300: 0x1E50,\n\t0x014D0300: 0x1E51,\n\t0x014C0301: 0x1E52,\n\t0x014D0301: 0x1E53,\n\t0x00500301: 0x1E54,\n\t0x00700301: 0x1E55,\n\t0x00500307: 0x1E56,\n\t0x00700307: 0x1E57,\n\t0x00520307: 0x1E58,\n\t0x00720307: 0x1E59,\n\t0x00520323: 0x1E5A,\n\t0x00720323: 0x1E5B,\n\t0x1E5A0304: 0x1E5C,\n\t0x1E5B0304: 0x1E5D,\n\t0x00520331: 0x1E5E,\n\t0x00720331: 0x1E5F,\n\t0x00530307: 0x1E60,\n\t0x00730307: 0x1E61,\n\t0x00530323: 0x1E62,\n\t0x00730323: 0x1E63,\n\t0x015A0307: 0x1E64,\n\t0x015B0307: 0x1E65,\n\t0x01600307: 0x1E66,\n\t0x01610307: 0x1E67,\n\t0x1E620307: 0x1E68,\n\t0x1E630307: 0x1E69,\n\t0x00540307: 0x1E6A,\n\t0x00740307: 0x1E6B,\n\t0x00540323: 0x1E6C,\n\t0x00740323: 0x1E6D,\n\t0x00540331: 0x1E6E,\n\t0x00740331: 0x1E6F,\n\t0x0054032D: 0x1E70,\n\t0x0074032D: 0x1E71,\n\t0x00550324: 0x1E72,\n\t0x00750324: 0x1E73,\n\t0x00550330: 0x1E74,\n\t0x00750330: 0x1E75,\n\t0x0055032D: 0x1E76,\n\t0x0075032D: 0x1E77,\n\t0x01680301: 0x1E78,\n\t0x01690301: 0x1E79,\n\t0x016A0308: 0x1E7A,\n\t0x016B0308: 0x1E7B,\n\t0x00560303: 0x1E7C,\n\t0x00760303: 0x1E7D,\n\t0x00560323: 0x1E7E,\n\t0x00760323: 0x1E7F,\n\t0x00570300: 0x1E80,\n\t0x00770300: 0x1E81,\n\t0x00570301: 0x1E82,\n\t0x00770301: 0x1E83,\n\t0x00570308: 0x1E84,\n\t0x00770308: 0x1E85,\n\t0x00570307: 0x1E86,\n\t0x00770307: 0x1E87,\n\t0x00570323: 0x1E88,\n\t0x00770323: 0x1E89,\n\t0x00580307: 0x1E8A,\n\t0x00780307: 0x1E8B,\n\t0x00580308: 0x1E8C,\n\t0x00780308: 0x1E8D,\n\t0x00590307: 0x1E8E,\n\t0x00790307: 0x1E8F,\n\t0x005A0302: 0x1E90,\n\t0x007A0302: 0x1E91,\n\t0x005A0323: 0x1E92,\n\t0x007A0323: 0x1E93,\n\t0x005A0331: 0x1E94,\n\t0x007A0331: 0x1E95,\n\t0x00680331: 0x1E96,\n\t0x00740308: 0x1E97,\n\t0x0077030A: 0x1E98,\n\t0x0079030A: 0x1E99,\n\t0x017F0307: 0x1E9B,\n\t0x00410323: 0x1EA0,\n\t0x00610323: 0x1EA1,\n\t0x00410309: 0x1EA2,\n\t0x00610309: 0x1EA3,\n\t0x00C20301: 0x1EA4,\n\t0x00E20301: 0x1EA5,\n\t0x00C20300: 0x1EA6,\n\t0x00E20300: 0x1EA7,\n\t0x00C20309: 0x1EA8,\n\t0x00E20309: 0x1EA9,\n\t0x00C20303: 0x1EAA,\n\t0x00E20303: 0x1EAB,\n\t0x1EA00302: 0x1EAC,\n\t0x1EA10302: 0x1EAD,\n\t0x01020301: 0x1EAE,\n\t0x01030301: 0x1EAF,\n\t0x01020300: 0x1EB0,\n\t0x01030300: 0x1EB1,\n\t0x01020309: 0x1EB2,\n\t0x01030309: 0x1EB3,\n\t0x01020303: 0x1EB4,\n\t0x01030303: 0x1EB5,\n\t0x1EA00306: 0x1EB6,\n\t0x1EA10306: 0x1EB7,\n\t0x00450323: 0x1EB8,\n\t0x00650323: 0x1EB9,\n\t0x00450309: 0x1EBA,\n\t0x00650309: 0x1EBB,\n\t0x00450303: 0x1EBC,\n\t0x00650303: 0x1EBD,\n\t0x00CA0301: 0x1EBE,\n\t0x00EA0301: 0x1EBF,\n\t0x00CA0300: 0x1EC0,\n\t0x00EA0300: 0x1EC1,\n\t0x00CA0309: 0x1EC2,\n\t0x00EA0309: 0x1EC3,\n\t0x00CA0303: 0x1EC4,\n\t0x00EA0303: 0x1EC5,\n\t0x1EB80302: 0x1EC6,\n\t0x1EB90302: 0x1EC7,\n\t0x00490309: 0x1EC8,\n\t0x00690309: 0x1EC9,\n\t0x00490323: 0x1ECA,\n\t0x00690323: 0x1ECB,\n\t0x004F0323: 0x1ECC,\n\t0x006F0323: 0x1ECD,\n\t0x004F0309: 0x1ECE,\n\t0x006F0309: 0x1ECF,\n\t0x00D40301: 0x1ED0,\n\t0x00F40301: 0x1ED1,\n\t0x00D40300: 0x1ED2,\n\t0x00F40300: 0x1ED3,\n\t0x00D40309: 0x1ED4,\n\t0x00F40309: 0x1ED5,\n\t0x00D40303: 0x1ED6,\n\t0x00F40303: 0x1ED7,\n\t0x1ECC0302: 0x1ED8,\n\t0x1ECD0302: 0x1ED9,\n\t0x01A00301: 0x1EDA,\n\t0x01A10301: 0x1EDB,\n\t0x01A00300: 0x1EDC,\n\t0x01A10300: 0x1EDD,\n\t0x01A00309: 0x1EDE,\n\t0x01A10309: 0x1EDF,\n\t0x01A00303: 0x1EE0,\n\t0x01A10303: 0x1EE1,\n\t0x01A00323: 0x1EE2,\n\t0x01A10323: 0x1EE3,\n\t0x00550323: 0x1EE4,\n\t0x00750323: 0x1EE5,\n\t0x00550309: 0x1EE6,\n\t0x00750309: 0x1EE7,\n\t0x01AF0301: 0x1EE8,\n\t0x01B00301: 0x1EE9,\n\t0x01AF0300: 0x1EEA,\n\t0x01B00300: 0x1EEB,\n\t0x01AF0309: 0x1EEC,\n\t0x01B00309: 0x1EED,\n\t0x01AF0303: 0x1EEE,\n\t0x01B00303: 0x1EEF,\n\t0x01AF0323: 0x1EF0,\n\t0x01B00323: 0x1EF1,\n\t0x00590300: 0x1EF2,\n\t0x00790300: 0x1EF3,\n\t0x00590323: 0x1EF4,\n\t0x00790323: 0x1EF5,\n\t0x00590309: 0x1EF6,\n\t0x00790309: 0x1EF7,\n\t0x00590303: 0x1EF8,\n\t0x00790303: 0x1EF9,\n\t0x03B10313: 0x1F00,\n\t0x03B10314: 0x1F01,\n\t0x1F000300: 0x1F02,\n\t0x1F010300: 0x1F03,\n\t0x1F000301: 0x1F04,\n\t0x1F010301: 0x1F05,\n\t0x1F000342: 0x1F06,\n\t0x1F010342: 0x1F07,\n\t0x03910313: 0x1F08,\n\t0x03910314: 0x1F09,\n\t0x1F080300: 0x1F0A,\n\t0x1F090300: 0x1F0B,\n\t0x1F080301: 0x1F0C,\n\t0x1F090301: 0x1F0D,\n\t0x1F080342: 0x1F0E,\n\t0x1F090342: 0x1F0F,\n\t0x03B50313: 0x1F10,\n\t0x03B50314: 0x1F11,\n\t0x1F100300: 0x1F12,\n\t0x1F110300: 0x1F13,\n\t0x1F100301: 0x1F14,\n\t0x1F110301: 0x1F15,\n\t0x03950313: 0x1F18,\n\t0x03950314: 0x1F19,\n\t0x1F180300: 0x1F1A,\n\t0x1F190300: 0x1F1B,\n\t0x1F180301: 0x1F1C,\n\t0x1F190301: 0x1F1D,\n\t0x03B70313: 0x1F20,\n\t0x03B70314: 0x1F21,\n\t0x1F200300: 0x1F22,\n\t0x1F210300: 0x1F23,\n\t0x1F200301: 0x1F24,\n\t0x1F210301: 0x1F25,\n\t0x1F200342: 0x1F26,\n\t0x1F210342: 0x1F27,\n\t0x03970313: 0x1F28,\n\t0x03970314: 0x1F29,\n\t0x1F280300: 0x1F2A,\n\t0x1F290300: 0x1F2B,\n\t0x1F280301: 0x1F2C,\n\t0x1F290301: 0x1F2D,\n\t0x1F280342: 0x1F2E,\n\t0x1F290342: 0x1F2F,\n\t0x03B90313: 0x1F30,\n\t0x03B90314: 0x1F31,\n\t0x1F300300: 0x1F32,\n\t0x1F310300: 0x1F33,\n\t0x1F300301: 0x1F34,\n\t0x1F310301: 0x1F35,\n\t0x1F300342: 0x1F36,\n\t0x1F310342: 0x1F37,\n\t0x03990313: 0x1F38,\n\t0x03990314: 0x1F39,\n\t0x1F380300: 0x1F3A,\n\t0x1F390300: 0x1F3B,\n\t0x1F380301: 0x1F3C,\n\t0x1F390301: 0x1F3D,\n\t0x1F380342: 0x1F3E,\n\t0x1F390342: 0x1F3F,\n\t0x03BF0313: 0x1F40,\n\t0x03BF0314: 0x1F41,\n\t0x1F400300: 0x1F42,\n\t0x1F410300: 0x1F43,\n\t0x1F400301: 0x1F44,\n\t0x1F410301: 0x1F45,\n\t0x039F0313: 0x1F48,\n\t0x039F0314: 0x1F49,\n\t0x1F480300: 0x1F4A,\n\t0x1F490300: 0x1F4B,\n\t0x1F480301: 0x1F4C,\n\t0x1F490301: 0x1F4D,\n\t0x03C50313: 0x1F50,\n\t0x03C50314: 0x1F51,\n\t0x1F500300: 0x1F52,\n\t0x1F510300: 0x1F53,\n\t0x1F500301: 0x1F54,\n\t0x1F510301: 0x1F55,\n\t0x1F500342: 0x1F56,\n\t0x1F510342: 0x1F57,\n\t0x03A50314: 0x1F59,\n\t0x1F590300: 0x1F5B,\n\t0x1F590301: 0x1F5D,\n\t0x1F590342: 0x1F5F,\n\t0x03C90313: 0x1F60,\n\t0x03C90314: 0x1F61,\n\t0x1F600300: 0x1F62,\n\t0x1F610300: 0x1F63,\n\t0x1F600301: 0x1F64,\n\t0x1F610301: 0x1F65,\n\t0x1F600342: 0x1F66,\n\t0x1F610342: 0x1F67,\n\t0x03A90313: 0x1F68,\n\t0x03A90314: 0x1F69,\n\t0x1F680300: 0x1F6A,\n\t0x1F690300: 0x1F6B,\n\t0x1F680301: 0x1F6C,\n\t0x1F690301: 0x1F6D,\n\t0x1F680342: 0x1F6E,\n\t0x1F690342: 0x1F6F,\n\t0x03B10300: 0x1F70,\n\t0x03B50300: 0x1F72,\n\t0x03B70300: 0x1F74,\n\t0x03B90300: 0x1F76,\n\t0x03BF0300: 0x1F78,\n\t0x03C50300: 0x1F7A,\n\t0x03C90300: 0x1F7C,\n\t0x1F000345: 0x1F80,\n\t0x1F010345: 0x1F81,\n\t0x1F020345: 0x1F82,\n\t0x1F030345: 0x1F83,\n\t0x1F040345: 0x1F84,\n\t0x1F050345: 0x1F85,\n\t0x1F060345: 0x1F86,\n\t0x1F070345: 0x1F87,\n\t0x1F080345: 0x1F88,\n\t0x1F090345: 0x1F89,\n\t0x1F0A0345: 0x1F8A,\n\t0x1F0B0345: 0x1F8B,\n\t0x1F0C0345: 0x1F8C,\n\t0x1F0D0345: 0x1F8D,\n\t0x1F0E0345: 0x1F8E,\n\t0x1F0F0345: 0x1F8F,\n\t0x1F200345: 0x1F90,\n\t0x1F210345: 0x1F91,\n\t0x1F220345: 0x1F92,\n\t0x1F230345: 0x1F93,\n\t0x1F240345: 0x1F94,\n\t0x1F250345: 0x1F95,\n\t0x1F260345: 0x1F96,\n\t0x1F270345: 0x1F97,\n\t0x1F280345: 0x1F98,\n\t0x1F290345: 0x1F99,\n\t0x1F2A0345: 0x1F9A,\n\t0x1F2B0345: 0x1F9B,\n\t0x1F2C0345: 0x1F9C,\n\t0x1F2D0345: 0x1F9D,\n\t0x1F2E0345: 0x1F9E,\n\t0x1F2F0345: 0x1F9F,\n\t0x1F600345: 0x1FA0,\n\t0x1F610345: 0x1FA1,\n\t0x1F620345: 0x1FA2,\n\t0x1F630345: 0x1FA3,\n\t0x1F640345: 0x1FA4,\n\t0x1F650345: 0x1FA5,\n\t0x1F660345: 0x1FA6,\n\t0x1F670345: 0x1FA7,\n\t0x1F680345: 0x1FA8,\n\t0x1F690345: 0x1FA9,\n\t0x1F6A0345: 0x1FAA,\n\t0x1F6B0345: 0x1FAB,\n\t0x1F6C0345: 0x1FAC,\n\t0x1F6D0345: 0x1FAD,\n\t0x1F6E0345: 0x1FAE,\n\t0x1F6F0345: 0x1FAF,\n\t0x03B10306: 0x1FB0,\n\t0x03B10304: 0x1FB1,\n\t0x1F700345: 0x1FB2,\n\t0x03B10345: 0x1FB3,\n\t0x03AC0345: 0x1FB4,\n\t0x03B10342: 0x1FB6,\n\t0x1FB60345: 0x1FB7,\n\t0x03910306: 0x1FB8,\n\t0x03910304: 0x1FB9,\n\t0x03910300: 0x1FBA,\n\t0x03910345: 0x1FBC,\n\t0x00A80342: 0x1FC1,\n\t0x1F740345: 0x1FC2,\n\t0x03B70345: 0x1FC3,\n\t0x03AE0345: 0x1FC4,\n\t0x03B70342: 0x1FC6,\n\t0x1FC60345: 0x1FC7,\n\t0x03950300: 0x1FC8,\n\t0x03970300: 0x1FCA,\n\t0x03970345: 0x1FCC,\n\t0x1FBF0300: 0x1FCD,\n\t0x1FBF0301: 0x1FCE,\n\t0x1FBF0342: 0x1FCF,\n\t0x03B90306: 0x1FD0,\n\t0x03B90304: 0x1FD1,\n\t0x03CA0300: 0x1FD2,\n\t0x03B90342: 0x1FD6,\n\t0x03CA0342: 0x1FD7,\n\t0x03990306: 0x1FD8,\n\t0x03990304: 0x1FD9,\n\t0x03990300: 0x1FDA,\n\t0x1FFE0300: 0x1FDD,\n\t0x1FFE0301: 0x1FDE,\n\t0x1FFE0342: 0x1FDF,\n\t0x03C50306: 0x1FE0,\n\t0x03C50304: 0x1FE1,\n\t0x03CB0300: 0x1FE2,\n\t0x03C10313: 0x1FE4,\n\t0x03C10314: 0x1FE5,\n\t0x03C50342: 0x1FE6,\n\t0x03CB0342: 0x1FE7,\n\t0x03A50306: 0x1FE8,\n\t0x03A50304: 0x1FE9,\n\t0x03A50300: 0x1FEA,\n\t0x03A10314: 0x1FEC,\n\t0x00A80300: 0x1FED,\n\t0x1F7C0345: 0x1FF2,\n\t0x03C90345: 0x1FF3,\n\t0x03CE0345: 0x1FF4,\n\t0x03C90342: 0x1FF6,\n\t0x1FF60345: 0x1FF7,\n\t0x039F0300: 0x1FF8,\n\t0x03A90300: 0x1FFA,\n\t0x03A90345: 0x1FFC,\n\t0x21900338: 0x219A,\n\t0x21920338: 0x219B,\n\t0x21940338: 0x21AE,\n\t0x21D00338: 0x21CD,\n\t0x21D40338: 0x21CE,\n\t0x21D20338: 0x21CF,\n\t0x22030338: 0x2204,\n\t0x22080338: 0x2209,\n\t0x220B0338: 0x220C,\n\t0x22230338: 0x2224,\n\t0x22250338: 0x2226,\n\t0x223C0338: 0x2241,\n\t0x22430338: 0x2244,\n\t0x22450338: 0x2247,\n\t0x22480338: 0x2249,\n\t0x003D0338: 0x2260,\n\t0x22610338: 0x2262,\n\t0x224D0338: 0x226D,\n\t0x003C0338: 0x226E,\n\t0x003E0338: 0x226F,\n\t0x22640338: 0x2270,\n\t0x22650338: 0x2271,\n\t0x22720338: 0x2274,\n\t0x22730338: 0x2275,\n\t0x22760338: 0x2278,\n\t0x22770338: 0x2279,\n\t0x227A0338: 0x2280,\n\t0x227B0338: 0x2281,\n\t0x22820338: 0x2284,\n\t0x22830338: 0x2285,\n\t0x22860338: 0x2288,\n\t0x22870338: 0x2289,\n\t0x22A20338: 0x22AC,\n\t0x22A80338: 0x22AD,\n\t0x22A90338: 0x22AE,\n\t0x22AB0338: 0x22AF,\n\t0x227C0338: 0x22E0,\n\t0x227D0338: 0x22E1,\n\t0x22910338: 0x22E2,\n\t0x22920338: 0x22E3,\n\t0x22B20338: 0x22EA,\n\t0x22B30338: 0x22EB,\n\t0x22B40338: 0x22EC,\n\t0x22B50338: 0x22ED,\n\t0x304B3099: 0x304C,\n\t0x304D3099: 0x304E,\n\t0x304F3099: 0x3050,\n\t0x30513099: 0x3052,\n\t0x30533099: 0x3054,\n\t0x30553099: 0x3056,\n\t0x30573099: 0x3058,\n\t0x30593099: 0x305A,\n\t0x305B3099: 0x305C,\n\t0x305D3099: 0x305E,\n\t0x305F3099: 0x3060,\n\t0x30613099: 0x3062,\n\t0x30643099: 0x3065,\n\t0x30663099: 0x3067,\n\t0x30683099: 0x3069,\n\t0x306F3099: 0x3070,\n\t0x306F309A: 0x3071,\n\t0x30723099: 0x3073,\n\t0x3072309A: 0x3074,\n\t0x30753099: 0x3076,\n\t0x3075309A: 0x3077,\n\t0x30783099: 0x3079,\n\t0x3078309A: 0x307A,\n\t0x307B3099: 0x307C,\n\t0x307B309A: 0x307D,\n\t0x30463099: 0x3094,\n\t0x309D3099: 0x309E,\n\t0x30AB3099: 0x30AC,\n\t0x30AD3099: 0x30AE,\n\t0x30AF3099: 0x30B0,\n\t0x30B13099: 0x30B2,\n\t0x30B33099: 0x30B4,\n\t0x30B53099: 0x30B6,\n\t0x30B73099: 0x30B8,\n\t0x30B93099: 0x30BA,\n\t0x30BB3099: 0x30BC,\n\t0x30BD3099: 0x30BE,\n\t0x30BF3099: 0x30C0,\n\t0x30C13099: 0x30C2,\n\t0x30C43099: 0x30C5,\n\t0x30C63099: 0x30C7,\n\t0x30C83099: 0x30C9,\n\t0x30CF3099: 0x30D0,\n\t0x30CF309A: 0x30D1,\n\t0x30D23099: 0x30D3,\n\t0x30D2309A: 0x30D4,\n\t0x30D53099: 0x30D6,\n\t0x30D5309A: 0x30D7,\n\t0x30D83099: 0x30D9,\n\t0x30D8309A: 0x30DA,\n\t0x30DB3099: 0x30DC,\n\t0x30DB309A: 0x30DD,\n\t0x30A63099: 0x30F4,\n\t0x30EF3099: 0x30F7,\n\t0x30F03099: 0x30F8,\n\t0x30F13099: 0x30F9,\n\t0x30F23099: 0x30FA,\n\t0x30FD3099: 0x30FE,\n\t0x109910BA: 0x1109A,\n\t0x109B10BA: 0x1109C,\n\t0x10A510BA: 0x110AB,\n\t0x11311127: 0x1112E,\n\t0x11321127: 0x1112F,\n\t0x1347133E: 0x1134B,\n\t0x13471357: 0x1134C,\n\t0x14B914BA: 0x114BB,\n\t0x14B914B0: 0x114BC,\n\t0x14B914BD: 0x114BE,\n\t0x15B815AF: 0x115BA,\n\t0x15B915AF: 0x115BB,\n}\n\n// Total size of tables: 53KB (54006 bytes)\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/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\tn := 0\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), n, len(b), eof)\n\tn += copy(dst[n:], b[n: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\tif 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 a 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 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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/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": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/LICENSE",
    "content": "Copyright 2011-2016 Canonical Ltd.\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": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/apic.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\nfunc yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {\n\t//fmt.Println(\"yaml_insert_token\", \"pos:\", pos, \"typ:\", token.typ, \"head:\", parser.tokens_head, \"len:\", len(parser.tokens))\n\n\t// Check if we can move the queue at the beginning of the buffer.\n\tif parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {\n\t\tif parser.tokens_head != len(parser.tokens) {\n\t\t\tcopy(parser.tokens, parser.tokens[parser.tokens_head:])\n\t\t}\n\t\tparser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]\n\t\tparser.tokens_head = 0\n\t}\n\tparser.tokens = append(parser.tokens, *token)\n\tif pos < 0 {\n\t\treturn\n\t}\n\tcopy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])\n\tparser.tokens[parser.tokens_head+pos] = *token\n}\n\n// Create a new parser object.\nfunc yaml_parser_initialize(parser *yaml_parser_t) bool {\n\t*parser = yaml_parser_t{\n\t\traw_buffer: make([]byte, 0, input_raw_buffer_size),\n\t\tbuffer:     make([]byte, 0, input_buffer_size),\n\t}\n\treturn true\n}\n\n// Destroy a parser object.\nfunc yaml_parser_delete(parser *yaml_parser_t) {\n\t*parser = yaml_parser_t{}\n}\n\n// String read handler.\nfunc yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\tif parser.input_pos == len(parser.input) {\n\t\treturn 0, io.EOF\n\t}\n\tn = copy(buffer, parser.input[parser.input_pos:])\n\tparser.input_pos += n\n\treturn n, nil\n}\n\n// File read handler.\nfunc yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\treturn parser.input_file.Read(buffer)\n}\n\n// Set a string input.\nfunc yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_string_read_handler\n\tparser.input = input\n\tparser.input_pos = 0\n}\n\n// Set a file input.\nfunc yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_file_read_handler\n\tparser.input_file = file\n}\n\n// Set the source encoding.\nfunc yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {\n\tif parser.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the encoding only once\")\n\t}\n\tparser.encoding = encoding\n}\n\n// Create a new emitter object.\nfunc yaml_emitter_initialize(emitter *yaml_emitter_t) bool {\n\t*emitter = yaml_emitter_t{\n\t\tbuffer:     make([]byte, output_buffer_size),\n\t\traw_buffer: make([]byte, 0, output_raw_buffer_size),\n\t\tstates:     make([]yaml_emitter_state_t, 0, initial_stack_size),\n\t\tevents:     make([]yaml_event_t, 0, initial_queue_size),\n\t}\n\treturn true\n}\n\n// Destroy an emitter object.\nfunc yaml_emitter_delete(emitter *yaml_emitter_t) {\n\t*emitter = yaml_emitter_t{}\n}\n\n// String write handler.\nfunc yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t*emitter.output_buffer = append(*emitter.output_buffer, buffer...)\n\treturn nil\n}\n\n// File write handler.\nfunc yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t_, err := emitter.output_file.Write(buffer)\n\treturn err\n}\n\n// Set a string output.\nfunc yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_string_write_handler\n\temitter.output_buffer = output_buffer\n}\n\n// Set a file output.\nfunc yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_file_write_handler\n\temitter.output_file = file\n}\n\n// Set the output encoding.\nfunc yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {\n\tif emitter.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the output encoding only once\")\n\t}\n\temitter.encoding = encoding\n}\n\n// Set the canonical output style.\nfunc yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {\n\temitter.canonical = canonical\n}\n\n//// Set the indentation increment.\nfunc yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {\n\tif indent < 2 || indent > 9 {\n\t\tindent = 2\n\t}\n\temitter.best_indent = indent\n}\n\n// Set the preferred line width.\nfunc yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {\n\tif width < 0 {\n\t\twidth = -1\n\t}\n\temitter.best_width = width\n}\n\n// Set if unescaped non-ASCII characters are allowed.\nfunc yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {\n\temitter.unicode = unicode\n}\n\n// Set the preferred line break character.\nfunc yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {\n\temitter.line_break = line_break\n}\n\n///*\n// * Destroy a token object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_token_delete(yaml_token_t *token)\n//{\n//    assert(token);  // Non-NULL token object expected.\n//\n//    switch (token.type)\n//    {\n//        case YAML_TAG_DIRECTIVE_TOKEN:\n//            yaml_free(token.data.tag_directive.handle);\n//            yaml_free(token.data.tag_directive.prefix);\n//            break;\n//\n//        case YAML_ALIAS_TOKEN:\n//            yaml_free(token.data.alias.value);\n//            break;\n//\n//        case YAML_ANCHOR_TOKEN:\n//            yaml_free(token.data.anchor.value);\n//            break;\n//\n//        case YAML_TAG_TOKEN:\n//            yaml_free(token.data.tag.handle);\n//            yaml_free(token.data.tag.suffix);\n//            break;\n//\n//        case YAML_SCALAR_TOKEN:\n//            yaml_free(token.data.scalar.value);\n//            break;\n//\n//        default:\n//            break;\n//    }\n//\n//    memset(token, 0, sizeof(yaml_token_t));\n//}\n//\n///*\n// * Check if a string is a valid UTF-8 sequence.\n// *\n// * Check 'reader.c' for more details on UTF-8 encoding.\n// */\n//\n//static int\n//yaml_check_utf8(yaml_char_t *start, size_t length)\n//{\n//    yaml_char_t *end = start+length;\n//    yaml_char_t *pointer = start;\n//\n//    while (pointer < end) {\n//        unsigned char octet;\n//        unsigned int width;\n//        unsigned int value;\n//        size_t k;\n//\n//        octet = pointer[0];\n//        width = (octet & 0x80) == 0x00 ? 1 :\n//                (octet & 0xE0) == 0xC0 ? 2 :\n//                (octet & 0xF0) == 0xE0 ? 3 :\n//                (octet & 0xF8) == 0xF0 ? 4 : 0;\n//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n//        if (!width) return 0;\n//        if (pointer+width > end) return 0;\n//        for (k = 1; k < width; k ++) {\n//            octet = pointer[k];\n//            if ((octet & 0xC0) != 0x80) return 0;\n//            value = (value << 6) + (octet & 0x3F);\n//        }\n//        if (!((width == 1) ||\n//            (width == 2 && value >= 0x80) ||\n//            (width == 3 && value >= 0x800) ||\n//            (width == 4 && value >= 0x10000))) return 0;\n//\n//        pointer += width;\n//    }\n//\n//    return 1;\n//}\n//\n\n// Create STREAM-START.\nfunc yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_STREAM_START_EVENT,\n\t\tencoding: encoding,\n\t}\n\treturn true\n}\n\n// Create STREAM-END.\nfunc yaml_stream_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_STREAM_END_EVENT,\n\t}\n\treturn true\n}\n\n// Create DOCUMENT-START.\nfunc yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,\n\ttag_directives []yaml_tag_directive_t, implicit bool) bool {\n\t*event = yaml_event_t{\n\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\tversion_directive: version_directive,\n\t\ttag_directives:    tag_directives,\n\t\timplicit:          implicit,\n\t}\n\treturn true\n}\n\n// Create DOCUMENT-END.\nfunc yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_DOCUMENT_END_EVENT,\n\t\timplicit: implicit,\n\t}\n\treturn true\n}\n\n///*\n// * Create ALIAS.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)\n//{\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    anchor_copy *yaml_char_t = NULL\n//\n//    assert(event) // Non-NULL event object is expected.\n//    assert(anchor) // Non-NULL anchor is expected.\n//\n//    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0\n//\n//    anchor_copy = yaml_strdup(anchor)\n//    if (!anchor_copy)\n//        return 0\n//\n//    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)\n//\n//    return 1\n//}\n\n// Create SCALAR.\nfunc yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:             yaml_SCALAR_EVENT,\n\t\tanchor:          anchor,\n\t\ttag:             tag,\n\t\tvalue:           value,\n\t\timplicit:        plain_implicit,\n\t\tquoted_implicit: quoted_implicit,\n\t\tstyle:           yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-START.\nfunc yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_SEQUENCE_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-END.\nfunc yaml_sequence_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_SEQUENCE_END_EVENT,\n\t}\n\treturn true\n}\n\n// Create MAPPING-START.\nfunc yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_MAPPING_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create MAPPING-END.\nfunc yaml_mapping_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_MAPPING_END_EVENT,\n\t}\n\treturn true\n}\n\n// Destroy an event object.\nfunc yaml_event_delete(event *yaml_event_t) {\n\t*event = yaml_event_t{}\n}\n\n///*\n// * Create a document object.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_initialize(document *yaml_document_t,\n//        version_directive *yaml_version_directive_t,\n//        tag_directives_start *yaml_tag_directive_t,\n//        tag_directives_end *yaml_tag_directive_t,\n//        start_implicit int, end_implicit int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    struct {\n//        start *yaml_node_t\n//        end *yaml_node_t\n//        top *yaml_node_t\n//    } nodes = { NULL, NULL, NULL }\n//    version_directive_copy *yaml_version_directive_t = NULL\n//    struct {\n//        start *yaml_tag_directive_t\n//        end *yaml_tag_directive_t\n//        top *yaml_tag_directive_t\n//    } tag_directives_copy = { NULL, NULL, NULL }\n//    value yaml_tag_directive_t = { NULL, NULL }\n//    mark yaml_mark_t = { 0, 0, 0 }\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert((tag_directives_start && tag_directives_end) ||\n//            (tag_directives_start == tag_directives_end))\n//                            // Valid tag directives are expected.\n//\n//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error\n//\n//    if (version_directive) {\n//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))\n//        if (!version_directive_copy) goto error\n//        version_directive_copy.major = version_directive.major\n//        version_directive_copy.minor = version_directive.minor\n//    }\n//\n//    if (tag_directives_start != tag_directives_end) {\n//        tag_directive *yaml_tag_directive_t\n//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))\n//            goto error\n//        for (tag_directive = tag_directives_start\n//                tag_directive != tag_directives_end; tag_directive ++) {\n//            assert(tag_directive.handle)\n//            assert(tag_directive.prefix)\n//            if (!yaml_check_utf8(tag_directive.handle,\n//                        strlen((char *)tag_directive.handle)))\n//                goto error\n//            if (!yaml_check_utf8(tag_directive.prefix,\n//                        strlen((char *)tag_directive.prefix)))\n//                goto error\n//            value.handle = yaml_strdup(tag_directive.handle)\n//            value.prefix = yaml_strdup(tag_directive.prefix)\n//            if (!value.handle || !value.prefix) goto error\n//            if (!PUSH(&context, tag_directives_copy, value))\n//                goto error\n//            value.handle = NULL\n//            value.prefix = NULL\n//        }\n//    }\n//\n//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,\n//            tag_directives_copy.start, tag_directives_copy.top,\n//            start_implicit, end_implicit, mark, mark)\n//\n//    return 1\n//\n//error:\n//    STACK_DEL(&context, nodes)\n//    yaml_free(version_directive_copy)\n//    while (!STACK_EMPTY(&context, tag_directives_copy)) {\n//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)\n//        yaml_free(value.handle)\n//        yaml_free(value.prefix)\n//    }\n//    STACK_DEL(&context, tag_directives_copy)\n//    yaml_free(value.handle)\n//    yaml_free(value.prefix)\n//\n//    return 0\n//}\n//\n///*\n// * Destroy a document object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_document_delete(document *yaml_document_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    tag_directive *yaml_tag_directive_t\n//\n//    context.error = YAML_NO_ERROR // Eliminate a compliler warning.\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    while (!STACK_EMPTY(&context, document.nodes)) {\n//        node yaml_node_t = POP(&context, document.nodes)\n//        yaml_free(node.tag)\n//        switch (node.type) {\n//            case YAML_SCALAR_NODE:\n//                yaml_free(node.data.scalar.value)\n//                break\n//            case YAML_SEQUENCE_NODE:\n//                STACK_DEL(&context, node.data.sequence.items)\n//                break\n//            case YAML_MAPPING_NODE:\n//                STACK_DEL(&context, node.data.mapping.pairs)\n//                break\n//            default:\n//                assert(0) // Should not happen.\n//        }\n//    }\n//    STACK_DEL(&context, document.nodes)\n//\n//    yaml_free(document.version_directive)\n//    for (tag_directive = document.tag_directives.start\n//            tag_directive != document.tag_directives.end\n//            tag_directive++) {\n//        yaml_free(tag_directive.handle)\n//        yaml_free(tag_directive.prefix)\n//    }\n//    yaml_free(document.tag_directives.start)\n//\n//    memset(document, 0, sizeof(yaml_document_t))\n//}\n//\n///**\n// * Get a document node.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_node(document *yaml_document_t, index int)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {\n//        return document.nodes.start + index - 1\n//    }\n//    return NULL\n//}\n//\n///**\n// * Get the root object.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_root_node(document *yaml_document_t)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (document.nodes.top != document.nodes.start) {\n//        return document.nodes.start\n//    }\n//    return NULL\n//}\n//\n///*\n// * Add a scalar node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_scalar(document *yaml_document_t,\n//        tag *yaml_char_t, value *yaml_char_t, length int,\n//        style yaml_scalar_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    value_copy *yaml_char_t = NULL\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert(value) // Non-NULL value is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (length < 0) {\n//        length = strlen((char *)value)\n//    }\n//\n//    if (!yaml_check_utf8(value, length)) goto error\n//    value_copy = yaml_malloc(length+1)\n//    if (!value_copy) goto error\n//    memcpy(value_copy, value, length)\n//    value_copy[length] = '\\0'\n//\n//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    yaml_free(tag_copy)\n//    yaml_free(value_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a sequence node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_sequence(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_sequence_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_item_t\n//        end *yaml_node_item_t\n//        top *yaml_node_item_t\n//    } items = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error\n//\n//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, items)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a mapping node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_mapping(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_mapping_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_pair_t\n//        end *yaml_node_pair_t\n//        top *yaml_node_pair_t\n//    } pairs = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error\n//\n//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, pairs)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Append an item to a sequence node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_sequence_item(document *yaml_document_t,\n//        sequence int, item int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(sequence > 0\n//            && document.nodes.start + sequence <= document.nodes.top)\n//                            // Valid sequence id is required.\n//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)\n//                            // A sequence node is required.\n//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)\n//                            // Valid item id is required.\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[sequence-1].data.sequence.items, item))\n//        return 0\n//\n//    return 1\n//}\n//\n///*\n// * Append a pair of a key and a value to a mapping node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_mapping_pair(document *yaml_document_t,\n//        mapping int, key int, value int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    pair yaml_node_pair_t\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(mapping > 0\n//            && document.nodes.start + mapping <= document.nodes.top)\n//                            // Valid mapping id is required.\n//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)\n//                            // A mapping node is required.\n//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)\n//                            // Valid key id is required.\n//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)\n//                            // Valid value id is required.\n//\n//    pair.key = key\n//    pair.value = value\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[mapping-1].data.mapping.pairs, pair))\n//        return 0\n//\n//    return 1\n//}\n//\n//\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/decode.go",
    "content": "package yaml\n\nimport (\n\t\"encoding\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tdocumentNode = 1 << iota\n\tmappingNode\n\tsequenceNode\n\tscalarNode\n\taliasNode\n)\n\ntype node struct {\n\tkind         int\n\tline, column int\n\ttag          string\n\tvalue        string\n\timplicit     bool\n\tchildren     []*node\n\tanchors      map[string]*node\n}\n\n// ----------------------------------------------------------------------------\n// Parser, produces a node tree out of a libyaml event stream.\n\ntype parser struct {\n\tparser yaml_parser_t\n\tevent  yaml_event_t\n\tdoc    *node\n}\n\nfunc newParser(b []byte) *parser {\n\tp := parser{}\n\tif !yaml_parser_initialize(&p.parser) {\n\t\tpanic(\"failed to initialize YAML emitter\")\n\t}\n\n\tif len(b) == 0 {\n\t\tb = []byte{'\\n'}\n\t}\n\n\tyaml_parser_set_input_string(&p.parser, b)\n\n\tp.skip()\n\tif p.event.typ != yaml_STREAM_START_EVENT {\n\t\tpanic(\"expected stream start event, got \" + strconv.Itoa(int(p.event.typ)))\n\t}\n\tp.skip()\n\treturn &p\n}\n\nfunc (p *parser) destroy() {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\tyaml_event_delete(&p.event)\n\t}\n\tyaml_parser_delete(&p.parser)\n}\n\nfunc (p *parser) skip() {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\tif p.event.typ == yaml_STREAM_END_EVENT {\n\t\t\tfailf(\"attempted to go past the end of stream; corrupted value?\")\n\t\t}\n\t\tyaml_event_delete(&p.event)\n\t}\n\tif !yaml_parser_parse(&p.parser, &p.event) {\n\t\tp.fail()\n\t}\n}\n\nfunc (p *parser) fail() {\n\tvar where string\n\tvar line int\n\tif p.parser.problem_mark.line != 0 {\n\t\tline = p.parser.problem_mark.line\n\t} else if p.parser.context_mark.line != 0 {\n\t\tline = p.parser.context_mark.line\n\t}\n\tif line != 0 {\n\t\twhere = \"line \" + strconv.Itoa(line) + \": \"\n\t}\n\tvar msg string\n\tif len(p.parser.problem) > 0 {\n\t\tmsg = p.parser.problem\n\t} else {\n\t\tmsg = \"unknown problem parsing YAML content\"\n\t}\n\tfailf(\"%s%s\", where, msg)\n}\n\nfunc (p *parser) anchor(n *node, anchor []byte) {\n\tif anchor != nil {\n\t\tp.doc.anchors[string(anchor)] = n\n\t}\n}\n\nfunc (p *parser) parse() *node {\n\tswitch p.event.typ {\n\tcase yaml_SCALAR_EVENT:\n\t\treturn p.scalar()\n\tcase yaml_ALIAS_EVENT:\n\t\treturn p.alias()\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn p.mapping()\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn p.sequence()\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\treturn p.document()\n\tcase yaml_STREAM_END_EVENT:\n\t\t// Happens when attempting to decode an empty buffer.\n\t\treturn nil\n\tdefault:\n\t\tpanic(\"attempted to parse unknown event: \" + strconv.Itoa(int(p.event.typ)))\n\t}\n}\n\nfunc (p *parser) node(kind int) *node {\n\treturn &node{\n\t\tkind:   kind,\n\t\tline:   p.event.start_mark.line,\n\t\tcolumn: p.event.start_mark.column,\n\t}\n}\n\nfunc (p *parser) document() *node {\n\tn := p.node(documentNode)\n\tn.anchors = make(map[string]*node)\n\tp.doc = n\n\tp.skip()\n\tn.children = append(n.children, p.parse())\n\tif p.event.typ != yaml_DOCUMENT_END_EVENT {\n\t\tpanic(\"expected end of document event but got \" + strconv.Itoa(int(p.event.typ)))\n\t}\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) alias() *node {\n\tn := p.node(aliasNode)\n\tn.value = string(p.event.anchor)\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) scalar() *node {\n\tn := p.node(scalarNode)\n\tn.value = string(p.event.value)\n\tn.tag = string(p.event.tag)\n\tn.implicit = p.event.implicit\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) sequence() *node {\n\tn := p.node(sequenceNode)\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\tfor p.event.typ != yaml_SEQUENCE_END_EVENT {\n\t\tn.children = append(n.children, p.parse())\n\t}\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) mapping() *node {\n\tn := p.node(mappingNode)\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\tfor p.event.typ != yaml_MAPPING_END_EVENT {\n\t\tn.children = append(n.children, p.parse(), p.parse())\n\t}\n\tp.skip()\n\treturn n\n}\n\n// ----------------------------------------------------------------------------\n// Decoder, unmarshals a node into a provided value.\n\ntype decoder struct {\n\tdoc     *node\n\taliases map[string]bool\n\tmapType reflect.Type\n\tterrors []string\n}\n\nvar (\n\tmapItemType    = reflect.TypeOf(MapItem{})\n\tdurationType   = reflect.TypeOf(time.Duration(0))\n\tdefaultMapType = reflect.TypeOf(map[interface{}]interface{}{})\n\tifaceType      = defaultMapType.Elem()\n)\n\nfunc newDecoder() *decoder {\n\td := &decoder{mapType: defaultMapType}\n\td.aliases = make(map[string]bool)\n\treturn d\n}\n\nfunc (d *decoder) terror(n *node, tag string, out reflect.Value) {\n\tif n.tag != \"\" {\n\t\ttag = n.tag\n\t}\n\tvalue := n.value\n\tif tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG {\n\t\tif len(value) > 10 {\n\t\t\tvalue = \" `\" + value[:7] + \"...`\"\n\t\t} else {\n\t\t\tvalue = \" `\" + value + \"`\"\n\t\t}\n\t}\n\td.terrors = append(d.terrors, fmt.Sprintf(\"line %d: cannot unmarshal %s%s into %s\", n.line+1, shortTag(tag), value, out.Type()))\n}\n\nfunc (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) {\n\tterrlen := len(d.terrors)\n\terr := u.UnmarshalYAML(func(v interface{}) (err error) {\n\t\tdefer handleErr(&err)\n\t\td.unmarshal(n, reflect.ValueOf(v))\n\t\tif len(d.terrors) > terrlen {\n\t\t\tissues := d.terrors[terrlen:]\n\t\t\td.terrors = d.terrors[:terrlen]\n\t\t\treturn &TypeError{issues}\n\t\t}\n\t\treturn nil\n\t})\n\tif e, ok := err.(*TypeError); ok {\n\t\td.terrors = append(d.terrors, e.Errors...)\n\t\treturn false\n\t}\n\tif err != nil {\n\t\tfail(err)\n\t}\n\treturn true\n}\n\n// d.prepare initializes and dereferences pointers and calls UnmarshalYAML\n// if a value is found to implement it.\n// It returns the initialized and dereferenced out value, whether\n// unmarshalling was already done by UnmarshalYAML, and if so whether\n// its types unmarshalled appropriately.\n//\n// If n holds a null value, prepare returns before doing anything.\nfunc (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {\n\tif n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == \"\" && (n.value == \"null\" || n.value == \"\" && n.implicit) {\n\t\treturn out, false, false\n\t}\n\tagain := true\n\tfor again {\n\t\tagain = false\n\t\tif out.Kind() == reflect.Ptr {\n\t\t\tif out.IsNil() {\n\t\t\t\tout.Set(reflect.New(out.Type().Elem()))\n\t\t\t}\n\t\t\tout = out.Elem()\n\t\t\tagain = true\n\t\t}\n\t\tif out.CanAddr() {\n\t\t\tif u, ok := out.Addr().Interface().(Unmarshaler); ok {\n\t\t\t\tgood = d.callUnmarshaler(n, u)\n\t\t\t\treturn out, true, good\n\t\t\t}\n\t\t}\n\t}\n\treturn out, false, false\n}\n\nfunc (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) {\n\tswitch n.kind {\n\tcase documentNode:\n\t\treturn d.document(n, out)\n\tcase aliasNode:\n\t\treturn d.alias(n, out)\n\t}\n\tout, unmarshaled, good := d.prepare(n, out)\n\tif unmarshaled {\n\t\treturn good\n\t}\n\tswitch n.kind {\n\tcase scalarNode:\n\t\tgood = d.scalar(n, out)\n\tcase mappingNode:\n\t\tgood = d.mapping(n, out)\n\tcase sequenceNode:\n\t\tgood = d.sequence(n, out)\n\tdefault:\n\t\tpanic(\"internal error: unknown node kind: \" + strconv.Itoa(n.kind))\n\t}\n\treturn good\n}\n\nfunc (d *decoder) document(n *node, out reflect.Value) (good bool) {\n\tif len(n.children) == 1 {\n\t\td.doc = n\n\t\td.unmarshal(n.children[0], out)\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *decoder) alias(n *node, out reflect.Value) (good bool) {\n\tan, ok := d.doc.anchors[n.value]\n\tif !ok {\n\t\tfailf(\"unknown anchor '%s' referenced\", n.value)\n\t}\n\tif d.aliases[n.value] {\n\t\tfailf(\"anchor '%s' value contains itself\", n.value)\n\t}\n\td.aliases[n.value] = true\n\tgood = d.unmarshal(an, out)\n\tdelete(d.aliases, n.value)\n\treturn good\n}\n\nvar zeroValue reflect.Value\n\nfunc resetMap(out reflect.Value) {\n\tfor _, k := range out.MapKeys() {\n\t\tout.SetMapIndex(k, zeroValue)\n\t}\n}\n\nfunc (d *decoder) scalar(n *node, out reflect.Value) (good bool) {\n\tvar tag string\n\tvar resolved interface{}\n\tif n.tag == \"\" && !n.implicit {\n\t\ttag = yaml_STR_TAG\n\t\tresolved = n.value\n\t} else {\n\t\ttag, resolved = resolve(n.tag, n.value)\n\t\tif tag == yaml_BINARY_TAG {\n\t\t\tdata, err := base64.StdEncoding.DecodeString(resolved.(string))\n\t\t\tif err != nil {\n\t\t\t\tfailf(\"!!binary value contains invalid base64 data\")\n\t\t\t}\n\t\t\tresolved = string(data)\n\t\t}\n\t}\n\tif resolved == nil {\n\t\tif out.Kind() == reflect.Map && !out.CanAddr() {\n\t\t\tresetMap(out)\n\t\t} else {\n\t\t\tout.Set(reflect.Zero(out.Type()))\n\t\t}\n\t\treturn true\n\t}\n\tif s, ok := resolved.(string); ok && out.CanAddr() {\n\t\tif u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok {\n\t\t\terr := u.UnmarshalText([]byte(s))\n\t\t\tif err != nil {\n\t\t\t\tfail(err)\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\tswitch out.Kind() {\n\tcase reflect.String:\n\t\tif tag == yaml_BINARY_TAG {\n\t\t\tout.SetString(resolved.(string))\n\t\t\tgood = true\n\t\t} else if resolved != nil {\n\t\t\tout.SetString(n.value)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Interface:\n\t\tif resolved == nil {\n\t\t\tout.Set(reflect.Zero(out.Type()))\n\t\t} else {\n\t\t\tout.Set(reflect.ValueOf(resolved))\n\t\t}\n\t\tgood = true\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif !out.OverflowInt(resolved) {\n\t\t\t\tout.SetInt(resolved)\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase uint64:\n\t\t\tif resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase string:\n\t\t\tif out.Type() == durationType {\n\t\t\t\td, err := time.ParseDuration(resolved)\n\t\t\t\tif err == nil {\n\t\t\t\t\tout.SetInt(int64(d))\n\t\t\t\t\tgood = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif resolved >= 0 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif resolved >= 0 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase uint64:\n\t\t\tif !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase bool:\n\t\t\tout.SetBool(resolved)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\tgood = true\n\t\tcase int64:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\tgood = true\n\t\tcase uint64:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\tgood = true\n\t\tcase float64:\n\t\t\tout.SetFloat(resolved)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Ptr:\n\t\tif out.Type().Elem() == reflect.TypeOf(resolved) {\n\t\t\t// TODO DOes this make sense? When is out a Ptr except when decoding a nil value?\n\t\t\telem := reflect.New(out.Type().Elem())\n\t\t\telem.Elem().Set(reflect.ValueOf(resolved))\n\t\t\tout.Set(elem)\n\t\t\tgood = true\n\t\t}\n\t}\n\tif !good {\n\t\td.terror(n, tag, out)\n\t}\n\treturn good\n}\n\nfunc settableValueOf(i interface{}) reflect.Value {\n\tv := reflect.ValueOf(i)\n\tsv := reflect.New(v.Type()).Elem()\n\tsv.Set(v)\n\treturn sv\n}\n\nfunc (d *decoder) sequence(n *node, out reflect.Value) (good bool) {\n\tl := len(n.children)\n\n\tvar iface reflect.Value\n\tswitch out.Kind() {\n\tcase reflect.Slice:\n\t\tout.Set(reflect.MakeSlice(out.Type(), l, l))\n\tcase reflect.Interface:\n\t\t// No type hints. Will have to use a generic sequence.\n\t\tiface = out\n\t\tout = settableValueOf(make([]interface{}, l))\n\tdefault:\n\t\td.terror(n, yaml_SEQ_TAG, out)\n\t\treturn false\n\t}\n\tet := out.Type().Elem()\n\n\tj := 0\n\tfor i := 0; i < l; i++ {\n\t\te := reflect.New(et).Elem()\n\t\tif ok := d.unmarshal(n.children[i], e); ok {\n\t\t\tout.Index(j).Set(e)\n\t\t\tj++\n\t\t}\n\t}\n\tout.Set(out.Slice(0, j))\n\tif iface.IsValid() {\n\t\tiface.Set(out)\n\t}\n\treturn true\n}\n\nfunc (d *decoder) mapping(n *node, out reflect.Value) (good bool) {\n\tswitch out.Kind() {\n\tcase reflect.Struct:\n\t\treturn d.mappingStruct(n, out)\n\tcase reflect.Slice:\n\t\treturn d.mappingSlice(n, out)\n\tcase reflect.Map:\n\t\t// okay\n\tcase reflect.Interface:\n\t\tif d.mapType.Kind() == reflect.Map {\n\t\t\tiface := out\n\t\t\tout = reflect.MakeMap(d.mapType)\n\t\t\tiface.Set(out)\n\t\t} else {\n\t\t\tslicev := reflect.New(d.mapType).Elem()\n\t\t\tif !d.mappingSlice(n, slicev) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tout.Set(slicev)\n\t\t\treturn true\n\t\t}\n\tdefault:\n\t\td.terror(n, yaml_MAP_TAG, out)\n\t\treturn false\n\t}\n\toutt := out.Type()\n\tkt := outt.Key()\n\tet := outt.Elem()\n\n\tmapType := d.mapType\n\tif outt.Key() == ifaceType && outt.Elem() == ifaceType {\n\t\td.mapType = outt\n\t}\n\n\tif out.IsNil() {\n\t\tout.Set(reflect.MakeMap(outt))\n\t}\n\tl := len(n.children)\n\tfor i := 0; i < l; i += 2 {\n\t\tif isMerge(n.children[i]) {\n\t\t\td.merge(n.children[i+1], out)\n\t\t\tcontinue\n\t\t}\n\t\tk := reflect.New(kt).Elem()\n\t\tif d.unmarshal(n.children[i], k) {\n\t\t\tkkind := k.Kind()\n\t\t\tif kkind == reflect.Interface {\n\t\t\t\tkkind = k.Elem().Kind()\n\t\t\t}\n\t\t\tif kkind == reflect.Map || kkind == reflect.Slice {\n\t\t\t\tfailf(\"invalid map key: %#v\", k.Interface())\n\t\t\t}\n\t\t\te := reflect.New(et).Elem()\n\t\t\tif d.unmarshal(n.children[i+1], e) {\n\t\t\t\tout.SetMapIndex(k, e)\n\t\t\t}\n\t\t}\n\t}\n\td.mapType = mapType\n\treturn true\n}\n\nfunc (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) {\n\toutt := out.Type()\n\tif outt.Elem() != mapItemType {\n\t\td.terror(n, yaml_MAP_TAG, out)\n\t\treturn false\n\t}\n\n\tmapType := d.mapType\n\td.mapType = outt\n\n\tvar slice []MapItem\n\tvar l = len(n.children)\n\tfor i := 0; i < l; i += 2 {\n\t\tif isMerge(n.children[i]) {\n\t\t\td.merge(n.children[i+1], out)\n\t\t\tcontinue\n\t\t}\n\t\titem := MapItem{}\n\t\tk := reflect.ValueOf(&item.Key).Elem()\n\t\tif d.unmarshal(n.children[i], k) {\n\t\t\tv := reflect.ValueOf(&item.Value).Elem()\n\t\t\tif d.unmarshal(n.children[i+1], v) {\n\t\t\t\tslice = append(slice, item)\n\t\t\t}\n\t\t}\n\t}\n\tout.Set(reflect.ValueOf(slice))\n\td.mapType = mapType\n\treturn true\n}\n\nfunc (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {\n\tsinfo, err := getStructInfo(out.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tname := settableValueOf(\"\")\n\tl := len(n.children)\n\n\tvar inlineMap reflect.Value\n\tvar elemType reflect.Type\n\tif sinfo.InlineMap != -1 {\n\t\tinlineMap = out.Field(sinfo.InlineMap)\n\t\tinlineMap.Set(reflect.New(inlineMap.Type()).Elem())\n\t\telemType = inlineMap.Type().Elem()\n\t}\n\n\tfor i := 0; i < l; i += 2 {\n\t\tni := n.children[i]\n\t\tif isMerge(ni) {\n\t\t\td.merge(n.children[i+1], out)\n\t\t\tcontinue\n\t\t}\n\t\tif !d.unmarshal(ni, name) {\n\t\t\tcontinue\n\t\t}\n\t\tif info, ok := sinfo.FieldsMap[name.String()]; ok {\n\t\t\tvar field reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tfield = out.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tfield = out.FieldByIndex(info.Inline)\n\t\t\t}\n\t\t\td.unmarshal(n.children[i+1], field)\n\t\t} else if sinfo.InlineMap != -1 {\n\t\t\tif inlineMap.IsNil() {\n\t\t\t\tinlineMap.Set(reflect.MakeMap(inlineMap.Type()))\n\t\t\t}\n\t\t\tvalue := reflect.New(elemType).Elem()\n\t\t\td.unmarshal(n.children[i+1], value)\n\t\t\tinlineMap.SetMapIndex(name, value)\n\t\t}\n\t}\n\treturn true\n}\n\nfunc failWantMap() {\n\tfailf(\"map merge requires map or sequence of maps as the value\")\n}\n\nfunc (d *decoder) merge(n *node, out reflect.Value) {\n\tswitch n.kind {\n\tcase mappingNode:\n\t\td.unmarshal(n, out)\n\tcase aliasNode:\n\t\tan, ok := d.doc.anchors[n.value]\n\t\tif ok && an.kind != mappingNode {\n\t\t\tfailWantMap()\n\t\t}\n\t\td.unmarshal(n, out)\n\tcase sequenceNode:\n\t\t// Step backwards as earlier nodes take precedence.\n\t\tfor i := len(n.children) - 1; i >= 0; i-- {\n\t\t\tni := n.children[i]\n\t\t\tif ni.kind == aliasNode {\n\t\t\t\tan, ok := d.doc.anchors[ni.value]\n\t\t\t\tif ok && an.kind != mappingNode {\n\t\t\t\t\tfailWantMap()\n\t\t\t\t}\n\t\t\t} else if ni.kind != mappingNode {\n\t\t\t\tfailWantMap()\n\t\t\t}\n\t\t\td.unmarshal(ni, out)\n\t\t}\n\tdefault:\n\t\tfailWantMap()\n\t}\n}\n\nfunc isMerge(n *node) bool {\n\treturn n.kind == scalarNode && n.value == \"<<\" && (n.implicit == true || n.tag == yaml_MERGE_TAG)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/emitterc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n)\n\n// Flush the buffer if needed.\nfunc flush(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) {\n\t\treturn yaml_emitter_flush(emitter)\n\t}\n\treturn true\n}\n\n// Put a character to the output buffer.\nfunc put(emitter *yaml_emitter_t, value byte) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.buffer[emitter.buffer_pos] = value\n\temitter.buffer_pos++\n\temitter.column++\n\treturn true\n}\n\n// Put a line break to the output buffer.\nfunc put_break(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tswitch emitter.line_break {\n\tcase yaml_CR_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\r'\n\t\temitter.buffer_pos += 1\n\tcase yaml_LN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\n'\n\t\temitter.buffer_pos += 1\n\tcase yaml_CRLN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos+0] = '\\r'\n\t\temitter.buffer[emitter.buffer_pos+1] = '\\n'\n\t\temitter.buffer_pos += 2\n\tdefault:\n\t\tpanic(\"unknown line break setting\")\n\t}\n\temitter.column = 0\n\temitter.line++\n\treturn true\n}\n\n// Copy a character from a string into buffer.\nfunc write(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tp := emitter.buffer_pos\n\tw := width(s[*i])\n\tswitch w {\n\tcase 4:\n\t\temitter.buffer[p+3] = s[*i+3]\n\t\tfallthrough\n\tcase 3:\n\t\temitter.buffer[p+2] = s[*i+2]\n\t\tfallthrough\n\tcase 2:\n\t\temitter.buffer[p+1] = s[*i+1]\n\t\tfallthrough\n\tcase 1:\n\t\temitter.buffer[p+0] = s[*i+0]\n\tdefault:\n\t\tpanic(\"unknown character width\")\n\t}\n\temitter.column++\n\temitter.buffer_pos += w\n\t*i += w\n\treturn true\n}\n\n// Write a whole string into buffer.\nfunc write_all(emitter *yaml_emitter_t, s []byte) bool {\n\tfor i := 0; i < len(s); {\n\t\tif !write(emitter, s, &i) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Copy a line break character from a string into buffer.\nfunc write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif s[*i] == '\\n' {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t\t*i++\n\t} else {\n\t\tif !write(emitter, s, i) {\n\t\t\treturn false\n\t\t}\n\t\temitter.column = 0\n\t\temitter.line++\n\t}\n\treturn true\n}\n\n// Set an emitter error and return false.\nfunc yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_EMITTER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Emit an event.\nfunc yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.events = append(emitter.events, *event)\n\tfor !yaml_emitter_need_more_events(emitter) {\n\t\tevent := &emitter.events[emitter.events_head]\n\t\tif !yaml_emitter_analyze_event(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_state_machine(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tyaml_event_delete(event)\n\t\temitter.events_head++\n\t}\n\treturn true\n}\n\n// Check if we need to accumulate more events before emitting.\n//\n// We accumulate extra\n//  - 1 event for DOCUMENT-START\n//  - 2 events for SEQUENCE-START\n//  - 3 events for MAPPING-START\n//\nfunc yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {\n\tif emitter.events_head == len(emitter.events) {\n\t\treturn true\n\t}\n\tvar accumulate int\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\taccumulate = 1\n\t\tbreak\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\taccumulate = 2\n\t\tbreak\n\tcase yaml_MAPPING_START_EVENT:\n\t\taccumulate = 3\n\t\tbreak\n\tdefault:\n\t\treturn false\n\t}\n\tif len(emitter.events)-emitter.events_head > accumulate {\n\t\treturn false\n\t}\n\tvar level int\n\tfor i := emitter.events_head; i < len(emitter.events); i++ {\n\t\tswitch emitter.events[i].typ {\n\t\tcase yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:\n\t\t\tlevel++\n\t\tcase yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:\n\t\t\tlevel--\n\t\t}\n\t\tif level == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Append a directive to the directives stack.\nfunc yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\tif bytes.Equal(value.handle, emitter.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"duplicate %TAG directive\")\n\t\t}\n\t}\n\n\t// [Go] Do we actually need to copy this given garbage collection\n\t// and the lack of deallocating destructors?\n\ttag_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(tag_copy.handle, value.handle)\n\tcopy(tag_copy.prefix, value.prefix)\n\temitter.tag_directives = append(emitter.tag_directives, tag_copy)\n\treturn true\n}\n\n// Increase the indentation level.\nfunc yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {\n\temitter.indents = append(emitter.indents, emitter.indent)\n\tif emitter.indent < 0 {\n\t\tif flow {\n\t\t\temitter.indent = emitter.best_indent\n\t\t} else {\n\t\t\temitter.indent = 0\n\t\t}\n\t} else if !indentless {\n\t\temitter.indent += emitter.best_indent\n\t}\n\treturn true\n}\n\n// State dispatcher.\nfunc yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tswitch emitter.state {\n\tdefault:\n\tcase yaml_EMIT_STREAM_START_STATE:\n\t\treturn yaml_emitter_emit_stream_start(emitter, event)\n\n\tcase yaml_EMIT_FIRST_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, true)\n\n\tcase yaml_EMIT_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, false)\n\n\tcase yaml_EMIT_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_emitter_emit_document_content(emitter, event)\n\n\tcase yaml_EMIT_DOCUMENT_END_STATE:\n\t\treturn yaml_emitter_emit_document_end(emitter, event)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_END_STATE:\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected nothing after STREAM-END\")\n\t}\n\tpanic(\"invalid emitter state\")\n}\n\n// Expect STREAM-START.\nfunc yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_STREAM_START_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected STREAM-START\")\n\t}\n\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\temitter.encoding = event.encoding\n\t\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\t\temitter.encoding = yaml_UTF8_ENCODING\n\t\t}\n\t}\n\tif emitter.best_indent < 2 || emitter.best_indent > 9 {\n\t\temitter.best_indent = 2\n\t}\n\tif emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {\n\t\temitter.best_width = 80\n\t}\n\tif emitter.best_width < 0 {\n\t\temitter.best_width = 1<<31 - 1\n\t}\n\tif emitter.line_break == yaml_ANY_BREAK {\n\t\temitter.line_break = yaml_LN_BREAK\n\t}\n\n\temitter.indent = -1\n\temitter.line = 0\n\temitter.column = 0\n\temitter.whitespace = true\n\temitter.indention = true\n\n\tif emitter.encoding != yaml_UTF8_ENCODING {\n\t\tif !yaml_emitter_write_bom(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE\n\treturn true\n}\n\n// Expect DOCUMENT-START or STREAM-END.\nfunc yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\n\tif event.typ == yaml_DOCUMENT_START_EVENT {\n\n\t\tif event.version_directive != nil {\n\t\t\tif !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\tif !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(default_tag_directives); i++ {\n\t\t\ttag_directive := &default_tag_directives[i]\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\timplicit := event.implicit\n\t\tif !first || emitter.canonical {\n\t\t\timplicit = false\n\t\t}\n\n\t\tif emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif event.version_directive != nil {\n\t\t\timplicit = false\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%YAML\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"1.1\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif len(event.tag_directives) > 0 {\n\t\t\timplicit = false\n\t\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%TAG\"), true, false, false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif yaml_emitter_check_empty_document(emitter) {\n\t\t\timplicit = false\n\t\t}\n\t\tif !implicit {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"---\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif emitter.canonical {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\temitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE\n\t\treturn true\n\t}\n\n\tif event.typ == yaml_STREAM_END_EVENT {\n\t\tif emitter.open_ended {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_flush(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = yaml_EMIT_END_STATE\n\t\treturn true\n\t}\n\n\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-START or STREAM-END\")\n}\n\n// Expect the root node.\nfunc yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, true, false, false, false)\n}\n\n// Expect DOCUMENT-END.\nfunc yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_DOCUMENT_END_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-END\")\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !event.implicit {\n\t\t// [Go] Allocate the slice elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.state = yaml_EMIT_DOCUMENT_START_STATE\n\temitter.tag_directives = emitter.tag_directives[:0]\n\treturn true\n}\n\n// Expect a flow item node.\nfunc yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\n\t\treturn true\n\t}\n\n\tif !first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, true, false, false)\n}\n\n// Expect a flow key node.\nfunc yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\n\tif !first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif !emitter.canonical && yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a flow value node.\nfunc yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a block item node.\nfunc yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, true, false, false)\n}\n\n// Expect a block key node.\nfunc yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_increase_indent(emitter, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a block value node.\nfunc yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a node.\nfunc yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,\n\troot bool, sequence bool, mapping bool, simple_key bool) bool {\n\n\temitter.root_context = root\n\temitter.sequence_context = sequence\n\temitter.mapping_context = mapping\n\temitter.simple_key_context = simple_key\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\treturn yaml_emitter_emit_alias(emitter, event)\n\tcase yaml_SCALAR_EVENT:\n\t\treturn yaml_emitter_emit_scalar(emitter, event)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn yaml_emitter_emit_sequence_start(emitter, event)\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn yaml_emitter_emit_mapping_start(emitter, event)\n\tdefault:\n\t\treturn yaml_emitter_set_emitter_error(emitter,\n\t\t\t\"expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS\")\n\t}\n}\n\n// Expect ALIAS.\nfunc yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SCALAR.\nfunc yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_select_scalar_style(emitter, event) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_scalar(emitter) {\n\t\treturn false\n\t}\n\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SEQUENCE-START.\nfunc yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||\n\t\tyaml_emitter_check_empty_sequence(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\n\t}\n\treturn true\n}\n\n// Expect MAPPING-START.\nfunc yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||\n\t\tyaml_emitter_check_empty_mapping(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\n\t}\n\treturn true\n}\n\n// Check if the document content is an empty scalar.\nfunc yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {\n\treturn false // [Go] Huh?\n}\n\n// Check if the next events represent an empty sequence.\nfunc yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT\n}\n\n// Check if the next events represent an empty mapping.\nfunc yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT\n}\n\n// Check if the next node can be expressed as a simple key.\nfunc yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {\n\tlength := 0\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tlength += len(emitter.anchor_data.anchor)\n\tcase yaml_SCALAR_EVENT:\n\t\tif emitter.scalar_data.multiline {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix) +\n\t\t\tlen(emitter.scalar_data.value)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif !yaml_emitter_check_empty_sequence(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif !yaml_emitter_check_empty_mapping(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tdefault:\n\t\treturn false\n\t}\n\treturn length <= 128\n}\n\n// Determine an acceptable scalar style.\nfunc yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\tno_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0\n\tif no_tag && !event.implicit && !event.quoted_implicit {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"neither tag nor implicit flags are specified\")\n\t}\n\n\tstyle := event.scalar_style()\n\tif style == yaml_ANY_SCALAR_STYLE {\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\t}\n\tif emitter.canonical {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\tif emitter.simple_key_context && emitter.scalar_data.multiline {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\n\tif style == yaml_PLAIN_SCALAR_STYLE {\n\t\tif emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||\n\t\t\temitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif no_tag && !event.implicit {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_SINGLE_QUOTED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.single_quoted_allowed {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\n\tif no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {\n\t\temitter.tag_data.handle = []byte{'!'}\n\t}\n\temitter.scalar_data.style = style\n\treturn true\n}\n\n// Write an achor.\nfunc yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {\n\tif emitter.anchor_data.anchor == nil {\n\t\treturn true\n\t}\n\tc := []byte{'&'}\n\tif emitter.anchor_data.alias {\n\t\tc[0] = '*'\n\t}\n\tif !yaml_emitter_write_indicator(emitter, c, true, false, false) {\n\t\treturn false\n\t}\n\treturn yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)\n}\n\n// Write a tag.\nfunc yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {\n\tif len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {\n\t\treturn true\n\t}\n\tif len(emitter.tag_data.handle) > 0 {\n\t\tif !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {\n\t\t\treturn false\n\t\t}\n\t\tif len(emitter.tag_data.suffix) > 0 {\n\t\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// [Go] Allocate these slices elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"!<\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Write a scalar.\nfunc yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {\n\tswitch emitter.scalar_data.style {\n\tcase yaml_PLAIN_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_SINGLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_DOUBLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_LITERAL_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)\n\n\tcase yaml_FOLDED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)\n\t}\n\tpanic(\"unknown scalar style\")\n}\n\n// Check if a %YAML directive is valid.\nfunc yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {\n\tif version_directive.major != 1 || version_directive.minor != 1 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"incompatible %YAML directive\")\n\t}\n\treturn true\n}\n\n// Check if a %TAG directive is valid.\nfunc yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {\n\thandle := tag_directive.handle\n\tprefix := tag_directive.prefix\n\tif len(handle) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must not be empty\")\n\t}\n\tif handle[0] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must start with '!'\")\n\t}\n\tif handle[len(handle)-1] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must end with '!'\")\n\t}\n\tfor i := 1; i < len(handle)-1; i += width(handle[i]) {\n\t\tif !is_alpha(handle, i) {\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must contain alphanumerical characters only\")\n\t\t}\n\t}\n\tif len(prefix) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag prefix must not be empty\")\n\t}\n\treturn true\n}\n\n// Check if an anchor is valid.\nfunc yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {\n\tif len(anchor) == 0 {\n\t\tproblem := \"anchor value must not be empty\"\n\t\tif alias {\n\t\t\tproblem = \"alias value must not be empty\"\n\t\t}\n\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t}\n\tfor i := 0; i < len(anchor); i += width(anchor[i]) {\n\t\tif !is_alpha(anchor, i) {\n\t\t\tproblem := \"anchor value must contain alphanumerical characters only\"\n\t\t\tif alias {\n\t\t\t\tproblem = \"alias value must contain alphanumerical characters only\"\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t\t}\n\t}\n\temitter.anchor_data.anchor = anchor\n\temitter.anchor_data.alias = alias\n\treturn true\n}\n\n// Check if a tag is valid.\nfunc yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {\n\tif len(tag) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag value must not be empty\")\n\t}\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\ttag_directive := &emitter.tag_directives[i]\n\t\tif bytes.HasPrefix(tag, tag_directive.prefix) {\n\t\t\temitter.tag_data.handle = tag_directive.handle\n\t\t\temitter.tag_data.suffix = tag[len(tag_directive.prefix):]\n\t\t\treturn true\n\t\t}\n\t}\n\temitter.tag_data.suffix = tag\n\treturn true\n}\n\n// Check if a scalar is valid.\nfunc yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tvar (\n\t\tblock_indicators   = false\n\t\tflow_indicators    = false\n\t\tline_breaks        = false\n\t\tspecial_characters = false\n\n\t\tleading_space  = false\n\t\tleading_break  = false\n\t\ttrailing_space = false\n\t\ttrailing_break = false\n\t\tbreak_space    = false\n\t\tspace_break    = false\n\n\t\tpreceeded_by_whitespace = false\n\t\tfollowed_by_whitespace  = false\n\t\tprevious_space          = false\n\t\tprevious_break          = false\n\t)\n\n\temitter.scalar_data.value = value\n\n\tif len(value) == 0 {\n\t\temitter.scalar_data.multiline = false\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = true\n\t\temitter.scalar_data.single_quoted_allowed = true\n\t\temitter.scalar_data.block_allowed = false\n\t\treturn true\n\t}\n\n\tif len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {\n\t\tblock_indicators = true\n\t\tflow_indicators = true\n\t}\n\n\tpreceeded_by_whitespace = true\n\tfor i, w := 0, 0; i < len(value); i += w {\n\t\tw = width(value[i])\n\t\tfollowed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)\n\n\t\tif i == 0 {\n\t\t\tswitch value[i] {\n\t\t\tcase '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\\'', '\"', '%', '@', '`':\n\t\t\t\tflow_indicators = true\n\t\t\t\tblock_indicators = true\n\t\t\tcase '?', ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '-':\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tswitch value[i] {\n\t\t\tcase ',', '?', '[', ']', '{', '}':\n\t\t\t\tflow_indicators = true\n\t\t\tcase ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '#':\n\t\t\t\tif preceeded_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {\n\t\t\tspecial_characters = true\n\t\t}\n\t\tif is_space(value, i) {\n\t\t\tif i == 0 {\n\t\t\t\tleading_space = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_space = true\n\t\t\t}\n\t\t\tif previous_break {\n\t\t\t\tbreak_space = true\n\t\t\t}\n\t\t\tprevious_space = true\n\t\t\tprevious_break = false\n\t\t} else if is_break(value, i) {\n\t\t\tline_breaks = true\n\t\t\tif i == 0 {\n\t\t\t\tleading_break = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_break = true\n\t\t\t}\n\t\t\tif previous_space {\n\t\t\t\tspace_break = true\n\t\t\t}\n\t\t\tprevious_space = false\n\t\t\tprevious_break = true\n\t\t} else {\n\t\t\tprevious_space = false\n\t\t\tprevious_break = false\n\t\t}\n\n\t\t// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.\n\t\tpreceeded_by_whitespace = is_blankz(value, i)\n\t}\n\n\temitter.scalar_data.multiline = line_breaks\n\temitter.scalar_data.flow_plain_allowed = true\n\temitter.scalar_data.block_plain_allowed = true\n\temitter.scalar_data.single_quoted_allowed = true\n\temitter.scalar_data.block_allowed = true\n\n\tif leading_space || leading_break || trailing_space || trailing_break {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif trailing_space {\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif break_space {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t}\n\tif space_break || special_characters {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif line_breaks {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif flow_indicators {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t}\n\tif block_indicators {\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\treturn true\n}\n\n// Check if the event data is valid.\nfunc yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\temitter.anchor_data.anchor = nil\n\temitter.tag_data.handle = nil\n\temitter.tag_data.suffix = nil\n\temitter.scalar_data.value = nil\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SCALAR_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_analyze_scalar(emitter, event.value) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// Write the BOM character.\nfunc yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {\n\tif !flush(emitter) {\n\t\treturn false\n\t}\n\tpos := emitter.buffer_pos\n\temitter.buffer[pos+0] = '\\xEF'\n\temitter.buffer[pos+1] = '\\xBB'\n\temitter.buffer[pos+2] = '\\xBF'\n\temitter.buffer_pos += 3\n\treturn true\n}\n\nfunc yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {\n\tindent := emitter.indent\n\tif indent < 0 {\n\t\tindent = 0\n\t}\n\tif !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor emitter.column < indent {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.whitespace = true\n\temitter.indention = true\n\treturn true\n}\n\nfunc yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, indicator) {\n\t\treturn false\n\t}\n\temitter.whitespace = is_whitespace\n\temitter.indention = (emitter.indention && is_indention)\n\temitter.open_ended = false\n\treturn true\n}\n\nfunc yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor i := 0; i < len(value); {\n\t\tvar must_write bool\n\t\tswitch value[i] {\n\t\tcase ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\\'', '(', ')', '[', ']':\n\t\t\tmust_write = true\n\t\tdefault:\n\t\t\tmust_write = is_alpha(value, i)\n\t\t}\n\t\tif must_write {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\tw := width(value[i])\n\t\t\tfor k := 0; k < w; k++ {\n\t\t\t\toctet := value[i]\n\t\t\t\ti++\n\t\t\t\tif !put(emitter, '%') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc := octet >> 4\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc = octet & 0x0f\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\temitter.whitespace = false\n\temitter.indention = false\n\tif emitter.root_context {\n\t\temitter.open_ended = true\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, true, false, false) {\n\t\treturn false\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif value[i] == '\\'' {\n\t\t\t\tif !put(emitter, '\\'') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tspaces := false\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, true, false, false) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(value); {\n\t\tif !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||\n\t\t\tis_bom(value, i) || is_break(value, i) ||\n\t\t\tvalue[i] == '\"' || value[i] == '\\\\' {\n\n\t\t\toctet := value[i]\n\n\t\t\tvar w int\n\t\t\tvar v rune\n\t\t\tswitch {\n\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\tw, v = 1, rune(octet&0x7F)\n\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\tw, v = 2, rune(octet&0x1F)\n\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\tw, v = 3, rune(octet&0x0F)\n\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\tw, v = 4, rune(octet&0x07)\n\t\t\t}\n\t\t\tfor k := 1; k < w; k++ {\n\t\t\t\toctet = value[i+k]\n\t\t\t\tv = (v << 6) + (rune(octet) & 0x3F)\n\t\t\t}\n\t\t\ti += w\n\n\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tvar ok bool\n\t\t\tswitch v {\n\t\t\tcase 0x00:\n\t\t\t\tok = put(emitter, '0')\n\t\t\tcase 0x07:\n\t\t\t\tok = put(emitter, 'a')\n\t\t\tcase 0x08:\n\t\t\t\tok = put(emitter, 'b')\n\t\t\tcase 0x09:\n\t\t\t\tok = put(emitter, 't')\n\t\t\tcase 0x0A:\n\t\t\t\tok = put(emitter, 'n')\n\t\t\tcase 0x0b:\n\t\t\t\tok = put(emitter, 'v')\n\t\t\tcase 0x0c:\n\t\t\t\tok = put(emitter, 'f')\n\t\t\tcase 0x0d:\n\t\t\t\tok = put(emitter, 'r')\n\t\t\tcase 0x1b:\n\t\t\t\tok = put(emitter, 'e')\n\t\t\tcase 0x22:\n\t\t\t\tok = put(emitter, '\"')\n\t\t\tcase 0x5c:\n\t\t\t\tok = put(emitter, '\\\\')\n\t\t\tcase 0x85:\n\t\t\t\tok = put(emitter, 'N')\n\t\t\tcase 0xA0:\n\t\t\t\tok = put(emitter, '_')\n\t\t\tcase 0x2028:\n\t\t\t\tok = put(emitter, 'L')\n\t\t\tcase 0x2029:\n\t\t\t\tok = put(emitter, 'P')\n\t\t\tdefault:\n\t\t\t\tif v <= 0xFF {\n\t\t\t\t\tok = put(emitter, 'x')\n\t\t\t\t\tw = 2\n\t\t\t\t} else if v <= 0xFFFF {\n\t\t\t\t\tok = put(emitter, 'u')\n\t\t\t\t\tw = 4\n\t\t\t\t} else {\n\t\t\t\t\tok = put(emitter, 'U')\n\t\t\t\t\tw = 8\n\t\t\t\t}\n\t\t\t\tfor k := (w - 1) * 4; ok && k >= 0; k -= 4 {\n\t\t\t\t\tdigit := byte((v >> uint(k)) & 0x0F)\n\t\t\t\t\tif digit < 10 {\n\t\t\t\t\t\tok = put(emitter, digit+'0')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tok = put(emitter, digit+'A'-10)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t} else if is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif is_space(value, i+1) {\n\t\t\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else if !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {\n\tif is_space(value, 0) || is_break(value, 0) {\n\t\tindent_hint := []byte{'0' + byte(emitter.best_indent)}\n\t\tif !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\temitter.open_ended = false\n\n\tvar chomp_hint [1]byte\n\tif len(value) == 0 {\n\t\tchomp_hint[0] = '-'\n\t} else {\n\t\ti := len(value) - 1\n\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\ti--\n\t\t}\n\t\tif !is_break(value, i) {\n\t\t\tchomp_hint[0] = '-'\n\t\t} else if i == 0 {\n\t\t\tchomp_hint[0] = '+'\n\t\t\temitter.open_ended = true\n\t\t} else {\n\t\t\ti--\n\t\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\t\ti--\n\t\t\t}\n\t\t\tif is_break(value, i) {\n\t\t\t\tchomp_hint[0] = '+'\n\t\t\t\temitter.open_ended = true\n\t\t\t}\n\t\t}\n\t}\n\tif chomp_hint[0] != 0 {\n\t\tif !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\tif !put_break(emitter) {\n\t\treturn false\n\t}\n\temitter.indention = true\n\temitter.whitespace = true\n\tbreaks := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\n\tif !put_break(emitter) {\n\t\treturn false\n\t}\n\temitter.indention = true\n\temitter.whitespace = true\n\n\tbreaks := true\n\tleading_spaces := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !breaks && !leading_spaces && value[i] == '\\n' {\n\t\t\t\tk := 0\n\t\t\t\tfor is_break(value, k) {\n\t\t\t\t\tk += width(value[k])\n\t\t\t\t}\n\t\t\t\tif !is_blankz(value, k) {\n\t\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tleading_spaces = is_blank(value, i)\n\t\t\t}\n\t\t\tif !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/encode.go",
    "content": "package yaml\n\nimport (\n\t\"encoding\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype encoder struct {\n\temitter yaml_emitter_t\n\tevent   yaml_event_t\n\tout     []byte\n\tflow    bool\n}\n\nfunc newEncoder() (e *encoder) {\n\te = &encoder{}\n\te.must(yaml_emitter_initialize(&e.emitter))\n\tyaml_emitter_set_output_string(&e.emitter, &e.out)\n\tyaml_emitter_set_unicode(&e.emitter, true)\n\te.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING))\n\te.emit()\n\te.must(yaml_document_start_event_initialize(&e.event, nil, nil, true))\n\te.emit()\n\treturn e\n}\n\nfunc (e *encoder) finish() {\n\te.must(yaml_document_end_event_initialize(&e.event, true))\n\te.emit()\n\te.emitter.open_ended = false\n\te.must(yaml_stream_end_event_initialize(&e.event))\n\te.emit()\n}\n\nfunc (e *encoder) destroy() {\n\tyaml_emitter_delete(&e.emitter)\n}\n\nfunc (e *encoder) emit() {\n\t// This will internally delete the e.event value.\n\tif !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT {\n\t\te.must(false)\n\t}\n}\n\nfunc (e *encoder) must(ok bool) {\n\tif !ok {\n\t\tmsg := e.emitter.problem\n\t\tif msg == \"\" {\n\t\t\tmsg = \"unknown problem generating YAML content\"\n\t\t}\n\t\tfailf(\"%s\", msg)\n\t}\n}\n\nfunc (e *encoder) marshal(tag string, in reflect.Value) {\n\tif !in.IsValid() {\n\t\te.nilv()\n\t\treturn\n\t}\n\tiface := in.Interface()\n\tif m, ok := iface.(Marshaler); ok {\n\t\tv, err := m.MarshalYAML()\n\t\tif err != nil {\n\t\t\tfail(err)\n\t\t}\n\t\tif v == nil {\n\t\t\te.nilv()\n\t\t\treturn\n\t\t}\n\t\tin = reflect.ValueOf(v)\n\t} else if m, ok := iface.(encoding.TextMarshaler); ok {\n\t\ttext, err := m.MarshalText()\n\t\tif err != nil {\n\t\t\tfail(err)\n\t\t}\n\t\tin = reflect.ValueOf(string(text))\n\t}\n\tswitch in.Kind() {\n\tcase reflect.Interface:\n\t\tif in.IsNil() {\n\t\t\te.nilv()\n\t\t} else {\n\t\t\te.marshal(tag, in.Elem())\n\t\t}\n\tcase reflect.Map:\n\t\te.mapv(tag, in)\n\tcase reflect.Ptr:\n\t\tif in.IsNil() {\n\t\t\te.nilv()\n\t\t} else {\n\t\t\te.marshal(tag, in.Elem())\n\t\t}\n\tcase reflect.Struct:\n\t\te.structv(tag, in)\n\tcase reflect.Slice:\n\t\tif in.Type().Elem() == mapItemType {\n\t\t\te.itemsv(tag, in)\n\t\t} else {\n\t\t\te.slicev(tag, in)\n\t\t}\n\tcase reflect.String:\n\t\te.stringv(tag, in)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tif in.Type() == durationType {\n\t\t\te.stringv(tag, reflect.ValueOf(iface.(time.Duration).String()))\n\t\t} else {\n\t\t\te.intv(tag, in)\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\te.uintv(tag, in)\n\tcase reflect.Float32, reflect.Float64:\n\t\te.floatv(tag, in)\n\tcase reflect.Bool:\n\t\te.boolv(tag, in)\n\tdefault:\n\t\tpanic(\"cannot marshal type: \" + in.Type().String())\n\t}\n}\n\nfunc (e *encoder) mapv(tag string, in reflect.Value) {\n\te.mappingv(tag, func() {\n\t\tkeys := keyList(in.MapKeys())\n\t\tsort.Sort(keys)\n\t\tfor _, k := range keys {\n\t\t\te.marshal(\"\", k)\n\t\t\te.marshal(\"\", in.MapIndex(k))\n\t\t}\n\t})\n}\n\nfunc (e *encoder) itemsv(tag string, in reflect.Value) {\n\te.mappingv(tag, func() {\n\t\tslice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem)\n\t\tfor _, item := range slice {\n\t\t\te.marshal(\"\", reflect.ValueOf(item.Key))\n\t\t\te.marshal(\"\", reflect.ValueOf(item.Value))\n\t\t}\n\t})\n}\n\nfunc (e *encoder) structv(tag string, in reflect.Value) {\n\tsinfo, err := getStructInfo(in.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\te.mappingv(tag, func() {\n\t\tfor _, info := range sinfo.FieldsList {\n\t\t\tvar value reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tvalue = in.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tvalue = in.FieldByIndex(info.Inline)\n\t\t\t}\n\t\t\tif info.OmitEmpty && isZero(value) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\te.marshal(\"\", reflect.ValueOf(info.Key))\n\t\t\te.flow = info.Flow\n\t\t\te.marshal(\"\", value)\n\t\t}\n\t\tif sinfo.InlineMap >= 0 {\n\t\t\tm := in.Field(sinfo.InlineMap)\n\t\t\tif m.Len() > 0 {\n\t\t\t\te.flow = false\n\t\t\t\tkeys := keyList(m.MapKeys())\n\t\t\t\tsort.Sort(keys)\n\t\t\t\tfor _, k := range keys {\n\t\t\t\t\tif _, found := sinfo.FieldsMap[k.String()]; found {\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"Can't have key %q in inlined map; conflicts with struct field\", k.String()))\n\t\t\t\t\t}\n\t\t\t\t\te.marshal(\"\", k)\n\t\t\t\t\te.flow = false\n\t\t\t\t\te.marshal(\"\", m.MapIndex(k))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc (e *encoder) mappingv(tag string, f func()) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_MAPPING_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_MAPPING_STYLE\n\t}\n\te.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))\n\te.emit()\n\tf()\n\te.must(yaml_mapping_end_event_initialize(&e.event))\n\te.emit()\n}\n\nfunc (e *encoder) slicev(tag string, in reflect.Value) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_SEQUENCE_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_SEQUENCE_STYLE\n\t}\n\te.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))\n\te.emit()\n\tn := in.Len()\n\tfor i := 0; i < n; i++ {\n\t\te.marshal(\"\", in.Index(i))\n\t}\n\te.must(yaml_sequence_end_event_initialize(&e.event))\n\te.emit()\n}\n\n// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.\n//\n// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported\n// in YAML 1.2 and by this package, but these should be marshalled quoted for\n// the time being for compatibility with other parsers.\nfunc isBase60Float(s string) (result bool) {\n\t// Fast path.\n\tif s == \"\" {\n\t\treturn false\n\t}\n\tc := s[0]\n\tif !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {\n\t\treturn false\n\t}\n\t// Do the full match.\n\treturn base60float.MatchString(s)\n}\n\n// From http://yaml.org/type/float.html, except the regular expression there\n// is bogus. In practice parsers do not enforce the \"\\.[0-9_]*\" suffix.\nvar base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\\.[0-9_]*)?$`)\n\nfunc (e *encoder) stringv(tag string, in reflect.Value) {\n\tvar style yaml_scalar_style_t\n\ts := in.String()\n\trtag, rs := resolve(\"\", s)\n\tif rtag == yaml_BINARY_TAG {\n\t\tif tag == \"\" || tag == yaml_STR_TAG {\n\t\t\ttag = rtag\n\t\t\ts = rs.(string)\n\t\t} else if tag == yaml_BINARY_TAG {\n\t\t\tfailf(\"explicitly tagged !!binary data must be base64-encoded\")\n\t\t} else {\n\t\t\tfailf(\"cannot marshal invalid UTF-8 data as %s\", shortTag(tag))\n\t\t}\n\t}\n\tif tag == \"\" && (rtag != yaml_STR_TAG || isBase60Float(s)) {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t} else if strings.Contains(s, \"\\n\") {\n\t\tstyle = yaml_LITERAL_SCALAR_STYLE\n\t} else {\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\t}\n\te.emitScalar(s, \"\", tag, style)\n}\n\nfunc (e *encoder) boolv(tag string, in reflect.Value) {\n\tvar s string\n\tif in.Bool() {\n\t\ts = \"true\"\n\t} else {\n\t\ts = \"false\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) intv(tag string, in reflect.Value) {\n\ts := strconv.FormatInt(in.Int(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) uintv(tag string, in reflect.Value) {\n\ts := strconv.FormatUint(in.Uint(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) floatv(tag string, in reflect.Value) {\n\t// FIXME: Handle 64 bits here.\n\ts := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32)\n\tswitch s {\n\tcase \"+Inf\":\n\t\ts = \".inf\"\n\tcase \"-Inf\":\n\t\ts = \"-.inf\"\n\tcase \"NaN\":\n\t\ts = \".nan\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) nilv() {\n\te.emitScalar(\"null\", \"\", \"\", yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) {\n\timplicit := tag == \"\"\n\te.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))\n\te.emit()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/parserc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n)\n\n// The parser implements the following grammar:\n//\n// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END\n// implicit_document    ::= block_node DOCUMENT-END*\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n// block_node_or_indentless_sequence    ::=\n//                          ALIAS\n//                          | properties (block_content | indentless_block_sequence)?\n//                          | block_content\n//                          | indentless_block_sequence\n// block_node           ::= ALIAS\n//                          | properties block_content?\n//                          | block_content\n// flow_node            ::= ALIAS\n//                          | properties flow_content?\n//                          | flow_content\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n// block_content        ::= block_collection | flow_collection | SCALAR\n// flow_content         ::= flow_collection | SCALAR\n// block_collection     ::= block_sequence | block_mapping\n// flow_collection      ::= flow_sequence | flow_mapping\n// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n// block_mapping        ::= BLOCK-MAPPING_START\n//                          ((KEY block_node_or_indentless_sequence?)?\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//                          BLOCK-END\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//                          (flow_sequence_entry FLOW-ENTRY)*\n//                          flow_sequence_entry?\n//                          FLOW-SEQUENCE-END\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n// flow_mapping         ::= FLOW-MAPPING-START\n//                          (flow_mapping_entry FLOW-ENTRY)*\n//                          flow_mapping_entry?\n//                          FLOW-MAPPING-END\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n\n// Peek the next token in the token queue.\nfunc peek_token(parser *yaml_parser_t) *yaml_token_t {\n\tif parser.token_available || yaml_parser_fetch_more_tokens(parser) {\n\t\treturn &parser.tokens[parser.tokens_head]\n\t}\n\treturn nil\n}\n\n// Remove the next token from the queue (must be called after peek_token).\nfunc skip_token(parser *yaml_parser_t) {\n\tparser.token_available = false\n\tparser.tokens_parsed++\n\tparser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN\n\tparser.tokens_head++\n}\n\n// Get the next event.\nfunc yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t// Erase the event object.\n\t*event = yaml_event_t{}\n\n\t// No events after the end of the stream or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {\n\t\treturn true\n\t}\n\n\t// Generate the next event.\n\treturn yaml_parser_state_machine(parser, event)\n}\n\n// Set parser error.\nfunc yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\nfunc yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\n// State dispatcher.\nfunc yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t//trace(\"yaml_parser_state_machine\", \"state:\", parser.state.String())\n\n\tswitch parser.state {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn yaml_parser_parse_stream_start(parser, event)\n\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, true)\n\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, false)\n\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_parser_parse_document_content(parser, event)\n\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn yaml_parser_parse_document_end(parser, event)\n\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_indentless_sequence_entry(parser, event)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_block_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)\n\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, true)\n\n\tdefault:\n\t\tpanic(\"invalid parser state\")\n\t}\n}\n\n// Parse the production:\n// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END\n//              ************\nfunc yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_STREAM_START_TOKEN {\n\t\treturn yaml_parser_set_parser_error(parser, \"did not find expected <stream-start>\", token.start_mark)\n\t}\n\tparser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_STREAM_START_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t\tencoding:   token.encoding,\n\t}\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//                          *\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//                          *************************\nfunc yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\t// Parse extra document end indicators.\n\tif !implicit {\n\t\tfor token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tif implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_TAG_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_DOCUMENT_START_TOKEN &&\n\t\ttoken.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an implicit document.\n\t\tif !yaml_parser_process_directives(parser, nil, nil) {\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_BLOCK_NODE_STATE\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\n\t} else if token.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an explicit document.\n\t\tvar version_directive *yaml_version_directive_t\n\t\tvar tag_directives []yaml_tag_directive_t\n\t\tstart_mark := token.start_mark\n\t\tif !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {\n\t\t\treturn false\n\t\t}\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_DOCUMENT_START_TOKEN {\n\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\"did not find expected <document start>\", token.start_mark)\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE\n\t\tend_mark := token.end_mark\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark:        start_mark,\n\t\t\tend_mark:          end_mark,\n\t\t\tversion_directive: version_directive,\n\t\t\ttag_directives:    tag_directives,\n\t\t\timplicit:          false,\n\t\t}\n\t\tskip_token(parser)\n\n\t} else {\n\t\t// Parse the stream end.\n\t\tparser.state = yaml_PARSE_END_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_STREAM_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tskip_token(parser)\n\t}\n\n\treturn true\n}\n\n// Parse the productions:\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//                                                    ***********\n//\nfunc yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_TAG_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_START_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_END_TOKEN ||\n\t\ttoken.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\treturn yaml_parser_process_empty_scalar(parser, event,\n\t\t\ttoken.start_mark)\n\t}\n\treturn yaml_parser_parse_node(parser, event, true, false)\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//                                     *************\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//\nfunc yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\timplicit := true\n\tif token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\timplicit = false\n\t}\n\n\tparser.tag_directives = parser.tag_directives[:0]\n\n\tparser.state = yaml_PARSE_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_DOCUMENT_END_EVENT,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\timplicit:   implicit,\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// block_node_or_indentless_sequence    ::=\n//                          ALIAS\n//                          *****\n//                          | properties (block_content | indentless_block_sequence)?\n//                            **********  *\n//                          | block_content | indentless_block_sequence\n//                            *\n// block_node           ::= ALIAS\n//                          *****\n//                          | properties block_content?\n//                            ********** *\n//                          | block_content\n//                            *\n// flow_node            ::= ALIAS\n//                          *****\n//                          | properties flow_content?\n//                            ********** *\n//                          | flow_content\n//                            *\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n//                          *************************\n// block_content        ::= block_collection | flow_collection | SCALAR\n//                                                               ******\n// flow_content         ::= flow_collection | SCALAR\n//                                            ******\nfunc yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {\n\t//defer trace(\"yaml_parser_parse_node\", \"block:\", block, \"indentless_sequence:\", indentless_sequence)()\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_ALIAS_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_ALIAS_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t\tanchor:     token.value,\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\tvar tag_token bool\n\tvar tag_handle, tag_suffix, anchor []byte\n\tvar tag_mark yaml_mark_t\n\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\tanchor = token.value\n\t\tstart_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_TAG_TOKEN {\n\t\t\ttag_token = true\n\t\t\ttag_handle = token.value\n\t\t\ttag_suffix = token.suffix\n\t\t\ttag_mark = token.start_mark\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else if token.typ == yaml_TAG_TOKEN {\n\t\ttag_token = true\n\t\ttag_handle = token.value\n\t\ttag_suffix = token.suffix\n\t\tstart_mark = token.start_mark\n\t\ttag_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\t\tanchor = token.value\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tvar tag []byte\n\tif tag_token {\n\t\tif len(tag_handle) == 0 {\n\t\t\ttag = tag_suffix\n\t\t\ttag_suffix = nil\n\t\t} else {\n\t\t\tfor i := range parser.tag_directives {\n\t\t\t\tif bytes.Equal(parser.tag_directives[i].handle, tag_handle) {\n\t\t\t\t\ttag = append([]byte(nil), parser.tag_directives[i].prefix...)\n\t\t\t\t\ttag = append(tag, tag_suffix...)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(tag) == 0 {\n\t\t\t\tyaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a node\", start_mark,\n\t\t\t\t\t\"found undefined tag handle\", tag_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\timplicit := len(tag) == 0\n\tif indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif token.typ == yaml_SCALAR_TOKEN {\n\t\tvar plain_implicit, quoted_implicit bool\n\t\tend_mark = token.end_mark\n\t\tif (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {\n\t\t\tplain_implicit = true\n\t\t} else if len(tag) == 0 {\n\t\t\tquoted_implicit = true\n\t\t}\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\tvalue:           token.value,\n\t\t\timplicit:        plain_implicit,\n\t\t\tquoted_implicit: quoted_implicit,\n\t\t\tstyle:           yaml_style_t(token.style),\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {\n\t\t// [Go] Some of the events below can be merged as they differ only on style.\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif len(anchor) > 0 || len(tag) > 0 {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\timplicit:        implicit,\n\t\t\tquoted_implicit: false,\n\t\t\tstyle:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\n\tcontext := \"while parsing a flow node\"\n\tif block {\n\t\tcontext = \"while parsing a block node\"\n\t}\n\tyaml_parser_set_parser_error_context(parser, context, start_mark,\n\t\t\"did not find expected node content\", token.start_mark)\n\treturn false\n}\n\n// Parse the productions:\n// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n//                    ********************  *********** *             *********\n//\nfunc yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t}\n\tif token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block collection\", context_mark,\n\t\t\"did not find expected '-' indicator\", token.start_mark)\n}\n\n// Parse the productions:\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n//                           *********** *\nfunc yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN &&\n\t\t\ttoken.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t}\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//                          *******************\n//                          ((KEY block_node_or_indentless_sequence?)?\n//                            *** *\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//\n//                          BLOCK-END\n//                          *********\n//\nfunc yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_KEY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t} else if token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block mapping\", context_mark,\n\t\t\"did not find expected key\", token.start_mark)\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//\n//                          ((KEY block_node_or_indentless_sequence?)?\n//\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//                           ***** *\n//                          BLOCK-END\n//\n//\nfunc yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t}\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//                          *******************\n//                          (flow_sequence_entry FLOW-ENTRY)*\n//                           *                   **********\n//                          flow_sequence_entry?\n//                          *\n//                          FLOW-SEQUENCE-END\n//                          *****************\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                          *\n//\nfunc yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow sequence\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or ']'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\n\t\t\t*event = yaml_event_t{\n\t\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\t\tstart_mark: token.start_mark,\n\t\t\t\tend_mark:   token.end_mark,\n\t\t\t\timplicit:   true,\n\t\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t\t}\n\t\t\tskip_token(parser)\n\t\t\treturn true\n\t\t} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\n\tskip_token(parser)\n\treturn true\n}\n\n//\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                      *** *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_VALUE_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t}\n\tmark := token.end_mark\n\tskip_token(parser)\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                                      ***** *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                                                      *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping         ::= FLOW-MAPPING-START\n//                          ******************\n//                          (flow_mapping_entry FLOW-ENTRY)*\n//                           *                  **********\n//                          flow_mapping_entry?\n//                          ******************\n//                          FLOW-MAPPING-END\n//                          ****************\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                          *           *** *\n//\nfunc yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow mapping\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or '}'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.typ != yaml_VALUE_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)\n\t\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t\t} else {\n\t\t\t\tparser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE\n\t\t\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t\t\t}\n\t\t} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                   *                  ***** *\n//\nfunc yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif empty {\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Generate an empty scalar event.\nfunc yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SCALAR_EVENT,\n\t\tstart_mark: mark,\n\t\tend_mark:   mark,\n\t\tvalue:      nil, // Empty\n\t\timplicit:   true,\n\t\tstyle:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t}\n\treturn true\n}\n\nvar default_tag_directives = []yaml_tag_directive_t{\n\t{[]byte(\"!\"), []byte(\"!\")},\n\t{[]byte(\"!!\"), []byte(\"tag:yaml.org,2002:\")},\n}\n\n// Parse directives.\nfunc yaml_parser_process_directives(parser *yaml_parser_t,\n\tversion_directive_ref **yaml_version_directive_t,\n\ttag_directives_ref *[]yaml_tag_directive_t) bool {\n\n\tvar version_directive *yaml_version_directive_t\n\tvar tag_directives []yaml_tag_directive_t\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tfor token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN {\n\t\t\tif version_directive != nil {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found duplicate %YAML directive\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.major != 1 || token.minor != 1 {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found incompatible YAML document\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tversion_directive = &yaml_version_directive_t{\n\t\t\t\tmajor: token.major,\n\t\t\t\tminor: token.minor,\n\t\t\t}\n\t\t} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\t\tvalue := yaml_tag_directive_t{\n\t\t\t\thandle: token.value,\n\t\t\t\tprefix: token.prefix,\n\t\t\t}\n\t\t\tif !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttag_directives = append(tag_directives, value)\n\t\t}\n\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tfor i := range default_tag_directives {\n\t\tif !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif version_directive_ref != nil {\n\t\t*version_directive_ref = version_directive\n\t}\n\tif tag_directives_ref != nil {\n\t\t*tag_directives_ref = tag_directives\n\t}\n\treturn true\n}\n\n// Append a tag directive to the directives stack.\nfunc yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {\n\tfor i := range parser.tag_directives {\n\t\tif bytes.Equal(value.handle, parser.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_parser_set_parser_error(parser, \"found duplicate %TAG directive\", mark)\n\t\t}\n\t}\n\n\t// [Go] I suspect the copy is unnecessary. This was likely done\n\t// because there was no way to track ownership of the data.\n\tvalue_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(value_copy.handle, value.handle)\n\tcopy(value_copy.prefix, value.prefix)\n\tparser.tag_directives = append(parser.tag_directives, value_copy)\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/readerc.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n)\n\n// Set the reader error and return 0.\nfunc yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {\n\tparser.error = yaml_READER_ERROR\n\tparser.problem = problem\n\tparser.problem_offset = offset\n\tparser.problem_value = value\n\treturn false\n}\n\n// Byte order marks.\nconst (\n\tbom_UTF8    = \"\\xef\\xbb\\xbf\"\n\tbom_UTF16LE = \"\\xff\\xfe\"\n\tbom_UTF16BE = \"\\xfe\\xff\"\n)\n\n// Determine the input stream encoding by checking the BOM symbol. If no BOM is\n// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.\nfunc yaml_parser_determine_encoding(parser *yaml_parser_t) bool {\n\t// Ensure that we had enough bytes in the raw buffer.\n\tfor !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {\n\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Determine the encoding.\n\tbuf := parser.raw_buffer\n\tpos := parser.raw_buffer_pos\n\tavail := len(buf) - pos\n\tif avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {\n\t\tparser.encoding = yaml_UTF16LE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {\n\t\tparser.encoding = yaml_UTF16BE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t\tparser.raw_buffer_pos += 3\n\t\tparser.offset += 3\n\t} else {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t}\n\treturn true\n}\n\n// Update the raw buffer.\nfunc yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {\n\tsize_read := 0\n\n\t// Return if the raw buffer is full.\n\tif parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {\n\t\treturn true\n\t}\n\n\t// Return on EOF.\n\tif parser.eof {\n\t\treturn true\n\t}\n\n\t// Move the remaining bytes in the raw buffer to the beginning.\n\tif parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {\n\t\tcopy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])\n\t}\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]\n\tparser.raw_buffer_pos = 0\n\n\t// Call the read handler to fill the buffer.\n\tsize_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]\n\tif err == io.EOF {\n\t\tparser.eof = true\n\t} else if err != nil {\n\t\treturn yaml_parser_set_reader_error(parser, \"input error: \"+err.Error(), parser.offset, -1)\n\t}\n\treturn true\n}\n\n// Ensure that the buffer contains at least `length` characters.\n// Return true on success, false on failure.\n//\n// The length is supposed to be significantly less that the buffer size.\nfunc yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {\n\tif parser.read_handler == nil {\n\t\tpanic(\"read handler must be set\")\n\t}\n\n\t// If the EOF flag is set and the raw buffer is empty, do nothing.\n\tif parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\treturn true\n\t}\n\n\t// Return if the buffer contains enough characters.\n\tif parser.unread >= length {\n\t\treturn true\n\t}\n\n\t// Determine the input encoding if it is not known yet.\n\tif parser.encoding == yaml_ANY_ENCODING {\n\t\tif !yaml_parser_determine_encoding(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Move the unread characters to the beginning of the buffer.\n\tbuffer_len := len(parser.buffer)\n\tif parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {\n\t\tcopy(parser.buffer, parser.buffer[parser.buffer_pos:])\n\t\tbuffer_len -= parser.buffer_pos\n\t\tparser.buffer_pos = 0\n\t} else if parser.buffer_pos == buffer_len {\n\t\tbuffer_len = 0\n\t\tparser.buffer_pos = 0\n\t}\n\n\t// Open the whole buffer for writing, and cut it before returning.\n\tparser.buffer = parser.buffer[:cap(parser.buffer)]\n\n\t// Fill the buffer until it has enough characters.\n\tfirst := true\n\tfor parser.unread < length {\n\n\t\t// Fill the raw buffer if necessary.\n\t\tif !first || parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\t\tparser.buffer = parser.buffer[:buffer_len]\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tfirst = false\n\n\t\t// Decode the raw buffer.\n\tinner:\n\t\tfor parser.raw_buffer_pos != len(parser.raw_buffer) {\n\t\t\tvar value rune\n\t\t\tvar width int\n\n\t\t\traw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos\n\n\t\t\t// Decode the next character.\n\t\t\tswitch parser.encoding {\n\t\t\tcase yaml_UTF8_ENCODING:\n\t\t\t\t// Decode a UTF-8 character.  Check RFC 3629\n\t\t\t\t// (http://www.ietf.org/rfc/rfc3629.txt) for more details.\n\t\t\t\t//\n\t\t\t\t// The following table (taken from the RFC) is used for\n\t\t\t\t// decoding.\n\t\t\t\t//\n\t\t\t\t//    Char. number range |        UTF-8 octet sequence\n\t\t\t\t//      (hexadecimal)    |              (binary)\n\t\t\t\t//   --------------------+------------------------------------\n\t\t\t\t//   0000 0000-0000 007F | 0xxxxxxx\n\t\t\t\t//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx\n\t\t\t\t//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//\n\t\t\t\t// Additionally, the characters in the range 0xD800-0xDFFF\n\t\t\t\t// are prohibited as they are reserved for use with UTF-16\n\t\t\t\t// surrogate pairs.\n\n\t\t\t\t// Determine the length of the UTF-8 sequence.\n\t\t\t\toctet := parser.raw_buffer[parser.raw_buffer_pos]\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\twidth = 1\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\twidth = 2\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\twidth = 3\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\twidth = 4\n\t\t\t\tdefault:\n\t\t\t\t\t// The leading octet is invalid.\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid leading UTF-8 octet\",\n\t\t\t\t\t\tparser.offset, int(octet))\n\t\t\t\t}\n\n\t\t\t\t// Check if the raw buffer contains an incomplete character.\n\t\t\t\tif width > raw_unread {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-8 octet sequence\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Decode the leading octet.\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\tvalue = rune(octet & 0x7F)\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\tvalue = rune(octet & 0x1F)\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\tvalue = rune(octet & 0x0F)\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\tvalue = rune(octet & 0x07)\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = 0\n\t\t\t\t}\n\n\t\t\t\t// Check and decode the trailing octets.\n\t\t\t\tfor k := 1; k < width; k++ {\n\t\t\t\t\toctet = parser.raw_buffer[parser.raw_buffer_pos+k]\n\n\t\t\t\t\t// Check if the octet is valid.\n\t\t\t\t\tif (octet & 0xC0) != 0x80 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"invalid trailing UTF-8 octet\",\n\t\t\t\t\t\t\tparser.offset+k, int(octet))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Decode the octet.\n\t\t\t\t\tvalue = (value << 6) + rune(octet&0x3F)\n\t\t\t\t}\n\n\t\t\t\t// Check the length of the sequence against the value.\n\t\t\t\tswitch {\n\t\t\t\tcase width == 1:\n\t\t\t\tcase width == 2 && value >= 0x80:\n\t\t\t\tcase width == 3 && value >= 0x800:\n\t\t\t\tcase width == 4 && value >= 0x10000:\n\t\t\t\tdefault:\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid length of a UTF-8 sequence\",\n\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t}\n\n\t\t\t\t// Check the range of the value.\n\t\t\t\tif value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid Unicode character\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\tcase yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:\n\t\t\t\tvar low, high int\n\t\t\t\tif parser.encoding == yaml_UTF16LE_ENCODING {\n\t\t\t\t\tlow, high = 0, 1\n\t\t\t\t} else {\n\t\t\t\t\tlow, high = 1, 0\n\t\t\t\t}\n\n\t\t\t\t// The UTF-16 encoding is not as simple as one might\n\t\t\t\t// naively think.  Check RFC 2781\n\t\t\t\t// (http://www.ietf.org/rfc/rfc2781.txt).\n\t\t\t\t//\n\t\t\t\t// Normally, two subsequent bytes describe a Unicode\n\t\t\t\t// character.  However a special technique (called a\n\t\t\t\t// surrogate pair) is used for specifying character\n\t\t\t\t// values larger than 0xFFFF.\n\t\t\t\t//\n\t\t\t\t// A surrogate pair consists of two pseudo-characters:\n\t\t\t\t//      high surrogate area (0xD800-0xDBFF)\n\t\t\t\t//      low surrogate area (0xDC00-0xDFFF)\n\t\t\t\t//\n\t\t\t\t// The following formulas are used for decoding\n\t\t\t\t// and encoding characters using surrogate pairs:\n\t\t\t\t//\n\t\t\t\t//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)\n\t\t\t\t//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)\n\t\t\t\t//  W1 = 110110yyyyyyyyyy\n\t\t\t\t//  W2 = 110111xxxxxxxxxx\n\t\t\t\t//\n\t\t\t\t// where U is the character value, W1 is the high surrogate\n\t\t\t\t// area, W2 is the low surrogate area.\n\n\t\t\t\t// Check for incomplete UTF-16 character.\n\t\t\t\tif raw_unread < 2 {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-16 character\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Get the character.\n\t\t\t\tvalue = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +\n\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)\n\n\t\t\t\t// Check for unexpected low surrogate area.\n\t\t\t\tif value&0xFC00 == 0xDC00 {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"unexpected low surrogate area\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\t\t// Check for a high surrogate area.\n\t\t\t\tif value&0xFC00 == 0xD800 {\n\t\t\t\t\twidth = 4\n\n\t\t\t\t\t// Check for incomplete surrogate pair.\n\t\t\t\t\tif raw_unread < 4 {\n\t\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\t\"incomplete UTF-16 surrogate pair\",\n\t\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak inner\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get the next character.\n\t\t\t\t\tvalue2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +\n\t\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)\n\n\t\t\t\t\t// Check for a low surrogate area.\n\t\t\t\t\tif value2&0xFC00 != 0xDC00 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"expected low surrogate area\",\n\t\t\t\t\t\t\tparser.offset+2, int(value2))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Generate the value of the surrogate pair.\n\t\t\t\t\tvalue = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)\n\t\t\t\t} else {\n\t\t\t\t\twidth = 2\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tpanic(\"impossible\")\n\t\t\t}\n\n\t\t\t// Check if the character is in the allowed range:\n\t\t\t//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)\n\t\t\t//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)\n\t\t\t//      | [#x10000-#x10FFFF]                        (32 bit)\n\t\t\tswitch {\n\t\t\tcase value == 0x09:\n\t\t\tcase value == 0x0A:\n\t\t\tcase value == 0x0D:\n\t\t\tcase value >= 0x20 && value <= 0x7E:\n\t\t\tcase value == 0x85:\n\t\t\tcase value >= 0xA0 && value <= 0xD7FF:\n\t\t\tcase value >= 0xE000 && value <= 0xFFFD:\n\t\t\tcase value >= 0x10000 && value <= 0x10FFFF:\n\t\t\tdefault:\n\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\"control characters are not allowed\",\n\t\t\t\t\tparser.offset, int(value))\n\t\t\t}\n\n\t\t\t// Move the raw pointers.\n\t\t\tparser.raw_buffer_pos += width\n\t\t\tparser.offset += width\n\n\t\t\t// Finally put the character into the buffer.\n\t\t\tif value <= 0x7F {\n\t\t\t\t// 0000 0000-0000 007F . 0xxxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(value)\n\t\t\t\tbuffer_len += 1\n\t\t\t} else if value <= 0x7FF {\n\t\t\t\t// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 2\n\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 3\n\t\t\t} else {\n\t\t\t\t// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 4\n\t\t\t}\n\n\t\t\tparser.unread++\n\t\t}\n\n\t\t// On EOF, put NUL into the buffer and return.\n\t\tif parser.eof {\n\t\t\tparser.buffer[buffer_len] = 0\n\t\t\tbuffer_len++\n\t\t\tparser.unread++\n\t\t\tbreak\n\t\t}\n\t}\n\tparser.buffer = parser.buffer[:buffer_len]\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/resolve.go",
    "content": "package yaml\n\nimport (\n\t\"encoding/base64\"\n\t\"math\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype resolveMapItem struct {\n\tvalue interface{}\n\ttag   string\n}\n\nvar resolveTable = make([]byte, 256)\nvar resolveMap = make(map[string]resolveMapItem)\n\nfunc init() {\n\tt := resolveTable\n\tt[int('+')] = 'S' // Sign\n\tt[int('-')] = 'S'\n\tfor _, c := range \"0123456789\" {\n\t\tt[int(c)] = 'D' // Digit\n\t}\n\tfor _, c := range \"yYnNtTfFoO~\" {\n\t\tt[int(c)] = 'M' // In map\n\t}\n\tt[int('.')] = '.' // Float (potentially in map)\n\n\tvar resolveMapList = []struct {\n\t\tv   interface{}\n\t\ttag string\n\t\tl   []string\n\t}{\n\t\t{true, yaml_BOOL_TAG, []string{\"y\", \"Y\", \"yes\", \"Yes\", \"YES\"}},\n\t\t{true, yaml_BOOL_TAG, []string{\"true\", \"True\", \"TRUE\"}},\n\t\t{true, yaml_BOOL_TAG, []string{\"on\", \"On\", \"ON\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"n\", \"N\", \"no\", \"No\", \"NO\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"false\", \"False\", \"FALSE\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"off\", \"Off\", \"OFF\"}},\n\t\t{nil, yaml_NULL_TAG, []string{\"\", \"~\", \"null\", \"Null\", \"NULL\"}},\n\t\t{math.NaN(), yaml_FLOAT_TAG, []string{\".nan\", \".NaN\", \".NAN\"}},\n\t\t{math.Inf(+1), yaml_FLOAT_TAG, []string{\".inf\", \".Inf\", \".INF\"}},\n\t\t{math.Inf(+1), yaml_FLOAT_TAG, []string{\"+.inf\", \"+.Inf\", \"+.INF\"}},\n\t\t{math.Inf(-1), yaml_FLOAT_TAG, []string{\"-.inf\", \"-.Inf\", \"-.INF\"}},\n\t\t{\"<<\", yaml_MERGE_TAG, []string{\"<<\"}},\n\t}\n\n\tm := resolveMap\n\tfor _, item := range resolveMapList {\n\t\tfor _, s := range item.l {\n\t\t\tm[s] = resolveMapItem{item.v, item.tag}\n\t\t}\n\t}\n}\n\nconst longTagPrefix = \"tag:yaml.org,2002:\"\n\nfunc shortTag(tag string) string {\n\t// TODO This can easily be made faster and produce less garbage.\n\tif strings.HasPrefix(tag, longTagPrefix) {\n\t\treturn \"!!\" + tag[len(longTagPrefix):]\n\t}\n\treturn tag\n}\n\nfunc longTag(tag string) string {\n\tif strings.HasPrefix(tag, \"!!\") {\n\t\treturn longTagPrefix + tag[2:]\n\t}\n\treturn tag\n}\n\nfunc resolvableTag(tag string) bool {\n\tswitch tag {\n\tcase \"\", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG:\n\t\treturn true\n\t}\n\treturn false\n}\n\nvar yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\\.?[0-9]+([eE][-+][0-9]+)?$`)\n\nfunc resolve(tag string, in string) (rtag string, out interface{}) {\n\tif !resolvableTag(tag) {\n\t\treturn tag, in\n\t}\n\n\tdefer func() {\n\t\tswitch tag {\n\t\tcase \"\", rtag, yaml_STR_TAG, yaml_BINARY_TAG:\n\t\t\treturn\n\t\t}\n\t\tfailf(\"cannot decode %s `%s` as a %s\", shortTag(rtag), in, shortTag(tag))\n\t}()\n\n\t// Any data is accepted as a !!str or !!binary.\n\t// Otherwise, the prefix is enough of a hint about what it might be.\n\thint := byte('N')\n\tif in != \"\" {\n\t\thint = resolveTable[in[0]]\n\t}\n\tif hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG {\n\t\t// Handle things we can lookup in a map.\n\t\tif item, ok := resolveMap[in]; ok {\n\t\t\treturn item.tag, item.value\n\t\t}\n\n\t\t// Base 60 floats are a bad idea, were dropped in YAML 1.2, and\n\t\t// are purposefully unsupported here. They're still quoted on\n\t\t// the way out for compatibility with other parser, though.\n\n\t\tswitch hint {\n\t\tcase 'M':\n\t\t\t// We've already checked the map above.\n\n\t\tcase '.':\n\t\t\t// Not in the map, so maybe a normal float.\n\t\t\tfloatv, err := strconv.ParseFloat(in, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn yaml_FLOAT_TAG, floatv\n\t\t\t}\n\n\t\tcase 'D', 'S':\n\t\t\t// Int, float, or timestamp.\n\t\t\tplain := strings.Replace(in, \"_\", \"\", -1)\n\t\t\tintv, err := strconv.ParseInt(plain, 0, 64)\n\t\t\tif err == nil {\n\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\treturn yaml_INT_TAG, int(intv)\n\t\t\t\t} else {\n\t\t\t\t\treturn yaml_INT_TAG, intv\n\t\t\t\t}\n\t\t\t}\n\t\t\tuintv, err := strconv.ParseUint(plain, 0, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn yaml_INT_TAG, uintv\n\t\t\t}\n\t\t\tif yamlStyleFloat.MatchString(plain) {\n\t\t\t\tfloatv, err := strconv.ParseFloat(plain, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn yaml_FLOAT_TAG, floatv\n\t\t\t\t}\n\t\t\t}\n\t\t\tif strings.HasPrefix(plain, \"0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[2:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\t\treturn yaml_INT_TAG, int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn yaml_INT_TAG, intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tuintv, err := strconv.ParseUint(plain[2:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn yaml_INT_TAG, uintv\n\t\t\t\t}\n\t\t\t} else if strings.HasPrefix(plain, \"-0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[3:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\t\treturn yaml_INT_TAG, -int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn yaml_INT_TAG, -intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// XXX Handle timestamps here.\n\n\t\tdefault:\n\t\t\tpanic(\"resolveTable item not yet handled: \" + string(rune(hint)) + \" (with \" + in + \")\")\n\t\t}\n\t}\n\tif tag == yaml_BINARY_TAG {\n\t\treturn yaml_BINARY_TAG, in\n\t}\n\tif utf8.ValidString(in) {\n\t\treturn yaml_STR_TAG, in\n\t}\n\treturn yaml_BINARY_TAG, encodeBase64(in)\n}\n\n// encodeBase64 encodes s as base64 that is broken up into multiple lines\n// as appropriate for the resulting length.\nfunc encodeBase64(s string) string {\n\tconst lineLen = 70\n\tencLen := base64.StdEncoding.EncodedLen(len(s))\n\tlines := encLen/lineLen + 1\n\tbuf := make([]byte, encLen*2+lines)\n\tin := buf[0:encLen]\n\tout := buf[encLen:]\n\tbase64.StdEncoding.Encode(in, []byte(s))\n\tk := 0\n\tfor i := 0; i < len(in); i += lineLen {\n\t\tj := i + lineLen\n\t\tif j > len(in) {\n\t\t\tj = len(in)\n\t\t}\n\t\tk += copy(out[k:], in[i:j])\n\t\tif lines > 1 {\n\t\t\tout[k] = '\\n'\n\t\t\tk++\n\t\t}\n\t}\n\treturn string(out[:k])\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/scannerc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Introduction\n// ************\n//\n// The following notes assume that you are familiar with the YAML specification\n// (http://yaml.org/spec/1.2/spec.html).  We mostly follow it, although in\n// some cases we are less restrictive that it requires.\n//\n// The process of transforming a YAML stream into a sequence of events is\n// divided on two steps: Scanning and Parsing.\n//\n// The Scanner transforms the input stream into a sequence of tokens, while the\n// parser transform the sequence of tokens produced by the Scanner into a\n// sequence of parsing events.\n//\n// The Scanner is rather clever and complicated. The Parser, on the contrary,\n// is a straightforward implementation of a recursive-descendant parser (or,\n// LL(1) parser, as it is usually called).\n//\n// Actually there are two issues of Scanning that might be called \"clever\", the\n// rest is quite straightforward.  The issues are \"block collection start\" and\n// \"simple keys\".  Both issues are explained below in details.\n//\n// Here the Scanning step is explained and implemented.  We start with the list\n// of all the tokens produced by the Scanner together with short descriptions.\n//\n// Now, tokens:\n//\n//      STREAM-START(encoding)          # The stream start.\n//      STREAM-END                      # The stream end.\n//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.\n//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.\n//      DOCUMENT-START                  # '---'\n//      DOCUMENT-END                    # '...'\n//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block\n//      BLOCK-MAPPING-START             # sequence or a block mapping.\n//      BLOCK-END                       # Indentation decrease.\n//      FLOW-SEQUENCE-START             # '['\n//      FLOW-SEQUENCE-END               # ']'\n//      BLOCK-SEQUENCE-START            # '{'\n//      BLOCK-SEQUENCE-END              # '}'\n//      BLOCK-ENTRY                     # '-'\n//      FLOW-ENTRY                      # ','\n//      KEY                             # '?' or nothing (simple keys).\n//      VALUE                           # ':'\n//      ALIAS(anchor)                   # '*anchor'\n//      ANCHOR(anchor)                  # '&anchor'\n//      TAG(handle,suffix)              # '!handle!suffix'\n//      SCALAR(value,style)             # A scalar.\n//\n// The following two tokens are \"virtual\" tokens denoting the beginning and the\n// end of the stream:\n//\n//      STREAM-START(encoding)\n//      STREAM-END\n//\n// We pass the information about the input stream encoding with the\n// STREAM-START token.\n//\n// The next two tokens are responsible for tags:\n//\n//      VERSION-DIRECTIVE(major,minor)\n//      TAG-DIRECTIVE(handle,prefix)\n//\n// Example:\n//\n//      %YAML   1.1\n//      %TAG    !   !foo\n//      %TAG    !yaml!  tag:yaml.org,2002:\n//      ---\n//\n// The correspoding sequence of tokens:\n//\n//      STREAM-START(utf-8)\n//      VERSION-DIRECTIVE(1,1)\n//      TAG-DIRECTIVE(\"!\",\"!foo\")\n//      TAG-DIRECTIVE(\"!yaml\",\"tag:yaml.org,2002:\")\n//      DOCUMENT-START\n//      STREAM-END\n//\n// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole\n// line.\n//\n// The document start and end indicators are represented by:\n//\n//      DOCUMENT-START\n//      DOCUMENT-END\n//\n// Note that if a YAML stream contains an implicit document (without '---'\n// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be\n// produced.\n//\n// In the following examples, we present whole documents together with the\n// produced tokens.\n//\n//      1. An implicit document:\n//\n//          'a scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          STREAM-END\n//\n//      2. An explicit document:\n//\n//          ---\n//          'a scalar'\n//          ...\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-END\n//          STREAM-END\n//\n//      3. Several documents in a stream:\n//\n//          'a scalar'\n//          ---\n//          'another scalar'\n//          ---\n//          'yet another scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"another scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"yet another scalar\",single-quoted)\n//          STREAM-END\n//\n// We have already introduced the SCALAR token above.  The following tokens are\n// used to describe aliases, anchors, tag, and scalars:\n//\n//      ALIAS(anchor)\n//      ANCHOR(anchor)\n//      TAG(handle,suffix)\n//      SCALAR(value,style)\n//\n// The following series of examples illustrate the usage of these tokens:\n//\n//      1. A recursive sequence:\n//\n//          &A [ *A ]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          ANCHOR(\"A\")\n//          FLOW-SEQUENCE-START\n//          ALIAS(\"A\")\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A tagged scalar:\n//\n//          !!float \"3.14\"  # A good approximation.\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          TAG(\"!!\",\"float\")\n//          SCALAR(\"3.14\",double-quoted)\n//          STREAM-END\n//\n//      3. Various scalar styles:\n//\n//          --- # Implicit empty plain scalars do not produce tokens.\n//          --- a plain scalar\n//          --- 'a single-quoted scalar'\n//          --- \"a double-quoted scalar\"\n//          --- |-\n//            a literal scalar\n//          --- >-\n//            a folded\n//            scalar\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          DOCUMENT-START\n//          SCALAR(\"a plain scalar\",plain)\n//          DOCUMENT-START\n//          SCALAR(\"a single-quoted scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a double-quoted scalar\",double-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a literal scalar\",literal)\n//          DOCUMENT-START\n//          SCALAR(\"a folded scalar\",folded)\n//          STREAM-END\n//\n// Now it's time to review collection-related tokens. We will start with\n// flow collections:\n//\n//      FLOW-SEQUENCE-START\n//      FLOW-SEQUENCE-END\n//      FLOW-MAPPING-START\n//      FLOW-MAPPING-END\n//      FLOW-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and\n// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'\n// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the\n// indicators '?' and ':', which are used for denoting mapping keys and values,\n// are represented by the KEY and VALUE tokens.\n//\n// The following examples show flow collections:\n//\n//      1. A flow sequence:\n//\n//          [item 1, item 2, item 3]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-SEQUENCE-START\n//          SCALAR(\"item 1\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 3\",plain)\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A flow mapping:\n//\n//          {\n//              a simple key: a value,  # Note that the KEY token is produced.\n//              ? a complex key: another value,\n//          }\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          FLOW-ENTRY\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          FLOW-ENTRY\n//          FLOW-MAPPING-END\n//          STREAM-END\n//\n// A simple key is a key which is not denoted by the '?' indicator.  Note that\n// the Scanner still produce the KEY token whenever it encounters a simple key.\n//\n// For scanning block collections, the following tokens are used (note that we\n// repeat KEY and VALUE here):\n//\n//      BLOCK-SEQUENCE-START\n//      BLOCK-MAPPING-START\n//      BLOCK-END\n//      BLOCK-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation\n// increase that precedes a block collection (cf. the INDENT token in Python).\n// The token BLOCK-END denote indentation decrease that ends a block collection\n// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities\n// that makes detections of these tokens more complex.\n//\n// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators\n// '-', '?', and ':' correspondingly.\n//\n// The following examples show how the tokens BLOCK-SEQUENCE-START,\n// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:\n//\n//      1. Block sequences:\n//\n//          - item 1\n//          - item 2\n//          -\n//            - item 3.1\n//            - item 3.2\n//          -\n//            key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Block mappings:\n//\n//          a simple key: a value   # The KEY token is produced here.\n//          ? a complex key\n//          : another value\n//          a mapping:\n//            key 1: value 1\n//            key 2: value 2\n//          a sequence:\n//            - item 1\n//            - item 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML does not always require to start a new block collection from a new\n// line.  If the current line contains only '-', '?', and ':' indicators, a new\n// block collection may start at the current line.  The following examples\n// illustrate this case:\n//\n//      1. Collections in a sequence:\n//\n//          - - item 1\n//            - item 2\n//          - key 1: value 1\n//            key 2: value 2\n//          - ? complex key\n//            : complex value\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"complex key\")\n//          VALUE\n//          SCALAR(\"complex value\")\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Collections in a mapping:\n//\n//          ? a sequence\n//          : - item 1\n//            - item 2\n//          ? a mapping\n//          : key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          VALUE\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML also permits non-indented sequences if they are included into a block\n// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:\n//\n//      key:\n//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.\n//      - item 2\n//\n// Tokens:\n//\n//      STREAM-START(utf-8)\n//      BLOCK-MAPPING-START\n//      KEY\n//      SCALAR(\"key\",plain)\n//      VALUE\n//      BLOCK-ENTRY\n//      SCALAR(\"item 1\",plain)\n//      BLOCK-ENTRY\n//      SCALAR(\"item 2\",plain)\n//      BLOCK-END\n//\n\n// Ensure that the buffer contains the required number of characters.\n// Return true on success, false on failure (reader error or memory error).\nfunc cache(parser *yaml_parser_t, length int) bool {\n\t// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)\n\treturn parser.unread >= length || yaml_parser_update_buffer(parser, length)\n}\n\n// Advance the buffer pointer.\nfunc skip(parser *yaml_parser_t) {\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n}\n\nfunc skip_line(parser *yaml_parser_t) {\n\tif is_crlf(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index += 2\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread -= 2\n\t\tparser.buffer_pos += 2\n\t} else if is_break(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index++\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread--\n\t\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n\t}\n}\n\n// Copy a character to a string buffer and advance pointers.\nfunc read(parser *yaml_parser_t, s []byte) []byte {\n\tw := width(parser.buffer[parser.buffer_pos])\n\tif w == 0 {\n\t\tpanic(\"invalid character sequence\")\n\t}\n\tif len(s) == 0 {\n\t\ts = make([]byte, 0, 32)\n\t}\n\tif w == 1 && len(s)+w <= cap(s) {\n\t\ts = s[:len(s)+1]\n\t\ts[len(s)-1] = parser.buffer[parser.buffer_pos]\n\t\tparser.buffer_pos++\n\t} else {\n\t\ts = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)\n\t\tparser.buffer_pos += w\n\t}\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\treturn s\n}\n\n// Copy a line break character to a string buffer and advance pointers.\nfunc read_line(parser *yaml_parser_t, s []byte) []byte {\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\tswitch {\n\tcase buf[pos] == '\\r' && buf[pos+1] == '\\n':\n\t\t// CR LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\t\tparser.mark.index++\n\t\tparser.unread--\n\tcase buf[pos] == '\\r' || buf[pos] == '\\n':\n\t\t// CR|LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 1\n\tcase buf[pos] == '\\xC2' && buf[pos+1] == '\\x85':\n\t\t// NEL . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\tcase buf[pos] == '\\xE2' && buf[pos+1] == '\\x80' && (buf[pos+2] == '\\xA8' || buf[pos+2] == '\\xA9'):\n\t\t// LS|PS . LS|PS\n\t\ts = append(s, buf[parser.buffer_pos:pos+3]...)\n\t\tparser.buffer_pos += 3\n\tdefault:\n\t\treturn s\n\t}\n\tparser.mark.index++\n\tparser.mark.column = 0\n\tparser.mark.line++\n\tparser.unread--\n\treturn s\n}\n\n// Get the next token.\nfunc yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Erase the token object.\n\t*token = yaml_token_t{} // [Go] Is this necessary?\n\n\t// No tokens after STREAM-END or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR {\n\t\treturn true\n\t}\n\n\t// Ensure that the tokens queue contains enough tokens.\n\tif !parser.token_available {\n\t\tif !yaml_parser_fetch_more_tokens(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Fetch the next token from the queue.\n\t*token = parser.tokens[parser.tokens_head]\n\tparser.tokens_head++\n\tparser.tokens_parsed++\n\tparser.token_available = false\n\n\tif token.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.stream_end_produced = true\n\t}\n\treturn true\n}\n\n// Set the scanner error and return false.\nfunc yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {\n\tparser.error = yaml_SCANNER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = parser.mark\n\treturn false\n}\n\nfunc yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {\n\tcontext := \"while parsing a tag\"\n\tif directive {\n\t\tcontext = \"while parsing a %TAG directive\"\n\t}\n\treturn yaml_parser_set_scanner_error(parser, context, context_mark, \"did not find URI escaped octet\")\n}\n\nfunc trace(args ...interface{}) func() {\n\tpargs := append([]interface{}{\"+++\"}, args...)\n\tfmt.Println(pargs...)\n\tpargs = append([]interface{}{\"---\"}, args...)\n\treturn func() { fmt.Println(pargs...) }\n}\n\n// Ensure that the tokens queue contains at least one token which can be\n// returned to the Parser.\nfunc yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {\n\t// While we need more tokens to fetch, do it.\n\tfor {\n\t\t// Check if we really need to fetch more tokens.\n\t\tneed_more_tokens := false\n\n\t\tif parser.tokens_head == len(parser.tokens) {\n\t\t\t// Queue is empty.\n\t\t\tneed_more_tokens = true\n\t\t} else {\n\t\t\t// Check if any potential simple key may occupy the head position.\n\t\t\tif !yaml_parser_stale_simple_keys(parser) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tfor i := range parser.simple_keys {\n\t\t\t\tsimple_key := &parser.simple_keys[i]\n\t\t\t\tif simple_key.possible && simple_key.token_number == parser.tokens_parsed {\n\t\t\t\t\tneed_more_tokens = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We are finished.\n\t\tif !need_more_tokens {\n\t\t\tbreak\n\t\t}\n\t\t// Fetch the next token.\n\t\tif !yaml_parser_fetch_next_token(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tparser.token_available = true\n\treturn true\n}\n\n// The dispatcher for token fetchers.\nfunc yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {\n\t// Ensure that the buffer is initialized.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check if we just started scanning.  Fetch STREAM-START then.\n\tif !parser.stream_start_produced {\n\t\treturn yaml_parser_fetch_stream_start(parser)\n\t}\n\n\t// Eat whitespaces and comments until we reach the next token.\n\tif !yaml_parser_scan_to_next_token(parser) {\n\t\treturn false\n\t}\n\n\t// Remove obsolete potential simple keys.\n\tif !yaml_parser_stale_simple_keys(parser) {\n\t\treturn false\n\t}\n\n\t// Check the indentation level against the current column.\n\tif !yaml_parser_unroll_indent(parser, parser.mark.column) {\n\t\treturn false\n\t}\n\n\t// Ensure that the buffer contains at least 4 characters.  4 is the length\n\t// of the longest indicators ('--- ' and '... ').\n\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\treturn false\n\t}\n\n\t// Is it the end of the stream?\n\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\treturn yaml_parser_fetch_stream_end(parser)\n\t}\n\n\t// Is it a directive?\n\tif parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {\n\t\treturn yaml_parser_fetch_directive(parser)\n\t}\n\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\n\t// Is it the document start indicator?\n\tif parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)\n\t}\n\n\t// Is it the document end indicator?\n\tif parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)\n\t}\n\n\t// Is it the flow sequence start indicator?\n\tif buf[pos] == '[' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)\n\t}\n\n\t// Is it the flow mapping start indicator?\n\tif parser.buffer[parser.buffer_pos] == '{' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)\n\t}\n\n\t// Is it the flow sequence end indicator?\n\tif parser.buffer[parser.buffer_pos] == ']' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_SEQUENCE_END_TOKEN)\n\t}\n\n\t// Is it the flow mapping end indicator?\n\tif parser.buffer[parser.buffer_pos] == '}' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_MAPPING_END_TOKEN)\n\t}\n\n\t// Is it the flow entry indicator?\n\tif parser.buffer[parser.buffer_pos] == ',' {\n\t\treturn yaml_parser_fetch_flow_entry(parser)\n\t}\n\n\t// Is it the block entry indicator?\n\tif parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {\n\t\treturn yaml_parser_fetch_block_entry(parser)\n\t}\n\n\t// Is it the key indicator?\n\tif parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_key(parser)\n\t}\n\n\t// Is it the value indicator?\n\tif parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_value(parser)\n\t}\n\n\t// Is it an alias?\n\tif parser.buffer[parser.buffer_pos] == '*' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)\n\t}\n\n\t// Is it an anchor?\n\tif parser.buffer[parser.buffer_pos] == '&' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)\n\t}\n\n\t// Is it a tag?\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\treturn yaml_parser_fetch_tag(parser)\n\t}\n\n\t// Is it a literal scalar?\n\tif parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, true)\n\t}\n\n\t// Is it a folded scalar?\n\tif parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, false)\n\t}\n\n\t// Is it a single-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, true)\n\t}\n\n\t// Is it a double-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, false)\n\t}\n\n\t// Is it a plain scalar?\n\t//\n\t// A plain scalar may start with any non-blank characters except\n\t//\n\t//      '-', '?', ':', ',', '[', ']', '{', '}',\n\t//      '#', '&', '*', '!', '|', '>', '\\'', '\\\"',\n\t//      '%', '@', '`'.\n\t//\n\t// In the block context (and, for the '-' indicator, in the flow context\n\t// too), it may also start with the characters\n\t//\n\t//      '-', '?', ':'\n\t//\n\t// if it is followed by a non-space character.\n\t//\n\t// The last rule is more restrictive than the specification requires.\n\t// [Go] Make this logic more reasonable.\n\t//switch parser.buffer[parser.buffer_pos] {\n\t//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '\"', '\\'', '@', '%', '-', '`':\n\t//}\n\tif !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||\n\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\tparser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||\n\t\tparser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '\"' || parser.buffer[parser.buffer_pos] == '%' ||\n\t\tparser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||\n\t\t(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||\n\t\t(parser.flow_level == 0 &&\n\t\t\t(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&\n\t\t\t!is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_plain_scalar(parser)\n\t}\n\n\t// If we don't determine the token type so far, it is an error.\n\treturn yaml_parser_set_scanner_error(parser,\n\t\t\"while scanning for the next token\", parser.mark,\n\t\t\"found character that cannot start any token\")\n}\n\n// Check the list of potential simple keys and remove the positions that\n// cannot contain simple keys anymore.\nfunc yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool {\n\t// Check for a potential simple key for each flow level.\n\tfor i := range parser.simple_keys {\n\t\tsimple_key := &parser.simple_keys[i]\n\n\t\t// The specification requires that a simple key\n\t\t//\n\t\t//  - is limited to a single line,\n\t\t//  - is shorter than 1024 characters.\n\t\tif simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) {\n\n\t\t\t// Check if the potential simple key to be removed is required.\n\t\t\tif simple_key.required {\n\t\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\t\"while scanning a simple key\", simple_key.mark,\n\t\t\t\t\t\"could not find expected ':'\")\n\t\t\t}\n\t\t\tsimple_key.possible = false\n\t\t}\n\t}\n\treturn true\n}\n\n// Check if a simple key may start at the current position and add it if\n// needed.\nfunc yaml_parser_save_simple_key(parser *yaml_parser_t) bool {\n\t// A simple key is required at the current position if the scanner is in\n\t// the block context and the current column coincides with the indentation\n\t// level.\n\n\trequired := parser.flow_level == 0 && parser.indent == parser.mark.column\n\n\t// A simple key is required only when it is the first token in the current\n\t// line.  Therefore it is always allowed.  But we add a check anyway.\n\tif required && !parser.simple_key_allowed {\n\t\tpanic(\"should not happen\")\n\t}\n\n\t//\n\t// If the current position may start a simple key, save it.\n\t//\n\tif parser.simple_key_allowed {\n\t\tsimple_key := yaml_simple_key_t{\n\t\t\tpossible:     true,\n\t\t\trequired:     required,\n\t\t\ttoken_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),\n\t\t}\n\t\tsimple_key.mark = parser.mark\n\n\t\tif !yaml_parser_remove_simple_key(parser) {\n\t\t\treturn false\n\t\t}\n\t\tparser.simple_keys[len(parser.simple_keys)-1] = simple_key\n\t}\n\treturn true\n}\n\n// Remove a potential simple key at the current flow level.\nfunc yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {\n\ti := len(parser.simple_keys) - 1\n\tif parser.simple_keys[i].possible {\n\t\t// If the key is required, it is an error.\n\t\tif parser.simple_keys[i].required {\n\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\"while scanning a simple key\", parser.simple_keys[i].mark,\n\t\t\t\t\"could not find expected ':'\")\n\t\t}\n\t}\n\t// Remove the key from the stack.\n\tparser.simple_keys[i].possible = false\n\treturn true\n}\n\n// Increase the flow level and resize the simple key list if needed.\nfunc yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {\n\t// Reset the simple key on the next level.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})\n\n\t// Increase the flow level.\n\tparser.flow_level++\n\treturn true\n}\n\n// Decrease the flow level.\nfunc yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {\n\tif parser.flow_level > 0 {\n\t\tparser.flow_level--\n\t\tparser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1]\n\t}\n\treturn true\n}\n\n// Push the current indentation level to the stack and set the new level\n// the current column is greater than the indentation level.  In this case,\n// append or insert the specified token into the token queue.\nfunc yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\tif parser.indent < column {\n\t\t// Push the current indentation level to the stack and set the new\n\t\t// indentation level.\n\t\tparser.indents = append(parser.indents, parser.indent)\n\t\tparser.indent = column\n\n\t\t// Create a token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        typ,\n\t\t\tstart_mark: mark,\n\t\t\tend_mark:   mark,\n\t\t}\n\t\tif number > -1 {\n\t\t\tnumber -= parser.tokens_parsed\n\t\t}\n\t\tyaml_insert_token(parser, number, &token)\n\t}\n\treturn true\n}\n\n// Pop indentation levels from the indents stack until the current level\n// becomes less or equal to the column.  For each indentation level, append\n// the BLOCK-END token.\nfunc yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\t// Loop through the indentation levels in the stack.\n\tfor parser.indent > column {\n\t\t// Create a token and append it to the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_BLOCK_END_TOKEN,\n\t\t\tstart_mark: parser.mark,\n\t\t\tend_mark:   parser.mark,\n\t\t}\n\t\tyaml_insert_token(parser, -1, &token)\n\n\t\t// Pop the indentation level.\n\t\tparser.indent = parser.indents[len(parser.indents)-1]\n\t\tparser.indents = parser.indents[:len(parser.indents)-1]\n\t}\n\treturn true\n}\n\n// Initialize the scanner and produce the STREAM-START token.\nfunc yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {\n\n\t// Set the initial indentation.\n\tparser.indent = -1\n\n\t// Initialize the simple key stack.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})\n\n\t// A simple key is allowed at the beginning of the stream.\n\tparser.simple_key_allowed = true\n\n\t// We have started.\n\tparser.stream_start_produced = true\n\n\t// Create the STREAM-START token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_START_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t\tencoding:   parser.encoding,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the STREAM-END token and shut down the scanner.\nfunc yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {\n\n\t// Force new line.\n\tif parser.mark.column != 0 {\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t}\n\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the STREAM-END token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_END_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.\nfunc yaml_parser_fetch_directive(parser *yaml_parser_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.\n\ttoken := yaml_token_t{}\n\tif !yaml_parser_scan_directive(parser, &token) {\n\t\treturn false\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the DOCUMENT-START or DOCUMENT-END token.\nfunc yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\n\tskip(parser)\n\tskip(parser)\n\tskip(parser)\n\n\tend_mark := parser.mark\n\n\t// Create the DOCUMENT-START or DOCUMENT-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.\nfunc yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// The indicators '[' and '{' may start a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Increase the flow level.\n\tif !yaml_parser_increase_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow the indicators '[' and '{'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.\nfunc yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset any potential simple key on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Decrease the flow level.\n\tif !yaml_parser_decrease_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// No simple keys after the indicators ']' and '}'.\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-ENTRY token.\nfunc yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after ','.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_FLOW_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the BLOCK-ENTRY token.\nfunc yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {\n\t// Check if the scanner is in the block context.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new entry.\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"block sequence entries are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-SEQUENCE-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\t// It is an error for the '-' indicator to occur in the flow context,\n\t\t// but we let the Parser detect and report about it because the Parser\n\t\t// is able to point to the context.\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '-'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the BLOCK-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_BLOCK_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the KEY token.\nfunc yaml_parser_fetch_key(parser *yaml_parser_t) bool {\n\n\t// In the block context, additional checks are required.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new key (not nessesary simple).\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"mapping keys are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '?' in the block context.\n\tparser.simple_key_allowed = parser.flow_level == 0\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the KEY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_KEY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the VALUE token.\nfunc yaml_parser_fetch_value(parser *yaml_parser_t) bool {\n\n\tsimple_key := &parser.simple_keys[len(parser.simple_keys)-1]\n\n\t// Have we found a simple key?\n\tif simple_key.possible {\n\t\t// Create the KEY token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_KEY_TOKEN,\n\t\t\tstart_mark: simple_key.mark,\n\t\t\tend_mark:   simple_key.mark,\n\t\t}\n\t\tyaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)\n\n\t\t// In the block context, we may need to add the BLOCK-MAPPING-START token.\n\t\tif !yaml_parser_roll_indent(parser, simple_key.mark.column,\n\t\t\tsimple_key.token_number,\n\t\t\tyaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Remove the simple key.\n\t\tsimple_key.possible = false\n\n\t\t// A simple key cannot follow another simple key.\n\t\tparser.simple_key_allowed = false\n\n\t} else {\n\t\t// The ':' indicator follows a complex key.\n\n\t\t// In the block context, extra checks are required.\n\t\tif parser.flow_level == 0 {\n\n\t\t\t// Check if we are allowed to start a complex value.\n\t\t\tif !parser.simple_key_allowed {\n\t\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\t\"mapping values are not allowed in this context\")\n\t\t\t}\n\n\t\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Simple keys after ':' are allowed in the block context.\n\t\tparser.simple_key_allowed = parser.flow_level == 0\n\t}\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the VALUE token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_VALUE_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the ALIAS or ANCHOR token.\nfunc yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// An anchor or an alias could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow an anchor or an alias.\n\tparser.simple_key_allowed = false\n\n\t// Create the ALIAS or ANCHOR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_anchor(parser, &token, typ) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the TAG token.\nfunc yaml_parser_fetch_tag(parser *yaml_parser_t) bool {\n\t// A tag could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a tag.\n\tparser.simple_key_allowed = false\n\n\t// Create the TAG token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_tag(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.\nfunc yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {\n\t// Remove any potential simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow a block scalar.\n\tparser.simple_key_allowed = true\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_block_scalar(parser, &token, literal) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.\nfunc yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_flow_scalar(parser, &token, single) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,plain) token.\nfunc yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_plain_scalar(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Eat whitespaces and comments until the next token is found.\nfunc yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {\n\n\t// Until the next token is not found.\n\tfor {\n\t\t// Allow the BOM mark to start a line.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t}\n\n\t\t// Eat whitespaces.\n\t\t// Tabs are allowed:\n\t\t//  - in the flow context\n\t\t//  - in the block context, but not at the beginning of the line or\n\t\t//  after '-', '?', or ':' (complex value).\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\\t') {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Eat a comment until a line break.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\t\tskip(parser)\n\t\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If it is a line break, eat it.\n\t\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tskip_line(parser)\n\n\t\t\t// In the block context, a new line may start a simple key.\n\t\t\tif parser.flow_level == 0 {\n\t\t\t\tparser.simple_key_allowed = true\n\t\t\t}\n\t\t} else {\n\t\t\tbreak // We have found a token.\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.\n//\n// Scope:\n//      %YAML    1.1    # a comment \\n\n//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//\nfunc yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Eat '%'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the directive name.\n\tvar name []byte\n\tif !yaml_parser_scan_directive_name(parser, start_mark, &name) {\n\t\treturn false\n\t}\n\n\t// Is it a YAML directive?\n\tif bytes.Equal(name, []byte(\"YAML\")) {\n\t\t// Scan the VERSION directive value.\n\t\tvar major, minor int8\n\t\tif !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a VERSION-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_VERSION_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tmajor:      major,\n\t\t\tminor:      minor,\n\t\t}\n\n\t\t// Is it a TAG directive?\n\t} else if bytes.Equal(name, []byte(\"TAG\")) {\n\t\t// Scan the TAG directive value.\n\t\tvar handle, prefix []byte\n\t\tif !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a TAG-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_TAG_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tvalue:      handle,\n\t\t\tprefix:     prefix,\n\t\t}\n\n\t\t// Unknown directive.\n\t} else {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found unknown directive name\")\n\t\treturn false\n\t}\n\n\t// Eat the rest of the line including any comments.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\treturn true\n}\n\n// Scan the directive name.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//       ^^^^\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//       ^^^\n//\nfunc yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {\n\t// Consume the directive name.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tvar s []byte\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the name is empty.\n\tif len(s) == 0 {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"could not find expected directive name\")\n\t\treturn false\n\t}\n\n\t// Check for an blank character after the name.\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found unexpected non-alphabetical character\")\n\t\treturn false\n\t}\n\t*name = s\n\treturn true\n}\n\n// Scan the value of VERSION-DIRECTIVE.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//           ^^^^^^\nfunc yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Consume the major version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, major) {\n\t\treturn false\n\t}\n\n\t// Eat '.'.\n\tif parser.buffer[parser.buffer_pos] != '.' {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected digit or '.' character\")\n\t}\n\n\tskip(parser)\n\n\t// Consume the minor version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {\n\t\treturn false\n\t}\n\treturn true\n}\n\nconst max_number_length = 2\n\n// Scan the version number of VERSION-DIRECTIVE.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//              ^\n//      %YAML   1.1     # a comment \\n\n//                ^\nfunc yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {\n\n\t// Repeat while the next character is digit.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar value, length int8\n\tfor is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Check if the number is too long.\n\t\tlength++\n\t\tif length > max_number_length {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\t\tstart_mark, \"found extremely long version number\")\n\t\t}\n\t\tvalue = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the number was present.\n\tif length == 0 {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected version number\")\n\t}\n\t*number = value\n\treturn true\n}\n\n// Scan the value of a TAG-DIRECTIVE token.\n//\n// Scope:\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//\nfunc yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {\n\tvar handle_value, prefix_value []byte\n\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a handle.\n\tif !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blank(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace\")\n\t\treturn false\n\t}\n\n\t// Eat whitespaces.\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a prefix.\n\tif !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace or line break.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\t*handle = handle_value\n\t*prefix = prefix_value\n\treturn true\n}\n\nfunc yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {\n\tvar s []byte\n\n\t// Eat the indicator character.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the value.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tend_mark := parser.mark\n\n\t/*\n\t * Check if length of the anchor is greater than 0 and it is followed by\n\t * a whitespace character or one of the indicators:\n\t *\n\t *      '?', ':', ',', ']', '}', '%', '@', '`'.\n\t */\n\n\tif len(s) == 0 ||\n\t\t!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '`') {\n\t\tcontext := \"while scanning an alias\"\n\t\tif typ == yaml_ANCHOR_TOKEN {\n\t\t\tcontext = \"while scanning an anchor\"\n\t\t}\n\t\tyaml_parser_set_scanner_error(parser, context, start_mark,\n\t\t\t\"did not find expected alphabetic or numeric character\")\n\t\treturn false\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t}\n\n\treturn true\n}\n\n/*\n * Scan a TAG token.\n */\n\nfunc yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {\n\tvar handle, suffix []byte\n\n\tstart_mark := parser.mark\n\n\t// Check if the tag is in the canonical form.\n\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\treturn false\n\t}\n\n\tif parser.buffer[parser.buffer_pos+1] == '<' {\n\t\t// Keep the handle as ''\n\n\t\t// Eat '!<'\n\t\tskip(parser)\n\t\tskip(parser)\n\n\t\t// Consume the tag value.\n\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for '>' and eat it.\n\t\tif parser.buffer[parser.buffer_pos] != '>' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\t\tstart_mark, \"did not find the expected '>'\")\n\t\t\treturn false\n\t\t}\n\n\t\tskip(parser)\n\t} else {\n\t\t// The tag has either the '!suffix' or the '!handle!suffix' form.\n\n\t\t// First, try to scan a handle.\n\t\tif !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check if it is, indeed, handle.\n\t\tif handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {\n\t\t\t// Scan the suffix now.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\t// It wasn't a handle after all.  Scan the rest of the tag.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Set the handle to '!'.\n\t\t\thandle = []byte{'!'}\n\n\t\t\t// A special case: the '!' tag.  Set the handle to '' and the\n\t\t\t// suffix to '!'.\n\t\t\tif len(suffix) == 0 {\n\t\t\t\thandle, suffix = suffix, handle\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check the character which ends the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_TAG_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      handle,\n\t\tsuffix:     suffix,\n\t}\n\treturn true\n}\n\n// Scan a tag handle.\nfunc yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {\n\t// Check the initial '!' character.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif parser.buffer[parser.buffer_pos] != '!' {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected '!'\")\n\t\treturn false\n\t}\n\n\tvar s []byte\n\n\t// Copy the '!' character.\n\ts = read(parser, s)\n\n\t// Copy all subsequent alphabetical and numerical characters.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the trailing character is '!' and copy it.\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\ts = read(parser, s)\n\t} else {\n\t\t// It's either the '!' tag or not really a tag handle.  If it's a %TAG\n\t\t// directive, it's an error.  If it's a tag token, it must be a part of URI.\n\t\tif directive && !(s[0] == '!' && s[1] == 0) {\n\t\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find expected '!'\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\t*handle = s\n\treturn true\n}\n\n// Scan a tag.\nfunc yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {\n\t//size_t length = head ? strlen((char *)head) : 0\n\tvar s []byte\n\n\t// Copy the head if needed.\n\t//\n\t// Note that we don't copy the leading '!' character.\n\tif len(head) > 1 {\n\t\ts = append(s, head[1:]...)\n\t}\n\n\t// Scan the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// The set of characters that may appear in URI is as follows:\n\t//\n\t//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',\n\t//      '=', '+', '$', ',', '.', '!', '~', '*', '\\'', '(', ')', '[', ']',\n\t//      '%'.\n\t// [Go] Convert this into more reasonable logic.\n\tfor is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||\n\t\tparser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||\n\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||\n\t\tparser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||\n\t\tparser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||\n\t\tparser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||\n\t\tparser.buffer[parser.buffer_pos] == '%' {\n\t\t// Check if it is a URI-escape sequence.\n\t\tif parser.buffer[parser.buffer_pos] == '%' {\n\t\t\tif !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\ts = read(parser, s)\n\t\t}\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the tag is non-empty.\n\tif len(s) == 0 {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected tag URI\")\n\t\treturn false\n\t}\n\t*uri = s\n\treturn true\n}\n\n// Decode an URI-escape sequence corresponding to a single UTF-8 character.\nfunc yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {\n\n\t// Decode the required number of characters.\n\tw := 1024\n\tfor w > 0 {\n\t\t// Check for a URI-escaped octet.\n\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\treturn false\n\t\t}\n\n\t\tif !(parser.buffer[parser.buffer_pos] == '%' &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+1) &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+2)) {\n\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find URI escaped octet\")\n\t\t}\n\n\t\t// Get the octet.\n\t\toctet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))\n\n\t\t// If it is the leading octet, determine the length of the UTF-8 sequence.\n\t\tif w == 1024 {\n\t\t\tw = width(octet)\n\t\t\tif w == 0 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect leading UTF-8 octet\")\n\t\t\t}\n\t\t} else {\n\t\t\t// Check if the trailing octet is correct.\n\t\t\tif octet&0xC0 != 0x80 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect trailing UTF-8 octet\")\n\t\t\t}\n\t\t}\n\n\t\t// Copy the octet and move the pointers.\n\t\t*s = append(*s, octet)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tw--\n\t}\n\treturn true\n}\n\n// Scan a block scalar.\nfunc yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {\n\t// Eat the indicator '|' or '>'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the additional block scalar indicators.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check for a chomping indicator.\n\tvar chomping, increment int\n\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t// Set the chomping method and eat the indicator.\n\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\tchomping = +1\n\t\t} else {\n\t\t\tchomping = -1\n\t\t}\n\t\tskip(parser)\n\n\t\t// Check for an indentation indicator.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif is_digit(parser.buffer, parser.buffer_pos) {\n\t\t\t// Check that the indentation is greater than 0.\n\t\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\t\tstart_mark, \"found an indentation indicator equal to 0\")\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Get the indentation level and eat the indicator.\n\t\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\t\tskip(parser)\n\t\t}\n\n\t} else if is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Do the same as above, but in the opposite order.\n\n\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found an indentation indicator equal to 0\")\n\t\t\treturn false\n\t\t}\n\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\tskip(parser)\n\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\t\tchomping = +1\n\t\t\t} else {\n\t\t\t\tchomping = -1\n\t\t\t}\n\t\t\tskip(parser)\n\t\t}\n\t}\n\n\t// Eat whitespaces and comments to the end of the line.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\tend_mark := parser.mark\n\n\t// Set the indentation level if it was specified.\n\tvar indent int\n\tif increment > 0 {\n\t\tif parser.indent >= 0 {\n\t\t\tindent = parser.indent + increment\n\t\t} else {\n\t\t\tindent = increment\n\t\t}\n\t}\n\n\t// Scan the leading line breaks and determine the indentation level if needed.\n\tvar s, leading_break, trailing_breaks []byte\n\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\treturn false\n\t}\n\n\t// Scan the block scalar content.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar leading_blank, trailing_blank bool\n\tfor parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {\n\t\t// We are at the beginning of a non-empty line.\n\n\t\t// Is it a trailing whitespace?\n\t\ttrailing_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Check if we need to fold the leading line break.\n\t\tif !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t// Do we need to join the lines by space?\n\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\ts = append(s, ' ')\n\t\t\t}\n\t\t} else {\n\t\t\ts = append(s, leading_break...)\n\t\t}\n\t\tleading_break = leading_break[:0]\n\n\t\t// Append the remaining line breaks.\n\t\ts = append(s, trailing_breaks...)\n\t\ttrailing_breaks = trailing_breaks[:0]\n\n\t\t// Is it a leading whitespace?\n\t\tleading_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Consume the current line.\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\ts = read(parser, s)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\n\t\tleading_break = read_line(parser, leading_break)\n\n\t\t// Eat the following indentation spaces and line breaks.\n\t\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Chomp the tail.\n\tif chomping != -1 {\n\t\ts = append(s, leading_break...)\n\t}\n\tif chomping == 1 {\n\t\ts = append(s, trailing_breaks...)\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_LITERAL_SCALAR_STYLE,\n\t}\n\tif !literal {\n\t\ttoken.style = yaml_FOLDED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan indentation spaces and line breaks for a block scalar.  Determine the\n// indentation level if needed.\nfunc yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {\n\t*end_mark = parser.mark\n\n\t// Eat the indentation spaces and line breaks.\n\tmax_indent := 0\n\tfor {\n\t\t// Eat the indentation spaces.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tfor (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif parser.mark.column > max_indent {\n\t\t\tmax_indent = parser.mark.column\n\t\t}\n\n\t\t// Check for a tab character messing the indentation.\n\t\tif (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found a tab character where an indentation space is expected\")\n\t\t}\n\n\t\t// Have we found a non-empty line?\n\t\tif !is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\t// [Go] Should really be returning breaks instead.\n\t\t*breaks = read_line(parser, *breaks)\n\t\t*end_mark = parser.mark\n\t}\n\n\t// Determine the indentation level if needed.\n\tif *indent == 0 {\n\t\t*indent = max_indent\n\t\tif *indent < parser.indent+1 {\n\t\t\t*indent = parser.indent + 1\n\t\t}\n\t\tif *indent < 1 {\n\t\t\t*indent = 1\n\t\t}\n\t}\n\treturn true\n}\n\n// Scan a quoted scalar.\nfunc yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {\n\t// Eat the left quote.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the content of the quoted scalar.\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tfor {\n\t\t// Check that there are no document indicators at the beginning of the line.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected document indicator\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for EOF.\n\t\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected end of stream\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tleading_blanks := false\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\t\tif single && parser.buffer[parser.buffer_pos] == '\\'' && parser.buffer[parser.buffer_pos+1] == '\\'' {\n\t\t\t\t// Is is an escaped single quote.\n\t\t\t\ts = append(s, '\\'')\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t} else if single && parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\t// It is a right single quote.\n\t\t\t\tbreak\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\t// It is a right double quote.\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' && is_break(parser.buffer, parser.buffer_pos+1) {\n\t\t\t\t// It is an escaped line break.\n\t\t\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tskip(parser)\n\t\t\t\tskip_line(parser)\n\t\t\t\tleading_blanks = true\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' {\n\t\t\t\t// It is an escape sequence.\n\t\t\t\tcode_length := 0\n\n\t\t\t\t// Check the escape character.\n\t\t\t\tswitch parser.buffer[parser.buffer_pos+1] {\n\t\t\t\tcase '0':\n\t\t\t\t\ts = append(s, 0)\n\t\t\t\tcase 'a':\n\t\t\t\t\ts = append(s, '\\x07')\n\t\t\t\tcase 'b':\n\t\t\t\t\ts = append(s, '\\x08')\n\t\t\t\tcase 't', '\\t':\n\t\t\t\t\ts = append(s, '\\x09')\n\t\t\t\tcase 'n':\n\t\t\t\t\ts = append(s, '\\x0A')\n\t\t\t\tcase 'v':\n\t\t\t\t\ts = append(s, '\\x0B')\n\t\t\t\tcase 'f':\n\t\t\t\t\ts = append(s, '\\x0C')\n\t\t\t\tcase 'r':\n\t\t\t\t\ts = append(s, '\\x0D')\n\t\t\t\tcase 'e':\n\t\t\t\t\ts = append(s, '\\x1B')\n\t\t\t\tcase ' ':\n\t\t\t\t\ts = append(s, '\\x20')\n\t\t\t\tcase '\"':\n\t\t\t\t\ts = append(s, '\"')\n\t\t\t\tcase '\\'':\n\t\t\t\t\ts = append(s, '\\'')\n\t\t\t\tcase '\\\\':\n\t\t\t\t\ts = append(s, '\\\\')\n\t\t\t\tcase 'N': // NEL (#x85)\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\x85')\n\t\t\t\tcase '_': // #xA0\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\xA0')\n\t\t\t\tcase 'L': // LS (#x2028)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA8')\n\t\t\t\tcase 'P': // PS (#x2029)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA9')\n\t\t\t\tcase 'x':\n\t\t\t\t\tcode_length = 2\n\t\t\t\tcase 'u':\n\t\t\t\t\tcode_length = 4\n\t\t\t\tcase 'U':\n\t\t\t\t\tcode_length = 8\n\t\t\t\tdefault:\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\tstart_mark, \"found unknown escape character\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t\t// Consume an arbitrary escape code.\n\t\t\t\tif code_length > 0 {\n\t\t\t\t\tvar value int\n\n\t\t\t\t\t// Scan the character value.\n\t\t\t\t\tif parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tif !is_hex(parser.buffer, parser.buffer_pos+k) {\n\t\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\t\tstart_mark, \"did not find expected hexdecimal number\")\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check the value and write the character.\n\t\t\t\t\tif (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {\n\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\tstart_mark, \"found invalid Unicode character escape code\")\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif value <= 0x7F {\n\t\t\t\t\t\ts = append(s, byte(value))\n\t\t\t\t\t} else if value <= 0x7FF {\n\t\t\t\t\t\ts = append(s, byte(0xC0+(value>>6)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t\t\ts = append(s, byte(0xE0+(value>>12)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, byte(0xF0+(value>>18)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>12)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Advance the pointer.\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tskip(parser)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It is a non-escaped non-blank character.\n\t\t\t\ts = read(parser, s)\n\t\t\t}\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check if we are at the end of the scalar.\n\t\tif single {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Join the whitespaces or fold line breaks.\n\t\tif leading_blanks {\n\t\t\t// Do we need to fold line breaks?\n\t\t\tif len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ts = append(s, leading_break...)\n\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t}\n\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\tleading_break = leading_break[:0]\n\t\t} else {\n\t\t\ts = append(s, whitespaces...)\n\t\t\twhitespaces = whitespaces[:0]\n\t\t}\n\t}\n\n\t// Eat the right quote.\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_SINGLE_QUOTED_SCALAR_STYLE,\n\t}\n\tif !single {\n\t\ttoken.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan a plain scalar.\nfunc yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {\n\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tvar leading_blanks bool\n\tvar indent = parser.indent + 1\n\n\tstart_mark := parser.mark\n\tend_mark := parser.mark\n\n\t// Consume the content of the plain scalar.\n\tfor {\n\t\t// Check for a document indicator.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Check for a comment.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\n\t\t\t// Check for 'x:x' in the flow context. TODO: Fix the test \"spec-08-13\".\n\t\t\tif parser.flow_level > 0 &&\n\t\t\t\tparser.buffer[parser.buffer_pos] == ':' &&\n\t\t\t\t!is_blankz(parser.buffer, parser.buffer_pos+1) {\n\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n\t\t\t\t\tstart_mark, \"found unexpected ':'\")\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Check for indicators that may end a plain scalar.\n\t\t\tif (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||\n\t\t\t\t(parser.flow_level > 0 &&\n\t\t\t\t\t(parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '}')) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we need to join whitespaces and breaks.\n\t\t\tif leading_blanks || len(whitespaces) > 0 {\n\t\t\t\tif leading_blanks {\n\t\t\t\t\t// Do we need to fold line breaks?\n\t\t\t\t\tif leading_break[0] == '\\n' {\n\t\t\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, leading_break...)\n\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t}\n\t\t\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\t\t\tleading_break = leading_break[:0]\n\t\t\t\t\tleading_blanks = false\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, whitespaces...)\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the character.\n\t\t\ts = read(parser, s)\n\n\t\t\tend_mark = parser.mark\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Is it the end?\n\t\tif !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\n\t\t\t\t// Check for tab character that abuse indentation.\n\t\t\t\tif leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n\t\t\t\t\t\tstart_mark, \"found a tab character that violate indentation\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check indentation level.\n\t\tif parser.flow_level == 0 && parser.mark.column < indent {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_PLAIN_SCALAR_STYLE,\n\t}\n\n\t// Note that we change the 'simple_key_allowed' flag.\n\tif leading_blanks {\n\t\tparser.simple_key_allowed = true\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/sorter.go",
    "content": "package yaml\n\nimport (\n\t\"reflect\"\n\t\"unicode\"\n)\n\ntype keyList []reflect.Value\n\nfunc (l keyList) Len() int      { return len(l) }\nfunc (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }\nfunc (l keyList) Less(i, j int) bool {\n\ta := l[i]\n\tb := l[j]\n\tak := a.Kind()\n\tbk := b.Kind()\n\tfor (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {\n\t\ta = a.Elem()\n\t\tak = a.Kind()\n\t}\n\tfor (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {\n\t\tb = b.Elem()\n\t\tbk = b.Kind()\n\t}\n\taf, aok := keyFloat(a)\n\tbf, bok := keyFloat(b)\n\tif aok && bok {\n\t\tif af != bf {\n\t\t\treturn af < bf\n\t\t}\n\t\tif ak != bk {\n\t\t\treturn ak < bk\n\t\t}\n\t\treturn numLess(a, b)\n\t}\n\tif ak != reflect.String || bk != reflect.String {\n\t\treturn ak < bk\n\t}\n\tar, br := []rune(a.String()), []rune(b.String())\n\tfor i := 0; i < len(ar) && i < len(br); i++ {\n\t\tif ar[i] == br[i] {\n\t\t\tcontinue\n\t\t}\n\t\tal := unicode.IsLetter(ar[i])\n\t\tbl := unicode.IsLetter(br[i])\n\t\tif al && bl {\n\t\t\treturn ar[i] < br[i]\n\t\t}\n\t\tif al || bl {\n\t\t\treturn bl\n\t\t}\n\t\tvar ai, bi int\n\t\tvar an, bn int64\n\t\tfor ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {\n\t\t\tan = an*10 + int64(ar[ai]-'0')\n\t\t}\n\t\tfor bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {\n\t\t\tbn = bn*10 + int64(br[bi]-'0')\n\t\t}\n\t\tif an != bn {\n\t\t\treturn an < bn\n\t\t}\n\t\tif ai != bi {\n\t\t\treturn ai < bi\n\t\t}\n\t\treturn ar[i] < br[i]\n\t}\n\treturn len(ar) < len(br)\n}\n\n// keyFloat returns a float value for v if it is a number/bool\n// and whether it is a number/bool or not.\nfunc keyFloat(v reflect.Value) (f float64, ok bool) {\n\tswitch v.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn float64(v.Int()), true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float(), true\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn float64(v.Uint()), true\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn 1, true\n\t\t}\n\t\treturn 0, true\n\t}\n\treturn 0, false\n}\n\n// numLess returns whether a < b.\n// a and b must necessarily have the same kind.\nfunc numLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\t}\n\tpanic(\"not a number\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/writerc.go",
    "content": "package yaml\n\n// Set the writer error and return false.\nfunc yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_WRITER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Flush the output buffer.\nfunc yaml_emitter_flush(emitter *yaml_emitter_t) bool {\n\tif emitter.write_handler == nil {\n\t\tpanic(\"write handler not set\")\n\t}\n\n\t// Check if the buffer is empty.\n\tif emitter.buffer_pos == 0 {\n\t\treturn true\n\t}\n\n\t// If the output encoding is UTF-8, we don't need to recode the buffer.\n\tif emitter.encoding == yaml_UTF8_ENCODING {\n\t\tif err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {\n\t\t\treturn yaml_emitter_set_writer_error(emitter, \"write error: \"+err.Error())\n\t\t}\n\t\temitter.buffer_pos = 0\n\t\treturn true\n\t}\n\n\t// Recode the buffer into the raw buffer.\n\tvar low, high int\n\tif emitter.encoding == yaml_UTF16LE_ENCODING {\n\t\tlow, high = 0, 1\n\t} else {\n\t\thigh, low = 1, 0\n\t}\n\n\tpos := 0\n\tfor pos < emitter.buffer_pos {\n\t\t// See the \"reader.c\" code for more details on UTF-8 encoding.  Note\n\t\t// that we assume that the buffer contains a valid UTF-8 sequence.\n\n\t\t// Read the next UTF-8 character.\n\t\toctet := emitter.buffer[pos]\n\n\t\tvar w int\n\t\tvar value rune\n\t\tswitch {\n\t\tcase octet&0x80 == 0x00:\n\t\t\tw, value = 1, rune(octet&0x7F)\n\t\tcase octet&0xE0 == 0xC0:\n\t\t\tw, value = 2, rune(octet&0x1F)\n\t\tcase octet&0xF0 == 0xE0:\n\t\t\tw, value = 3, rune(octet&0x0F)\n\t\tcase octet&0xF8 == 0xF0:\n\t\t\tw, value = 4, rune(octet&0x07)\n\t\t}\n\t\tfor k := 1; k < w; k++ {\n\t\t\toctet = emitter.buffer[pos+k]\n\t\t\tvalue = (value << 6) + (rune(octet) & 0x3F)\n\t\t}\n\t\tpos += w\n\n\t\t// Write the character.\n\t\tif value < 0x10000 {\n\t\t\tvar b [2]byte\n\t\t\tb[high] = byte(value >> 8)\n\t\t\tb[low] = byte(value & 0xFF)\n\t\t\temitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])\n\t\t} else {\n\t\t\t// Write the character using a surrogate pair (check \"reader.c\").\n\t\t\tvar b [4]byte\n\t\t\tvalue -= 0x10000\n\t\t\tb[high] = byte(0xD8 + (value >> 18))\n\t\t\tb[low] = byte((value >> 10) & 0xFF)\n\t\t\tb[high+2] = byte(0xDC + ((value >> 8) & 0xFF))\n\t\t\tb[low+2] = byte(value & 0xFF)\n\t\t\temitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])\n\t\t}\n\t}\n\n\t// Write the raw buffer.\n\tif err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {\n\t\treturn yaml_emitter_set_writer_error(emitter, \"write error: \"+err.Error())\n\t}\n\temitter.buffer_pos = 0\n\temitter.raw_buffer = emitter.raw_buffer[:0]\n\treturn true\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/yaml.go",
    "content": "// Package yaml implements YAML support for the Go language.\n//\n// Source code and other details for the project are available at GitHub:\n//\n//   https://github.com/go-yaml/yaml\n//\npackage yaml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// MapSlice encodes and decodes as a YAML map.\n// The order of keys is preserved when encoding and decoding.\ntype MapSlice []MapItem\n\n// MapItem is an item in a MapSlice.\ntype MapItem struct {\n\tKey, Value interface{}\n}\n\n// The Unmarshaler interface may be implemented by types to customize their\n// behavior when being unmarshaled from a YAML document. The UnmarshalYAML\n// method receives a function that may be called to unmarshal the original\n// YAML value into a field or variable. It is safe to call the unmarshal\n// function parameter more than once if necessary.\ntype Unmarshaler interface {\n\tUnmarshalYAML(unmarshal func(interface{}) error) error\n}\n\n// The Marshaler interface may be implemented by types to customize their\n// behavior when being marshaled into a YAML document. The returned value\n// is marshaled in place of the original value implementing Marshaler.\n//\n// If an error is returned by MarshalYAML, the marshaling procedure stops\n// and returns with the provided error.\ntype Marshaler interface {\n\tMarshalYAML() (interface{}, error)\n}\n\n// Unmarshal decodes the first document found within the in byte slice\n// and assigns decoded values into the out value.\n//\n// Maps and pointers (to a struct, string, int, etc) are accepted as out\n// values. If an internal pointer within a struct is not initialized,\n// the yaml package will initialize it if necessary for unmarshalling\n// the provided data. The out parameter must not be nil.\n//\n// The type of the decoded values should be compatible with the respective\n// values in out. If one or more values cannot be decoded due to a type\n// mismatches, decoding continues partially until the end of the YAML\n// content, and a *yaml.TypeError is returned with details for all\n// missed values.\n//\n// Struct fields are only unmarshalled if they are exported (have an\n// upper case first letter), and are unmarshalled using the field name\n// lowercased as the default key. Custom keys may be defined via the\n// \"yaml\" name in the field tag: the content preceding the first comma\n// is used as the key, and the following comma-separated options are\n// used to tweak the marshalling process (see Marshal).\n// Conflicting names result in a runtime error.\n//\n// For example:\n//\n//     type T struct {\n//         F int `yaml:\"a,omitempty\"`\n//         B int\n//     }\n//     var t T\n//     yaml.Unmarshal([]byte(\"a: 1\\nb: 2\"), &t)\n//\n// See the documentation of Marshal for the format of tags and a list of\n// supported tag options.\n//\nfunc Unmarshal(in []byte, out interface{}) (err error) {\n\tdefer handleErr(&err)\n\td := newDecoder()\n\tp := newParser(in)\n\tdefer p.destroy()\n\tnode := p.parse()\n\tif node != nil {\n\t\tv := reflect.ValueOf(out)\n\t\tif v.Kind() == reflect.Ptr && !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t\td.unmarshal(node, v)\n\t}\n\tif len(d.terrors) > 0 {\n\t\treturn &TypeError{d.terrors}\n\t}\n\treturn nil\n}\n\n// Marshal serializes the value provided into a YAML document. The structure\n// of the generated document will reflect the structure of the value itself.\n// Maps and pointers (to struct, string, int, etc) are accepted as the in value.\n//\n// Struct fields are only unmarshalled if they are exported (have an upper case\n// first letter), and are unmarshalled using the field name lowercased as the\n// default key. Custom keys may be defined via the \"yaml\" name in the field\n// tag: the content preceding the first comma is used as the key, and the\n// following comma-separated options are used to tweak the marshalling process.\n// Conflicting names result in a runtime error.\n//\n// The field tag format accepted is:\n//\n//     `(...) yaml:\"[<key>][,<flag1>[,<flag2>]]\" (...)`\n//\n// The following flags are currently supported:\n//\n//     omitempty    Only include the field if it's not set to the zero\n//                  value for the type or to empty slices or maps.\n//                  Does not apply to zero valued structs.\n//\n//     flow         Marshal using a flow style (useful for structs,\n//                  sequences and maps).\n//\n//     inline       Inline the field, which must be a struct or a map,\n//                  causing all of its fields or keys to be processed as if\n//                  they were part of the outer struct. For maps, keys must\n//                  not conflict with the yaml keys of other struct fields.\n//\n// In addition, if the key is \"-\", the field is ignored.\n//\n// For example:\n//\n//     type T struct {\n//         F int \"a,omitempty\"\n//         B int\n//     }\n//     yaml.Marshal(&T{B: 2}) // Returns \"b: 2\\n\"\n//     yaml.Marshal(&T{F: 1}} // Returns \"a: 1\\nb: 0\\n\"\n//\nfunc Marshal(in interface{}) (out []byte, err error) {\n\tdefer handleErr(&err)\n\te := newEncoder()\n\tdefer e.destroy()\n\te.marshal(\"\", reflect.ValueOf(in))\n\te.finish()\n\tout = e.out\n\treturn\n}\n\nfunc handleErr(err *error) {\n\tif v := recover(); v != nil {\n\t\tif e, ok := v.(yamlError); ok {\n\t\t\t*err = e.err\n\t\t} else {\n\t\t\tpanic(v)\n\t\t}\n\t}\n}\n\ntype yamlError struct {\n\terr error\n}\n\nfunc fail(err error) {\n\tpanic(yamlError{err})\n}\n\nfunc failf(format string, args ...interface{}) {\n\tpanic(yamlError{fmt.Errorf(\"yaml: \"+format, args...)})\n}\n\n// A TypeError is returned by Unmarshal when one or more fields in\n// the YAML document cannot be properly decoded into the requested\n// types. When this error is returned, the value is still\n// unmarshaled partially.\ntype TypeError struct {\n\tErrors []string\n}\n\nfunc (e *TypeError) Error() string {\n\treturn fmt.Sprintf(\"yaml: unmarshal errors:\\n  %s\", strings.Join(e.Errors, \"\\n  \"))\n}\n\n// --------------------------------------------------------------------------\n// Maintain a mapping of keys to structure field indexes\n\n// The code in this section was copied from mgo/bson.\n\n// structInfo holds details for the serialization of fields of\n// a given struct.\ntype structInfo struct {\n\tFieldsMap  map[string]fieldInfo\n\tFieldsList []fieldInfo\n\n\t// InlineMap is the number of the field in the struct that\n\t// contains an ,inline map, or -1 if there's none.\n\tInlineMap int\n}\n\ntype fieldInfo struct {\n\tKey       string\n\tNum       int\n\tOmitEmpty bool\n\tFlow      bool\n\n\t// Inline holds the field index if the field is part of an inlined struct.\n\tInline []int\n}\n\nvar structMap = make(map[reflect.Type]*structInfo)\nvar fieldMapMutex sync.RWMutex\n\nfunc getStructInfo(st reflect.Type) (*structInfo, error) {\n\tfieldMapMutex.RLock()\n\tsinfo, found := structMap[st]\n\tfieldMapMutex.RUnlock()\n\tif found {\n\t\treturn sinfo, nil\n\t}\n\n\tn := st.NumField()\n\tfieldsMap := make(map[string]fieldInfo)\n\tfieldsList := make([]fieldInfo, 0, n)\n\tinlineMap := -1\n\tfor i := 0; i != n; i++ {\n\t\tfield := st.Field(i)\n\t\tif field.PkgPath != \"\" && !field.Anonymous {\n\t\t\tcontinue // Private field\n\t\t}\n\n\t\tinfo := fieldInfo{Num: i}\n\n\t\ttag := field.Tag.Get(\"yaml\")\n\t\tif tag == \"\" && strings.Index(string(field.Tag), \":\") < 0 {\n\t\t\ttag = string(field.Tag)\n\t\t}\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tinline := false\n\t\tfields := strings.Split(tag, \",\")\n\t\tif len(fields) > 1 {\n\t\t\tfor _, flag := range fields[1:] {\n\t\t\t\tswitch flag {\n\t\t\t\tcase \"omitempty\":\n\t\t\t\t\tinfo.OmitEmpty = true\n\t\t\t\tcase \"flow\":\n\t\t\t\t\tinfo.Flow = true\n\t\t\t\tcase \"inline\":\n\t\t\t\t\tinline = true\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, errors.New(fmt.Sprintf(\"Unsupported flag %q in tag %q of type %s\", flag, tag, st))\n\t\t\t\t}\n\t\t\t}\n\t\t\ttag = fields[0]\n\t\t}\n\n\t\tif inline {\n\t\t\tswitch field.Type.Kind() {\n\t\t\tcase reflect.Map:\n\t\t\t\tif inlineMap >= 0 {\n\t\t\t\t\treturn nil, errors.New(\"Multiple ,inline maps in struct \" + st.String())\n\t\t\t\t}\n\t\t\t\tif field.Type.Key() != reflect.TypeOf(\"\") {\n\t\t\t\t\treturn nil, errors.New(\"Option ,inline needs a map with string keys in struct \" + st.String())\n\t\t\t\t}\n\t\t\t\tinlineMap = info.Num\n\t\t\tcase reflect.Struct:\n\t\t\t\tsinfo, err := getStructInfo(field.Type)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tfor _, finfo := range sinfo.FieldsList {\n\t\t\t\t\tif _, found := fieldsMap[finfo.Key]; found {\n\t\t\t\t\t\tmsg := \"Duplicated key '\" + finfo.Key + \"' in struct \" + st.String()\n\t\t\t\t\t\treturn nil, errors.New(msg)\n\t\t\t\t\t}\n\t\t\t\t\tif finfo.Inline == nil {\n\t\t\t\t\t\tfinfo.Inline = []int{i, finfo.Num}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfinfo.Inline = append([]int{i}, finfo.Inline...)\n\t\t\t\t\t}\n\t\t\t\t\tfieldsMap[finfo.Key] = finfo\n\t\t\t\t\tfieldsList = append(fieldsList, finfo)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t//return nil, errors.New(\"Option ,inline needs a struct value or map field\")\n\t\t\t\treturn nil, errors.New(\"Option ,inline needs a struct value field\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif tag != \"\" {\n\t\t\tinfo.Key = tag\n\t\t} else {\n\t\t\tinfo.Key = strings.ToLower(field.Name)\n\t\t}\n\n\t\tif _, found = fieldsMap[info.Key]; found {\n\t\t\tmsg := \"Duplicated key '\" + info.Key + \"' in struct \" + st.String()\n\t\t\treturn nil, errors.New(msg)\n\t\t}\n\n\t\tfieldsList = append(fieldsList, info)\n\t\tfieldsMap[info.Key] = info\n\t}\n\n\tsinfo = &structInfo{fieldsMap, fieldsList, inlineMap}\n\n\tfieldMapMutex.Lock()\n\tstructMap[st] = sinfo\n\tfieldMapMutex.Unlock()\n\treturn sinfo, nil\n}\n\nfunc isZero(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.String:\n\t\treturn len(v.String()) == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\tcase reflect.Slice:\n\t\treturn v.Len() == 0\n\tcase reflect.Map:\n\t\treturn v.Len() == 0\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Struct:\n\t\tvt := v.Type()\n\t\tfor i := v.NumField() - 1; i >= 0; i-- {\n\t\t\tif vt.Field(i).PkgPath != \"\" {\n\t\t\t\tcontinue // Private field\n\t\t\t}\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": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/yamlh.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n)\n\n// The version directive data.\ntype yaml_version_directive_t struct {\n\tmajor int8 // The major version number.\n\tminor int8 // The minor version number.\n}\n\n// The tag directive data.\ntype yaml_tag_directive_t struct {\n\thandle []byte // The tag handle.\n\tprefix []byte // The tag prefix.\n}\n\ntype yaml_encoding_t int\n\n// The stream encoding.\nconst (\n\t// Let the parser choose the encoding.\n\tyaml_ANY_ENCODING yaml_encoding_t = iota\n\n\tyaml_UTF8_ENCODING    // The default UTF-8 encoding.\n\tyaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.\n\tyaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.\n)\n\ntype yaml_break_t int\n\n// Line break types.\nconst (\n\t// Let the parser choose the break type.\n\tyaml_ANY_BREAK yaml_break_t = iota\n\n\tyaml_CR_BREAK   // Use CR for line breaks (Mac style).\n\tyaml_LN_BREAK   // Use LN for line breaks (Unix style).\n\tyaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).\n)\n\ntype yaml_error_type_t int\n\n// Many bad things could happen with the parser and emitter.\nconst (\n\t// No error is produced.\n\tyaml_NO_ERROR yaml_error_type_t = iota\n\n\tyaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.\n\tyaml_READER_ERROR   // Cannot read or decode the input stream.\n\tyaml_SCANNER_ERROR  // Cannot scan the input stream.\n\tyaml_PARSER_ERROR   // Cannot parse the input stream.\n\tyaml_COMPOSER_ERROR // Cannot compose a YAML document.\n\tyaml_WRITER_ERROR   // Cannot write to the output stream.\n\tyaml_EMITTER_ERROR  // Cannot emit a YAML stream.\n)\n\n// The pointer position.\ntype yaml_mark_t struct {\n\tindex  int // The position index.\n\tline   int // The position line.\n\tcolumn int // The position column.\n}\n\n// Node Styles\n\ntype yaml_style_t int8\n\ntype yaml_scalar_style_t yaml_style_t\n\n// Scalar styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota\n\n\tyaml_PLAIN_SCALAR_STYLE         // The plain scalar style.\n\tyaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.\n\tyaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.\n\tyaml_LITERAL_SCALAR_STYLE       // The literal scalar style.\n\tyaml_FOLDED_SCALAR_STYLE        // The folded scalar style.\n)\n\ntype yaml_sequence_style_t yaml_style_t\n\n// Sequence styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota\n\n\tyaml_BLOCK_SEQUENCE_STYLE // The block sequence style.\n\tyaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.\n)\n\ntype yaml_mapping_style_t yaml_style_t\n\n// Mapping styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota\n\n\tyaml_BLOCK_MAPPING_STYLE // The block mapping style.\n\tyaml_FLOW_MAPPING_STYLE  // The flow mapping style.\n)\n\n// Tokens\n\ntype yaml_token_type_t int\n\n// Token types.\nconst (\n\t// An empty token.\n\tyaml_NO_TOKEN yaml_token_type_t = iota\n\n\tyaml_STREAM_START_TOKEN // A STREAM-START token.\n\tyaml_STREAM_END_TOKEN   // A STREAM-END token.\n\n\tyaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.\n\tyaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.\n\tyaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.\n\tyaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.\n\n\tyaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.\n\tyaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.\n\tyaml_BLOCK_END_TOKEN            // A BLOCK-END token.\n\n\tyaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.\n\tyaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.\n\tyaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.\n\tyaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.\n\n\tyaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.\n\tyaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.\n\tyaml_KEY_TOKEN         // A KEY token.\n\tyaml_VALUE_TOKEN       // A VALUE token.\n\n\tyaml_ALIAS_TOKEN  // An ALIAS token.\n\tyaml_ANCHOR_TOKEN // An ANCHOR token.\n\tyaml_TAG_TOKEN    // A TAG token.\n\tyaml_SCALAR_TOKEN // A SCALAR token.\n)\n\nfunc (tt yaml_token_type_t) String() string {\n\tswitch tt {\n\tcase yaml_NO_TOKEN:\n\t\treturn \"yaml_NO_TOKEN\"\n\tcase yaml_STREAM_START_TOKEN:\n\t\treturn \"yaml_STREAM_START_TOKEN\"\n\tcase yaml_STREAM_END_TOKEN:\n\t\treturn \"yaml_STREAM_END_TOKEN\"\n\tcase yaml_VERSION_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_VERSION_DIRECTIVE_TOKEN\"\n\tcase yaml_TAG_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_TAG_DIRECTIVE_TOKEN\"\n\tcase yaml_DOCUMENT_START_TOKEN:\n\t\treturn \"yaml_DOCUMENT_START_TOKEN\"\n\tcase yaml_DOCUMENT_END_TOKEN:\n\t\treturn \"yaml_DOCUMENT_END_TOKEN\"\n\tcase yaml_BLOCK_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_BLOCK_SEQUENCE_START_TOKEN\"\n\tcase yaml_BLOCK_MAPPING_START_TOKEN:\n\t\treturn \"yaml_BLOCK_MAPPING_START_TOKEN\"\n\tcase yaml_BLOCK_END_TOKEN:\n\t\treturn \"yaml_BLOCK_END_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_START_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_END_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_END_TOKEN\"\n\tcase yaml_FLOW_MAPPING_START_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_START_TOKEN\"\n\tcase yaml_FLOW_MAPPING_END_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_END_TOKEN\"\n\tcase yaml_BLOCK_ENTRY_TOKEN:\n\t\treturn \"yaml_BLOCK_ENTRY_TOKEN\"\n\tcase yaml_FLOW_ENTRY_TOKEN:\n\t\treturn \"yaml_FLOW_ENTRY_TOKEN\"\n\tcase yaml_KEY_TOKEN:\n\t\treturn \"yaml_KEY_TOKEN\"\n\tcase yaml_VALUE_TOKEN:\n\t\treturn \"yaml_VALUE_TOKEN\"\n\tcase yaml_ALIAS_TOKEN:\n\t\treturn \"yaml_ALIAS_TOKEN\"\n\tcase yaml_ANCHOR_TOKEN:\n\t\treturn \"yaml_ANCHOR_TOKEN\"\n\tcase yaml_TAG_TOKEN:\n\t\treturn \"yaml_TAG_TOKEN\"\n\tcase yaml_SCALAR_TOKEN:\n\t\treturn \"yaml_SCALAR_TOKEN\"\n\t}\n\treturn \"<unknown token>\"\n}\n\n// The token structure.\ntype yaml_token_t struct {\n\t// The token type.\n\ttyp yaml_token_type_t\n\n\t// The start/end of the token.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The stream encoding (for yaml_STREAM_START_TOKEN).\n\tencoding yaml_encoding_t\n\n\t// The alias/anchor/scalar value or tag/tag directive handle\n\t// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).\n\tvalue []byte\n\n\t// The tag suffix (for yaml_TAG_TOKEN).\n\tsuffix []byte\n\n\t// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).\n\tprefix []byte\n\n\t// The scalar style (for yaml_SCALAR_TOKEN).\n\tstyle yaml_scalar_style_t\n\n\t// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).\n\tmajor, minor int8\n}\n\n// Events\n\ntype yaml_event_type_t int8\n\n// Event types.\nconst (\n\t// An empty event.\n\tyaml_NO_EVENT yaml_event_type_t = iota\n\n\tyaml_STREAM_START_EVENT   // A STREAM-START event.\n\tyaml_STREAM_END_EVENT     // A STREAM-END event.\n\tyaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.\n\tyaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.\n\tyaml_ALIAS_EVENT          // An ALIAS event.\n\tyaml_SCALAR_EVENT         // A SCALAR event.\n\tyaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.\n\tyaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.\n\tyaml_MAPPING_START_EVENT  // A MAPPING-START event.\n\tyaml_MAPPING_END_EVENT    // A MAPPING-END event.\n)\n\n// The event structure.\ntype yaml_event_t struct {\n\n\t// The event type.\n\ttyp yaml_event_type_t\n\n\t// The start and end of the event.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The document encoding (for yaml_STREAM_START_EVENT).\n\tencoding yaml_encoding_t\n\n\t// The version directive (for yaml_DOCUMENT_START_EVENT).\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives (for yaml_DOCUMENT_START_EVENT).\n\ttag_directives []yaml_tag_directive_t\n\n\t// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).\n\tanchor []byte\n\n\t// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\ttag []byte\n\n\t// The scalar value (for yaml_SCALAR_EVENT).\n\tvalue []byte\n\n\t// Is the document start/end indicator implicit, or the tag optional?\n\t// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).\n\timplicit bool\n\n\t// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).\n\tquoted_implicit bool\n\n\t// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\tstyle yaml_style_t\n}\n\nfunc (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }\nfunc (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }\nfunc (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }\n\n// Nodes\n\nconst (\n\tyaml_NULL_TAG      = \"tag:yaml.org,2002:null\"      // The tag !!null with the only possible value: null.\n\tyaml_BOOL_TAG      = \"tag:yaml.org,2002:bool\"      // The tag !!bool with the values: true and false.\n\tyaml_STR_TAG       = \"tag:yaml.org,2002:str\"       // The tag !!str for string values.\n\tyaml_INT_TAG       = \"tag:yaml.org,2002:int\"       // The tag !!int for integer values.\n\tyaml_FLOAT_TAG     = \"tag:yaml.org,2002:float\"     // The tag !!float for float values.\n\tyaml_TIMESTAMP_TAG = \"tag:yaml.org,2002:timestamp\" // The tag !!timestamp for date and time values.\n\n\tyaml_SEQ_TAG = \"tag:yaml.org,2002:seq\" // The tag !!seq is used to denote sequences.\n\tyaml_MAP_TAG = \"tag:yaml.org,2002:map\" // The tag !!map is used to denote mapping.\n\n\t// Not in original libyaml.\n\tyaml_BINARY_TAG = \"tag:yaml.org,2002:binary\"\n\tyaml_MERGE_TAG  = \"tag:yaml.org,2002:merge\"\n\n\tyaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.\n\tyaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.\n\tyaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.\n)\n\ntype yaml_node_type_t int\n\n// Node types.\nconst (\n\t// An empty node.\n\tyaml_NO_NODE yaml_node_type_t = iota\n\n\tyaml_SCALAR_NODE   // A scalar node.\n\tyaml_SEQUENCE_NODE // A sequence node.\n\tyaml_MAPPING_NODE  // A mapping node.\n)\n\n// An element of a sequence node.\ntype yaml_node_item_t int\n\n// An element of a mapping node.\ntype yaml_node_pair_t struct {\n\tkey   int // The key of the element.\n\tvalue int // The value of the element.\n}\n\n// The node structure.\ntype yaml_node_t struct {\n\ttyp yaml_node_type_t // The node type.\n\ttag []byte           // The node tag.\n\n\t// The node data.\n\n\t// The scalar parameters (for yaml_SCALAR_NODE).\n\tscalar struct {\n\t\tvalue  []byte              // The scalar value.\n\t\tlength int                 // The length of the scalar value.\n\t\tstyle  yaml_scalar_style_t // The scalar style.\n\t}\n\n\t// The sequence parameters (for YAML_SEQUENCE_NODE).\n\tsequence struct {\n\t\titems_data []yaml_node_item_t    // The stack of sequence items.\n\t\tstyle      yaml_sequence_style_t // The sequence style.\n\t}\n\n\t// The mapping parameters (for yaml_MAPPING_NODE).\n\tmapping struct {\n\t\tpairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).\n\t\tpairs_start *yaml_node_pair_t    // The beginning of the stack.\n\t\tpairs_end   *yaml_node_pair_t    // The end of the stack.\n\t\tpairs_top   *yaml_node_pair_t    // The top of the stack.\n\t\tstyle       yaml_mapping_style_t // The mapping style.\n\t}\n\n\tstart_mark yaml_mark_t // The beginning of the node.\n\tend_mark   yaml_mark_t // The end of the node.\n\n}\n\n// The document structure.\ntype yaml_document_t struct {\n\n\t// The document nodes.\n\tnodes []yaml_node_t\n\n\t// The version directive.\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives.\n\ttag_directives_data  []yaml_tag_directive_t\n\ttag_directives_start int // The beginning of the tag directives list.\n\ttag_directives_end   int // The end of the tag directives list.\n\n\tstart_implicit int // Is the document start indicator implicit?\n\tend_implicit   int // Is the document end indicator implicit?\n\n\t// The start/end of the document.\n\tstart_mark, end_mark yaml_mark_t\n}\n\n// The prototype of a read handler.\n//\n// The read handler is called when the parser needs to read more bytes from the\n// source. The handler should write not more than size bytes to the buffer.\n// The number of written bytes should be set to the size_read variable.\n//\n// [in,out]   data        A pointer to an application data specified by\n//                        yaml_parser_set_input().\n// [out]      buffer      The buffer to write the data from the source.\n// [in]       size        The size of the buffer.\n// [out]      size_read   The actual number of bytes read from the source.\n//\n// On success, the handler should return 1.  If the handler failed,\n// the returned value should be 0. On EOF, the handler should set the\n// size_read to 0 and return 1.\ntype yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)\n\n// This structure holds information about a potential simple key.\ntype yaml_simple_key_t struct {\n\tpossible     bool        // Is a simple key possible?\n\trequired     bool        // Is a simple key required?\n\ttoken_number int         // The number of the token.\n\tmark         yaml_mark_t // The position mark.\n}\n\n// The states of the parser.\ntype yaml_parser_state_t int\n\nconst (\n\tyaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota\n\n\tyaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.\n\tyaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.\n\tyaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.\n\tyaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.\n\tyaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.\n\tyaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.\n\tyaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.\n\tyaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.\n\tyaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.\n\tyaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.\n\tyaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.\n\tyaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.\n\tyaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.\n\tyaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.\n\tyaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.\n\tyaml_PARSE_END_STATE                               // Expect nothing.\n)\n\nfunc (ps yaml_parser_state_t) String() string {\n\tswitch ps {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn \"yaml_PARSE_STREAM_START_STATE\"\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_CONTENT_STATE\"\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_END_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\"\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\"\n\tcase yaml_PARSE_END_STATE:\n\t\treturn \"yaml_PARSE_END_STATE\"\n\t}\n\treturn \"<unknown parser state>\"\n}\n\n// This structure holds aliases data.\ntype yaml_alias_data_t struct {\n\tanchor []byte      // The anchor.\n\tindex  int         // The node id.\n\tmark   yaml_mark_t // The anchor mark.\n}\n\n// The parser structure.\n//\n// All members are internal. Manage the structure using the\n// yaml_parser_ family of functions.\ntype yaml_parser_t struct {\n\n\t// Error handling\n\n\terror yaml_error_type_t // Error type.\n\n\tproblem string // Error description.\n\n\t// The byte about which the problem occured.\n\tproblem_offset int\n\tproblem_value  int\n\tproblem_mark   yaml_mark_t\n\n\t// The error context.\n\tcontext      string\n\tcontext_mark yaml_mark_t\n\n\t// Reader stuff\n\n\tread_handler yaml_read_handler_t // Read handler.\n\n\tinput_file io.Reader // File input data.\n\tinput      []byte    // String input data.\n\tinput_pos  int\n\n\teof bool // EOF flag\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\tunread int // The number of unread characters in the buffer.\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The input encoding.\n\n\toffset int         // The offset of the current position (in bytes).\n\tmark   yaml_mark_t // The mark of the current position.\n\n\t// Scanner stuff\n\n\tstream_start_produced bool // Have we started to scan the input stream?\n\tstream_end_produced   bool // Have we reached the end of the input stream?\n\n\tflow_level int // The number of unclosed '[' and '{' indicators.\n\n\ttokens          []yaml_token_t // The tokens queue.\n\ttokens_head     int            // The head of the tokens queue.\n\ttokens_parsed   int            // The number of tokens fetched from the queue.\n\ttoken_available bool           // Does the tokens queue contain a token ready for dequeueing.\n\n\tindent  int   // The current indentation level.\n\tindents []int // The indentation levels stack.\n\n\tsimple_key_allowed bool                // May a simple key occur at the current position?\n\tsimple_keys        []yaml_simple_key_t // The stack of simple keys.\n\n\t// Parser stuff\n\n\tstate          yaml_parser_state_t    // The current parser state.\n\tstates         []yaml_parser_state_t  // The parser states stack.\n\tmarks          []yaml_mark_t          // The stack of marks.\n\ttag_directives []yaml_tag_directive_t // The list of TAG directives.\n\n\t// Dumper stuff\n\n\taliases []yaml_alias_data_t // The alias data.\n\n\tdocument *yaml_document_t // The currently parsed document.\n}\n\n// Emitter Definitions\n\n// The prototype of a write handler.\n//\n// The write handler is called when the emitter needs to flush the accumulated\n// characters to the output.  The handler should write @a size bytes of the\n// @a buffer to the output.\n//\n// @param[in,out]   data        A pointer to an application data specified by\n//                              yaml_emitter_set_output().\n// @param[in]       buffer      The buffer with bytes to be written.\n// @param[in]       size        The size of the buffer.\n//\n// @returns On success, the handler should return @c 1.  If the handler failed,\n// the returned value should be @c 0.\n//\ntype yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error\n\ntype yaml_emitter_state_t int\n\n// The emitter states.\nconst (\n\t// Expect STREAM-START.\n\tyaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota\n\n\tyaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.\n\tyaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.\n\tyaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.\n\tyaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.\n\tyaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.\n\tyaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.\n\tyaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.\n\tyaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.\n\tyaml_EMIT_END_STATE                        // Expect nothing.\n)\n\n// The emitter structure.\n//\n// All members are internal.  Manage the structure using the @c yaml_emitter_\n// family of functions.\ntype yaml_emitter_t struct {\n\n\t// Error handling\n\n\terror   yaml_error_type_t // Error type.\n\tproblem string            // Error description.\n\n\t// Writer stuff\n\n\twrite_handler yaml_write_handler_t // Write handler.\n\n\toutput_buffer *[]byte   // String output data.\n\toutput_file   io.Writer // File output data.\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The stream encoding.\n\n\t// Emitter stuff\n\n\tcanonical   bool         // If the output is in the canonical style?\n\tbest_indent int          // The number of indentation spaces.\n\tbest_width  int          // The preferred width of the output lines.\n\tunicode     bool         // Allow unescaped non-ASCII characters?\n\tline_break  yaml_break_t // The preferred line break.\n\n\tstate  yaml_emitter_state_t   // The current emitter state.\n\tstates []yaml_emitter_state_t // The stack of states.\n\n\tevents      []yaml_event_t // The event queue.\n\tevents_head int            // The head of the event queue.\n\n\tindents []int // The stack of indentation levels.\n\n\ttag_directives []yaml_tag_directive_t // The list of tag directives.\n\n\tindent int // The current indentation level.\n\n\tflow_level int // The current flow level.\n\n\troot_context       bool // Is it the document root context?\n\tsequence_context   bool // Is it a sequence context?\n\tmapping_context    bool // Is it a mapping context?\n\tsimple_key_context bool // Is it a simple mapping key context?\n\n\tline       int  // The current line.\n\tcolumn     int  // The current column.\n\twhitespace bool // If the last character was a whitespace?\n\tindention  bool // If the last character was an indentation character (' ', '-', '?', ':')?\n\topen_ended bool // If an explicit document end is required?\n\n\t// Anchor analysis.\n\tanchor_data struct {\n\t\tanchor []byte // The anchor value.\n\t\talias  bool   // Is it an alias?\n\t}\n\n\t// Tag analysis.\n\ttag_data struct {\n\t\thandle []byte // The tag handle.\n\t\tsuffix []byte // The tag suffix.\n\t}\n\n\t// Scalar analysis.\n\tscalar_data struct {\n\t\tvalue                 []byte              // The scalar value.\n\t\tmultiline             bool                // Does the scalar contain line breaks?\n\t\tflow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?\n\t\tblock_plain_allowed   bool                // Can the scalar be expressed in the block plain style?\n\t\tsingle_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?\n\t\tblock_allowed         bool                // Can the scalar be expressed in the literal or folded styles?\n\t\tstyle                 yaml_scalar_style_t // The output style.\n\t}\n\n\t// Dumper stuff\n\n\topened bool // If the stream was already opened?\n\tclosed bool // If the stream was already closed?\n\n\t// The information associated with the document nodes.\n\tanchors *struct {\n\t\treferences int  // The number of references.\n\t\tanchor     int  // The anchor id.\n\t\tserialized bool // If the node has been emitted?\n\t}\n\n\tlast_anchor_id int // The last assigned anchor id.\n\n\tdocument *yaml_document_t // The currently emitted document.\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/gopkg.in/yaml.v2/yamlprivateh.go",
    "content": "package yaml\n\nconst (\n\t// The size of the input raw buffer.\n\tinput_raw_buffer_size = 512\n\n\t// The size of the input buffer.\n\t// It should be possible to decode the whole raw buffer.\n\tinput_buffer_size = input_raw_buffer_size * 3\n\n\t// The size of the output buffer.\n\toutput_buffer_size = 128\n\n\t// The size of the output raw buffer.\n\t// It should be possible to encode the whole output buffer.\n\toutput_raw_buffer_size = (output_buffer_size*2 + 2)\n\n\t// The size of other stacks and queues.\n\tinitial_stack_size  = 16\n\tinitial_queue_size  = 16\n\tinitial_string_size = 16\n)\n\n// Check if the character at the specified position is an alphabetical\n// character, a digit, '_', or '-'.\nfunc is_alpha(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'\n}\n\n// Check if the character at the specified position is a digit.\nfunc is_digit(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9'\n}\n\n// Get the value of a digit.\nfunc as_digit(b []byte, i int) int {\n\treturn int(b[i]) - '0'\n}\n\n// Check if the character at the specified position is a hex-digit.\nfunc is_hex(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'\n}\n\n// Get the value of a hex-digit.\nfunc as_hex(b []byte, i int) int {\n\tbi := b[i]\n\tif bi >= 'A' && bi <= 'F' {\n\t\treturn int(bi) - 'A' + 10\n\t}\n\tif bi >= 'a' && bi <= 'f' {\n\t\treturn int(bi) - 'a' + 10\n\t}\n\treturn int(bi) - '0'\n}\n\n// Check if the character is ASCII.\nfunc is_ascii(b []byte, i int) bool {\n\treturn b[i] <= 0x7F\n}\n\n// Check if the character at the start of the buffer can be printed unescaped.\nfunc is_printable(b []byte, i int) bool {\n\treturn ((b[i] == 0x0A) || // . == #x0A\n\t\t(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E\n\t\t(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF\n\t\t(b[i] > 0xC2 && b[i] < 0xED) ||\n\t\t(b[i] == 0xED && b[i+1] < 0xA0) ||\n\t\t(b[i] == 0xEE) ||\n\t\t(b[i] == 0xEF && // #xE000 <= . <= #xFFFD\n\t\t\t!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF\n\t\t\t!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))\n}\n\n// Check if the character at the specified position is NUL.\nfunc is_z(b []byte, i int) bool {\n\treturn b[i] == 0x00\n}\n\n// Check if the beginning of the buffer is a BOM.\nfunc is_bom(b []byte, i int) bool {\n\treturn b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF\n}\n\n// Check if the character at the specified position is space.\nfunc is_space(b []byte, i int) bool {\n\treturn b[i] == ' '\n}\n\n// Check if the character at the specified position is tab.\nfunc is_tab(b []byte, i int) bool {\n\treturn b[i] == '\\t'\n}\n\n// Check if the character at the specified position is blank (space or tab).\nfunc is_blank(b []byte, i int) bool {\n\t//return is_space(b, i) || is_tab(b, i)\n\treturn b[i] == ' ' || b[i] == '\\t'\n}\n\n// Check if the character at the specified position is a line break.\nfunc is_break(b []byte, i int) bool {\n\treturn (b[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)\n}\n\nfunc is_crlf(b []byte, i int) bool {\n\treturn b[i] == '\\r' && b[i+1] == '\\n'\n}\n\n// Check if the character is a line break or NUL.\nfunc is_breakz(b []byte, i int) bool {\n\t//return is_break(b, i) || is_z(b, i)\n\treturn (        // is_break:\n\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\t// is_z:\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, or NUL.\nfunc is_spacez(b []byte, i int) bool {\n\t//return is_space(b, i) || is_breakz(b, i)\n\treturn ( // is_space:\n\tb[i] == ' ' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, tab, or NUL.\nfunc is_blankz(b []byte, i int) bool {\n\t//return is_blank(b, i) || is_breakz(b, i)\n\treturn ( // is_blank:\n\tb[i] == ' ' || b[i] == '\\t' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Determine the width of the character.\nfunc width(b byte) int {\n\t// Don't replace these by a switch without first\n\t// confirming that it is being inlined.\n\tif b&0x80 == 0x00 {\n\t\treturn 1\n\t}\n\tif b&0xE0 == 0xC0 {\n\t\treturn 2\n\t}\n\tif b&0xF0 == 0xE0 {\n\t\treturn 3\n\t}\n\tif b&0xF8 == 0xF0 {\n\t\treturn 4\n\t}\n\treturn 0\n\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter3/viper/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/armon/consul-api\",\n\t\t\t\"repository\": \"https://github.com/armon/consul-api\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"dcfedd50ed5334f96adee43fc88518a4f095e15c\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/coreos/go-etcd/etcd\",\n\t\t\t\"repository\": \"https://github.com/coreos/go-etcd\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"003851be7bb0694fe3cc457a49529a19388ee7cf\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/etcd\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/fsnotify/fsnotify\",\n\t\t\t\"repository\": \"https://github.com/fsnotify/fsnotify\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"4da3e2cfbabc9f751898f250b49f2439785783a1\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/hashicorp/hcl\",\n\t\t\t\"repository\": \"https://github.com/hashicorp/hcl\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"630949a3c5fa3c613328e1b8256052cbc2327c9b\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/kr/fs\",\n\t\t\t\"repository\": \"https://github.com/kr/fs\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"2788f0dbd16903de03cb8186e5c7d97b69ad387b\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/magiconair/properties\",\n\t\t\t\"repository\": \"https://github.com/magiconair/properties\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"51463bfca2576e06c62a8504b5c0f06d61312647\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/mitchellh/mapstructure\",\n\t\t\t\"repository\": \"https://github.com/mitchellh/mapstructure\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"53818660ed4955e899c0bcafa97299a388bd7c8e\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/pelletier/go-buffruneio\",\n\t\t\t\"repository\": \"https://github.com/pelletier/go-buffruneio\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"c37440a7cf42ac63b919c752ca73a85067e05992\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/pelletier/go-toml\",\n\t\t\t\"repository\": \"https://github.com/pelletier/go-toml\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"fe206efb84b2bc8e8cfafe6b4c1826622be969e3\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/pkg/errors\",\n\t\t\t\"repository\": \"https://github.com/pkg/errors\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"ff09b135c25aae272398c51a07235b90a75aa4f0\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/pkg/sftp\",\n\t\t\t\"repository\": \"https://github.com/pkg/sftp\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"027e3db83beaed3581d89b1838de314b9be61824\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/afero\",\n\t\t\t\"repository\": \"https://github.com/spf13/afero\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"9be650865eab0c12963d8753212f4f9c66cdcf12\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/cast\",\n\t\t\t\"repository\": \"https://github.com/spf13/cast\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"acbeb36b902d72a7a4c18e8f3241075e7ab763e4\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/jwalterweatherman\",\n\t\t\t\"repository\": \"https://github.com/spf13/jwalterweatherman\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"fa7ca7e836cf3a8bb4ebf799f472c12d7e903d66\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/pflag\",\n\t\t\t\"repository\": \"https://github.com/spf13/pflag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"2300d0f8576fe575f71aaa5b9bbe4e1b0dc2eb51\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/viper\",\n\t\t\t\"repository\": \"https://github.com/spf13/viper\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"0967fc9aceab2ce9da34061253ac10fb99bba5b2\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/ugorji/go/codec\",\n\t\t\t\"repository\": \"https://github.com/ugorji/go\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"708a42d246822952f38190a8d8c4e6b16a0e600c\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/codec\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/xordataexchange/crypt/backend\",\n\t\t\t\"repository\": \"https://github.com/xordataexchange/crypt\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"749e360c8f236773f28fc6d3ddfce4a470795227\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"backend\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/xordataexchange/crypt/config\",\n\t\t\t\"repository\": \"https://github.com/xordataexchange/crypt\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"749e360c8f236773f28fc6d3ddfce4a470795227\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/config\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/xordataexchange/crypt/encoding/secconf\",\n\t\t\t\"repository\": \"https://github.com/xordataexchange/crypt\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"749e360c8f236773f28fc6d3ddfce4a470795227\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"encoding/secconf\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/crypto/cast5\",\n\t\t\t\"repository\": \"https://go.googlesource.com/crypto\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"12c985af8526c1f6f0c463bbfd9d69623d13b323\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"cast5\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/crypto/curve25519\",\n\t\t\t\"repository\": \"https://go.googlesource.com/crypto\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"12c985af8526c1f6f0c463bbfd9d69623d13b323\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"curve25519\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/crypto/ed25519\",\n\t\t\t\"repository\": \"https://go.googlesource.com/crypto\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"12c985af8526c1f6f0c463bbfd9d69623d13b323\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"ed25519\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/crypto/openpgp\",\n\t\t\t\"repository\": \"https://go.googlesource.com/crypto\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"12c985af8526c1f6f0c463bbfd9d69623d13b323\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"openpgp\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/crypto/ssh\",\n\t\t\t\"repository\": \"https://go.googlesource.com/crypto\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"12c985af8526c1f6f0c463bbfd9d69623d13b323\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/ssh\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/sys/unix\",\n\t\t\t\"repository\": \"https://go.googlesource.com/sys\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"f3918c30c5c2cb527c0b071a27c35120a6c0719a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/unix\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/internal/gen\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"internal/gen\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/internal/triegen\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"internal/triegen\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/internal/ucd\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"internal/ucd\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/transform\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/transform\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/unicode/cldr\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"unicode/cldr\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"golang.org/x/text/unicode/norm\",\n\t\t\t\"repository\": \"https://go.googlesource.com/text\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"e2fd46741f65c5fcf3d8e106e9a45d62cd51d87a\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"unicode/norm\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"gopkg.in/yaml.v2\",\n\t\t\t\"repository\": \"https://gopkg.in/yaml.v2\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b\",\n\t\t\t\"branch\": \"v2\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"log\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n\n\t\"github.com/jmoiron/sqlx\"\n)\n\ntype databaseName struct {\n\tName string `db:\"Database\"`\n}\n\nfunc listDatabases(db *sqlx.DB) ([]databaseName, error) {\n\tresult := []databaseName{}\n\terr := db.Select(&result, \"show databases\")\n\treturn result, err\n}\n\nfunc main() {\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// this is just a factory struct\n\tdbFactory := &service.Database{}\n\tdbFactory.Flags(\"dsn\", \"DSN for database connection\", flags)\n\n\tflags.Parse(os.Args[1:])\n\n\tdb, err := dbFactory.Get();\n\tif err != nil {\n\t\tlog.Println(\"Error when connecting:\", err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"Listing databases\")\n\tdatabases, err := listDatabases(db)\n\tif err != nil {\n\t\tlog.Println(\"Error when listing databases:\", err)\n\t\treturn\n\t}\n\tif len(databases) == 0 {\n\t\tfmt.Println(\"No databases exist\")\n\t} else {\n\t\tfor _, db := range databases {\n\t\t\tfmt.Println(\">\", db.Name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main.go.txt",
    "content": "Listing databases\n> information_schema\n> api"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main_namsral.go",
    "content": "package main\n\nimport (\n\t\"log\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n\n\t\"github.com/namsral/flag\"\n\t\"github.com/jmoiron/sqlx\"\n)\n\ntype databaseName struct {\n\tName string `db:\"Database\"`\n}\n\nfunc listDatabases(db *sqlx.DB) ([]databaseName, error) {\n\tresult := []databaseName{}\n\terr := db.Select(&result, \"show databases\")\n\treturn result, err\n}\n\nfunc main() {\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// this is just a factory struct\n\tdbFactory := &service.Database{}\n\tdbFactory.Flags(\"dsn\", \"DSN for database connection\", flags)\n\n\tflags.Parse(os.Args[1:])\n\n\tdb, err := dbFactory.Get();\n\tif err != nil {\n\t\tlog.Println(\"Error when connecting:\", err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"Listing databases\")\n\tdatabases, err := listDatabases(db)\n\tif err != nil {\n\t\tlog.Println(\"Error when listing databases:\", err)\n\t\treturn\n\t}\n\tif len(databases) == 0 {\n\t\tfmt.Println(\"No databases exist\")\n\t} else {\n\t\tfor _, db := range databases {\n\t\t\tfmt.Println(\">\", db.Name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main_namsral.go.txt",
    "content": "Listing databases\n> information_schema\n> api"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main_pflag.go",
    "content": "package main\n\nimport (\n\t\"log\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n\n\tflag \"github.com/spf13/pflag\"\n\t\"github.com/jmoiron/sqlx\"\n)\n\ntype databaseName struct {\n\tName string `db:\"Database\"`\n}\n\nfunc listDatabases(db *sqlx.DB) ([]databaseName, error) {\n\tresult := []databaseName{}\n\terr := db.Select(&result, \"show databases\")\n\treturn result, err\n}\n\nfunc main() {\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// this is just a factory struct\n\tdbFactory := &service.Database{}\n\tdbFactory.Flags(\"dsn\", \"DSN for database connection\", flags)\n\n\tflags.Parse(os.Args[1:])\n\n\tdb, err := dbFactory.Get();\n\tif err != nil {\n\t\tlog.Println(\"Error when connecting:\", err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"Listing databases\")\n\tdatabases, err := listDatabases(db)\n\tif err != nil {\n\t\tlog.Println(\"Error when listing databases:\", err)\n\t\treturn\n\t}\n\tif len(databases) == 0 {\n\t\tfmt.Println(\"No databases exist\")\n\t} else {\n\t\tfor _, db := range databases {\n\t\t\tfmt.Println(\">\", db.Name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/main_pflag.go.txt",
    "content": "Listing databases\n> information_schema\n> api"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/run",
    "content": "#!/bin/bash\nif [ ! -d \"vendor\" ]; then\n\tgvt fetch \"github.com/go-sql-driver/mysql\"\n\tgvt fetch \"github.com/jmoiron/sqlx\"\n\tgvt fetch \"github.com/namsral/flag\"\n\tgvt fetch \"github.com/spf13/pflag\"\nfi\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\techo \"##\" $FILE\n\tdocker run --net=party --rm -it -v $(pwd):/go/src/app -w /go/src/app golang:1.8-alpine go run $FILE | tee \"$FILE.txt\"\ndone\n\n# strip \\r\nsed -i 's/\\cM//g' *txt\n# strip trailing spaces/lines\nsed -i -e :a -e '/^\\n*$/{$d;N;};/\\n$/ba' *txt\n# strip off final newline\ntruncate -s -1 *txt\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/service/database.go",
    "content": "package service\n\nimport (\n\t\"strings\"\n\t// import database driver for mysql\n\t_ \"github.com/go-sql-driver/mysql\"\n\t\"github.com/jmoiron/sqlx\"\n)\n\n// Database connection factory object\ntype Database struct {\n\t// hold database config\n\tdsn *string\n}\n\n// Interface for used flag functions\ntype databaseFlags interface {\n\tString(name, value, usage string) *string\n}\n\n// Flags registers a new parameter in a compatible flags package\nfunc (r *Database) Flags(name, usage string, flag databaseFlags) {\n\tr.dsn = flag.String(name, \"api:api@tcp(db1:3306)/api\", usage)\n}\n\n// Get creates and returns a new database connection\nfunc (r *Database) Get() (*sqlx.DB, error) {\n\tdsn := *r.dsn\n\tif !strings.Contains(dsn, \"?\") {\n\t\tdsn = dsn + \"?\"\n\t}\n\t// set some default values for dsn config\n\tdefaults := map[string]string{\n\t\t\"collation\": \"utf8_general_ci\",\n\t\t\"parseTime\": \"true\",\n\t\t\"loc\":       \"Local\",\n\t}\n\t// append default values\n\tfor key, value := range defaults {\n\t\tif !strings.Contains(dsn, key+\"=\") {\n\t\t\tdsn = dsn + \"&\" + key + \"=\" + value\n\t\t}\n\t}\n\tdsn = strings.Replace(dsn, \"?&\", \"?\", 1)\n\treturn sqlx.Open(\"mysql\", dsn)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/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": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/appengine.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\n// +build appengine\n\npackage mysql\n\nimport (\n\t\"appengine/cloudsql\"\n)\n\nfunc init() {\n\tRegisterDial(\"cloudsql\", cloudsql.Dial)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/buffer.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"io\"\n\t\"net\"\n\t\"time\"\n)\n\nconst defaultBufSize = 4096\n\n// A buffer which is used for both reading and writing.\n// This is possible since communication on each connection is synchronous.\n// In other words, we can't write and read simultaneously on the same connection.\n// The buffer is similar to bufio.Reader / Writer but zero-copy-ish\n// Also highly optimized for this particular use case.\ntype buffer struct {\n\tbuf     []byte\n\tnc      net.Conn\n\tidx     int\n\tlength  int\n\ttimeout time.Duration\n}\n\nfunc newBuffer(nc net.Conn) buffer {\n\tvar b [defaultBufSize]byte\n\treturn buffer{\n\t\tbuf: b[:],\n\t\tnc:  nc,\n\t}\n}\n\n// fill reads into the buffer until at least _need_ bytes are in it\nfunc (b *buffer) fill(need int) error {\n\tn := b.length\n\n\t// move existing data to the beginning\n\tif n > 0 && b.idx > 0 {\n\t\tcopy(b.buf[0:n], b.buf[b.idx:])\n\t}\n\n\t// grow buffer if necessary\n\t// TODO: let the buffer shrink again at some point\n\t//       Maybe keep the org buf slice and swap back?\n\tif need > len(b.buf) {\n\t\t// Round up to the next multiple of the default size\n\t\tnewBuf := make([]byte, ((need/defaultBufSize)+1)*defaultBufSize)\n\t\tcopy(newBuf, b.buf)\n\t\tb.buf = newBuf\n\t}\n\n\tb.idx = 0\n\n\tfor {\n\t\tif b.timeout > 0 {\n\t\t\tif err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tnn, err := b.nc.Read(b.buf[n:])\n\t\tn += nn\n\n\t\tswitch err {\n\t\tcase nil:\n\t\t\tif n < need {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb.length = n\n\t\t\treturn nil\n\n\t\tcase io.EOF:\n\t\t\tif n >= need {\n\t\t\t\tb.length = n\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn io.ErrUnexpectedEOF\n\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// returns next N bytes from buffer.\n// The returned slice is only guaranteed to be valid until the next read\nfunc (b *buffer) readNext(need int) ([]byte, error) {\n\tif b.length < need {\n\t\t// refill\n\t\tif err := b.fill(need); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\toffset := b.idx\n\tb.idx += need\n\tb.length -= need\n\treturn b.buf[offset:b.idx], nil\n}\n\n// returns a buffer with the requested size.\n// If possible, a slice from the existing buffer is returned.\n// Otherwise a bigger buffer is made.\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeBuffer(length int) []byte {\n\tif b.length > 0 {\n\t\treturn nil\n\t}\n\n\t// test (cheap) general case first\n\tif length <= defaultBufSize || length <= cap(b.buf) {\n\t\treturn b.buf[:length]\n\t}\n\n\tif length < maxPacketSize {\n\t\tb.buf = make([]byte, length)\n\t\treturn b.buf\n\t}\n\treturn make([]byte, length)\n}\n\n// shortcut which can be used if the requested buffer is guaranteed to be\n// smaller than defaultBufSize\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeSmallBuffer(length int) []byte {\n\tif b.length == 0 {\n\t\treturn b.buf[:length]\n\t}\n\treturn nil\n}\n\n// takeCompleteBuffer returns the complete existing buffer.\n// This can be used if the necessary buffer size is unknown.\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeCompleteBuffer() []byte {\n\tif b.length == 0 {\n\t\treturn b.buf\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/collations.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nconst defaultCollation = \"utf8_general_ci\"\n\n// A list of available collations mapped to the internal ID.\n// To update this map use the following MySQL query:\n//     SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS\nvar collations = map[string]byte{\n\t\"big5_chinese_ci\":          1,\n\t\"latin2_czech_cs\":          2,\n\t\"dec8_swedish_ci\":          3,\n\t\"cp850_general_ci\":         4,\n\t\"latin1_german1_ci\":        5,\n\t\"hp8_english_ci\":           6,\n\t\"koi8r_general_ci\":         7,\n\t\"latin1_swedish_ci\":        8,\n\t\"latin2_general_ci\":        9,\n\t\"swe7_swedish_ci\":          10,\n\t\"ascii_general_ci\":         11,\n\t\"ujis_japanese_ci\":         12,\n\t\"sjis_japanese_ci\":         13,\n\t\"cp1251_bulgarian_ci\":      14,\n\t\"latin1_danish_ci\":         15,\n\t\"hebrew_general_ci\":        16,\n\t\"tis620_thai_ci\":           18,\n\t\"euckr_korean_ci\":          19,\n\t\"latin7_estonian_cs\":       20,\n\t\"latin2_hungarian_ci\":      21,\n\t\"koi8u_general_ci\":         22,\n\t\"cp1251_ukrainian_ci\":      23,\n\t\"gb2312_chinese_ci\":        24,\n\t\"greek_general_ci\":         25,\n\t\"cp1250_general_ci\":        26,\n\t\"latin2_croatian_ci\":       27,\n\t\"gbk_chinese_ci\":           28,\n\t\"cp1257_lithuanian_ci\":     29,\n\t\"latin5_turkish_ci\":        30,\n\t\"latin1_german2_ci\":        31,\n\t\"armscii8_general_ci\":      32,\n\t\"utf8_general_ci\":          33,\n\t\"cp1250_czech_cs\":          34,\n\t\"ucs2_general_ci\":          35,\n\t\"cp866_general_ci\":         36,\n\t\"keybcs2_general_ci\":       37,\n\t\"macce_general_ci\":         38,\n\t\"macroman_general_ci\":      39,\n\t\"cp852_general_ci\":         40,\n\t\"latin7_general_ci\":        41,\n\t\"latin7_general_cs\":        42,\n\t\"macce_bin\":                43,\n\t\"cp1250_croatian_ci\":       44,\n\t\"utf8mb4_general_ci\":       45,\n\t\"utf8mb4_bin\":              46,\n\t\"latin1_bin\":               47,\n\t\"latin1_general_ci\":        48,\n\t\"latin1_general_cs\":        49,\n\t\"cp1251_bin\":               50,\n\t\"cp1251_general_ci\":        51,\n\t\"cp1251_general_cs\":        52,\n\t\"macroman_bin\":             53,\n\t\"utf16_general_ci\":         54,\n\t\"utf16_bin\":                55,\n\t\"utf16le_general_ci\":       56,\n\t\"cp1256_general_ci\":        57,\n\t\"cp1257_bin\":               58,\n\t\"cp1257_general_ci\":        59,\n\t\"utf32_general_ci\":         60,\n\t\"utf32_bin\":                61,\n\t\"utf16le_bin\":              62,\n\t\"binary\":                   63,\n\t\"armscii8_bin\":             64,\n\t\"ascii_bin\":                65,\n\t\"cp1250_bin\":               66,\n\t\"cp1256_bin\":               67,\n\t\"cp866_bin\":                68,\n\t\"dec8_bin\":                 69,\n\t\"greek_bin\":                70,\n\t\"hebrew_bin\":               71,\n\t\"hp8_bin\":                  72,\n\t\"keybcs2_bin\":              73,\n\t\"koi8r_bin\":                74,\n\t\"koi8u_bin\":                75,\n\t\"latin2_bin\":               77,\n\t\"latin5_bin\":               78,\n\t\"latin7_bin\":               79,\n\t\"cp850_bin\":                80,\n\t\"cp852_bin\":                81,\n\t\"swe7_bin\":                 82,\n\t\"utf8_bin\":                 83,\n\t\"big5_bin\":                 84,\n\t\"euckr_bin\":                85,\n\t\"gb2312_bin\":               86,\n\t\"gbk_bin\":                  87,\n\t\"sjis_bin\":                 88,\n\t\"tis620_bin\":               89,\n\t\"ucs2_bin\":                 90,\n\t\"ujis_bin\":                 91,\n\t\"geostd8_general_ci\":       92,\n\t\"geostd8_bin\":              93,\n\t\"latin1_spanish_ci\":        94,\n\t\"cp932_japanese_ci\":        95,\n\t\"cp932_bin\":                96,\n\t\"eucjpms_japanese_ci\":      97,\n\t\"eucjpms_bin\":              98,\n\t\"cp1250_polish_ci\":         99,\n\t\"utf16_unicode_ci\":         101,\n\t\"utf16_icelandic_ci\":       102,\n\t\"utf16_latvian_ci\":         103,\n\t\"utf16_romanian_ci\":        104,\n\t\"utf16_slovenian_ci\":       105,\n\t\"utf16_polish_ci\":          106,\n\t\"utf16_estonian_ci\":        107,\n\t\"utf16_spanish_ci\":         108,\n\t\"utf16_swedish_ci\":         109,\n\t\"utf16_turkish_ci\":         110,\n\t\"utf16_czech_ci\":           111,\n\t\"utf16_danish_ci\":          112,\n\t\"utf16_lithuanian_ci\":      113,\n\t\"utf16_slovak_ci\":          114,\n\t\"utf16_spanish2_ci\":        115,\n\t\"utf16_roman_ci\":           116,\n\t\"utf16_persian_ci\":         117,\n\t\"utf16_esperanto_ci\":       118,\n\t\"utf16_hungarian_ci\":       119,\n\t\"utf16_sinhala_ci\":         120,\n\t\"utf16_german2_ci\":         121,\n\t\"utf16_croatian_ci\":        122,\n\t\"utf16_unicode_520_ci\":     123,\n\t\"utf16_vietnamese_ci\":      124,\n\t\"ucs2_unicode_ci\":          128,\n\t\"ucs2_icelandic_ci\":        129,\n\t\"ucs2_latvian_ci\":          130,\n\t\"ucs2_romanian_ci\":         131,\n\t\"ucs2_slovenian_ci\":        132,\n\t\"ucs2_polish_ci\":           133,\n\t\"ucs2_estonian_ci\":         134,\n\t\"ucs2_spanish_ci\":          135,\n\t\"ucs2_swedish_ci\":          136,\n\t\"ucs2_turkish_ci\":          137,\n\t\"ucs2_czech_ci\":            138,\n\t\"ucs2_danish_ci\":           139,\n\t\"ucs2_lithuanian_ci\":       140,\n\t\"ucs2_slovak_ci\":           141,\n\t\"ucs2_spanish2_ci\":         142,\n\t\"ucs2_roman_ci\":            143,\n\t\"ucs2_persian_ci\":          144,\n\t\"ucs2_esperanto_ci\":        145,\n\t\"ucs2_hungarian_ci\":        146,\n\t\"ucs2_sinhala_ci\":          147,\n\t\"ucs2_german2_ci\":          148,\n\t\"ucs2_croatian_ci\":         149,\n\t\"ucs2_unicode_520_ci\":      150,\n\t\"ucs2_vietnamese_ci\":       151,\n\t\"ucs2_general_mysql500_ci\": 159,\n\t\"utf32_unicode_ci\":         160,\n\t\"utf32_icelandic_ci\":       161,\n\t\"utf32_latvian_ci\":         162,\n\t\"utf32_romanian_ci\":        163,\n\t\"utf32_slovenian_ci\":       164,\n\t\"utf32_polish_ci\":          165,\n\t\"utf32_estonian_ci\":        166,\n\t\"utf32_spanish_ci\":         167,\n\t\"utf32_swedish_ci\":         168,\n\t\"utf32_turkish_ci\":         169,\n\t\"utf32_czech_ci\":           170,\n\t\"utf32_danish_ci\":          171,\n\t\"utf32_lithuanian_ci\":      172,\n\t\"utf32_slovak_ci\":          173,\n\t\"utf32_spanish2_ci\":        174,\n\t\"utf32_roman_ci\":           175,\n\t\"utf32_persian_ci\":         176,\n\t\"utf32_esperanto_ci\":       177,\n\t\"utf32_hungarian_ci\":       178,\n\t\"utf32_sinhala_ci\":         179,\n\t\"utf32_german2_ci\":         180,\n\t\"utf32_croatian_ci\":        181,\n\t\"utf32_unicode_520_ci\":     182,\n\t\"utf32_vietnamese_ci\":      183,\n\t\"utf8_unicode_ci\":          192,\n\t\"utf8_icelandic_ci\":        193,\n\t\"utf8_latvian_ci\":          194,\n\t\"utf8_romanian_ci\":         195,\n\t\"utf8_slovenian_ci\":        196,\n\t\"utf8_polish_ci\":           197,\n\t\"utf8_estonian_ci\":         198,\n\t\"utf8_spanish_ci\":          199,\n\t\"utf8_swedish_ci\":          200,\n\t\"utf8_turkish_ci\":          201,\n\t\"utf8_czech_ci\":            202,\n\t\"utf8_danish_ci\":           203,\n\t\"utf8_lithuanian_ci\":       204,\n\t\"utf8_slovak_ci\":           205,\n\t\"utf8_spanish2_ci\":         206,\n\t\"utf8_roman_ci\":            207,\n\t\"utf8_persian_ci\":          208,\n\t\"utf8_esperanto_ci\":        209,\n\t\"utf8_hungarian_ci\":        210,\n\t\"utf8_sinhala_ci\":          211,\n\t\"utf8_german2_ci\":          212,\n\t\"utf8_croatian_ci\":         213,\n\t\"utf8_unicode_520_ci\":      214,\n\t\"utf8_vietnamese_ci\":       215,\n\t\"utf8_general_mysql500_ci\": 223,\n\t\"utf8mb4_unicode_ci\":       224,\n\t\"utf8mb4_icelandic_ci\":     225,\n\t\"utf8mb4_latvian_ci\":       226,\n\t\"utf8mb4_romanian_ci\":      227,\n\t\"utf8mb4_slovenian_ci\":     228,\n\t\"utf8mb4_polish_ci\":        229,\n\t\"utf8mb4_estonian_ci\":      230,\n\t\"utf8mb4_spanish_ci\":       231,\n\t\"utf8mb4_swedish_ci\":       232,\n\t\"utf8mb4_turkish_ci\":       233,\n\t\"utf8mb4_czech_ci\":         234,\n\t\"utf8mb4_danish_ci\":        235,\n\t\"utf8mb4_lithuanian_ci\":    236,\n\t\"utf8mb4_slovak_ci\":        237,\n\t\"utf8mb4_spanish2_ci\":      238,\n\t\"utf8mb4_roman_ci\":         239,\n\t\"utf8mb4_persian_ci\":       240,\n\t\"utf8mb4_esperanto_ci\":     241,\n\t\"utf8mb4_hungarian_ci\":     242,\n\t\"utf8mb4_sinhala_ci\":       243,\n\t\"utf8mb4_german2_ci\":       244,\n\t\"utf8mb4_croatian_ci\":      245,\n\t\"utf8mb4_unicode_520_ci\":   246,\n\t\"utf8mb4_vietnamese_ci\":    247,\n}\n\n// A blacklist of collations which is unsafe to interpolate parameters.\n// These multibyte encodings may contains 0x5c (`\\`) in their trailing bytes.\nvar unsafeCollations = map[string]bool{\n\t\"big5_chinese_ci\":   true,\n\t\"sjis_japanese_ci\":  true,\n\t\"gbk_chinese_ci\":    true,\n\t\"big5_bin\":          true,\n\t\"gb2312_bin\":        true,\n\t\"gbk_bin\":           true,\n\t\"sjis_bin\":          true,\n\t\"cp932_japanese_ci\": true,\n\t\"cp932_bin\":         true,\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/connection.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"io\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype mysqlConn struct {\n\tbuf              buffer\n\tnetConn          net.Conn\n\taffectedRows     uint64\n\tinsertId         uint64\n\tcfg              *Config\n\tmaxAllowedPacket int\n\tmaxWriteSize     int\n\twriteTimeout     time.Duration\n\tflags            clientFlag\n\tstatus           statusFlag\n\tsequence         uint8\n\tparseTime        bool\n\tstrict           bool\n}\n\n// Handles parameters set in DSN after the connection is established\nfunc (mc *mysqlConn) handleParams() (err error) {\n\tfor param, val := range mc.cfg.Params {\n\t\tswitch param {\n\t\t// Charset\n\t\tcase \"charset\":\n\t\t\tcharsets := strings.Split(val, \",\")\n\t\t\tfor i := range charsets {\n\t\t\t\t// ignore errors here - a charset may not exist\n\t\t\t\terr = mc.exec(\"SET NAMES \" + charsets[i])\n\t\t\t\tif err == nil {\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\t\t\t}\n\n\t\t// System Vars\n\t\tdefault:\n\t\t\terr = mc.exec(\"SET \" + param + \"=\" + val + \"\")\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\nfunc (mc *mysqlConn) Begin() (driver.Tx, error) {\n\tif mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\terr := mc.exec(\"START TRANSACTION\")\n\tif err == nil {\n\t\treturn &mysqlTx{mc}, err\n\t}\n\n\treturn nil, err\n}\n\nfunc (mc *mysqlConn) Close() (err error) {\n\t// Makes Close idempotent\n\tif mc.netConn != nil {\n\t\terr = mc.writeCommandPacket(comQuit)\n\t}\n\n\tmc.cleanup()\n\n\treturn\n}\n\n// Closes the network connection and unsets internal variables. Do not call this\n// function after successfully authentication, call Close instead. This function\n// is called before auth or on auth failure because MySQL will have already\n// closed the network connection.\nfunc (mc *mysqlConn) cleanup() {\n\t// Makes cleanup idempotent\n\tif mc.netConn != nil {\n\t\tif err := mc.netConn.Close(); err != nil {\n\t\t\terrLog.Print(err)\n\t\t}\n\t\tmc.netConn = nil\n\t}\n\tmc.cfg = nil\n\tmc.buf.nc = nil\n}\n\nfunc (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {\n\tif mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := mc.writeCommandPacketStr(comStmtPrepare, query)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tstmt := &mysqlStmt{\n\t\tmc: mc,\n\t}\n\n\t// Read Result\n\tcolumnCount, err := stmt.readPrepareResultPacket()\n\tif err == nil {\n\t\tif stmt.paramCount > 0 {\n\t\t\tif err = mc.readUntilEOF(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tif columnCount > 0 {\n\t\t\terr = mc.readUntilEOF()\n\t\t}\n\t}\n\n\treturn stmt, err\n}\n\nfunc (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (string, error) {\n\t// Number of ? should be same to len(args)\n\tif strings.Count(query, \"?\") != len(args) {\n\t\treturn \"\", driver.ErrSkip\n\t}\n\n\tbuf := mc.buf.takeCompleteBuffer()\n\tif buf == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn \"\", driver.ErrBadConn\n\t}\n\tbuf = buf[:0]\n\targPos := 0\n\n\tfor i := 0; i < len(query); i++ {\n\t\tq := strings.IndexByte(query[i:], '?')\n\t\tif q == -1 {\n\t\t\tbuf = append(buf, query[i:]...)\n\t\t\tbreak\n\t\t}\n\t\tbuf = append(buf, query[i:i+q]...)\n\t\ti += q\n\n\t\targ := args[argPos]\n\t\targPos++\n\n\t\tif arg == nil {\n\t\t\tbuf = append(buf, \"NULL\"...)\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch v := arg.(type) {\n\t\tcase int64:\n\t\t\tbuf = strconv.AppendInt(buf, v, 10)\n\t\tcase float64:\n\t\t\tbuf = strconv.AppendFloat(buf, v, 'g', -1, 64)\n\t\tcase bool:\n\t\t\tif v {\n\t\t\t\tbuf = append(buf, '1')\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, '0')\n\t\t\t}\n\t\tcase time.Time:\n\t\t\tif v.IsZero() {\n\t\t\t\tbuf = append(buf, \"'0000-00-00'\"...)\n\t\t\t} else {\n\t\t\t\tv := v.In(mc.cfg.Loc)\n\t\t\t\tv = v.Add(time.Nanosecond * 500) // To round under microsecond\n\t\t\t\tyear := v.Year()\n\t\t\t\tyear100 := year / 100\n\t\t\t\tyear1 := year % 100\n\t\t\t\tmonth := v.Month()\n\t\t\t\tday := v.Day()\n\t\t\t\thour := v.Hour()\n\t\t\t\tminute := v.Minute()\n\t\t\t\tsecond := v.Second()\n\t\t\t\tmicro := v.Nanosecond() / 1000\n\n\t\t\t\tbuf = append(buf, []byte{\n\t\t\t\t\t'\\'',\n\t\t\t\t\tdigits10[year100], digits01[year100],\n\t\t\t\t\tdigits10[year1], digits01[year1],\n\t\t\t\t\t'-',\n\t\t\t\t\tdigits10[month], digits01[month],\n\t\t\t\t\t'-',\n\t\t\t\t\tdigits10[day], digits01[day],\n\t\t\t\t\t' ',\n\t\t\t\t\tdigits10[hour], digits01[hour],\n\t\t\t\t\t':',\n\t\t\t\t\tdigits10[minute], digits01[minute],\n\t\t\t\t\t':',\n\t\t\t\t\tdigits10[second], digits01[second],\n\t\t\t\t}...)\n\n\t\t\t\tif micro != 0 {\n\t\t\t\t\tmicro10000 := micro / 10000\n\t\t\t\t\tmicro100 := micro / 100 % 100\n\t\t\t\t\tmicro1 := micro % 100\n\t\t\t\t\tbuf = append(buf, []byte{\n\t\t\t\t\t\t'.',\n\t\t\t\t\t\tdigits10[micro10000], digits01[micro10000],\n\t\t\t\t\t\tdigits10[micro100], digits01[micro100],\n\t\t\t\t\t\tdigits10[micro1], digits01[micro1],\n\t\t\t\t\t}...)\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, '\\'')\n\t\t\t}\n\t\tcase []byte:\n\t\t\tif v == nil {\n\t\t\t\tbuf = append(buf, \"NULL\"...)\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, \"_binary'\"...)\n\t\t\t\tif mc.status&statusNoBackslashEscapes == 0 {\n\t\t\t\t\tbuf = escapeBytesBackslash(buf, v)\n\t\t\t\t} else {\n\t\t\t\t\tbuf = escapeBytesQuotes(buf, v)\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, '\\'')\n\t\t\t}\n\t\tcase string:\n\t\t\tbuf = append(buf, '\\'')\n\t\t\tif mc.status&statusNoBackslashEscapes == 0 {\n\t\t\t\tbuf = escapeStringBackslash(buf, v)\n\t\t\t} else {\n\t\t\t\tbuf = escapeStringQuotes(buf, v)\n\t\t\t}\n\t\t\tbuf = append(buf, '\\'')\n\t\tdefault:\n\t\t\treturn \"\", driver.ErrSkip\n\t\t}\n\n\t\tif len(buf)+4 > mc.maxAllowedPacket {\n\t\t\treturn \"\", driver.ErrSkip\n\t\t}\n\t}\n\tif argPos != len(args) {\n\t\treturn \"\", driver.ErrSkip\n\t}\n\treturn string(buf), nil\n}\n\nfunc (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {\n\tif mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\tif len(args) != 0 {\n\t\tif !mc.cfg.InterpolateParams {\n\t\t\treturn nil, driver.ErrSkip\n\t\t}\n\t\t// try to interpolate the parameters to save extra roundtrips for preparing and closing a statement\n\t\tprepared, err := mc.interpolateParams(query, args)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery = prepared\n\t\targs = nil\n\t}\n\tmc.affectedRows = 0\n\tmc.insertId = 0\n\n\terr := mc.exec(query)\n\tif err == nil {\n\t\treturn &mysqlResult{\n\t\t\taffectedRows: int64(mc.affectedRows),\n\t\t\tinsertId:     int64(mc.insertId),\n\t\t}, err\n\t}\n\treturn nil, err\n}\n\n// Internal function to execute commands\nfunc (mc *mysqlConn) exec(query string) error {\n\t// Send command\n\tif err := mc.writeCommandPacketStr(comQuery, query); err != nil {\n\t\treturn err\n\t}\n\n\t// Read Result\n\tresLen, err := mc.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif resLen > 0 {\n\t\t// columns\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// rows\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn mc.discardResults()\n}\n\nfunc (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) {\n\tif mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\tif len(args) != 0 {\n\t\tif !mc.cfg.InterpolateParams {\n\t\t\treturn nil, driver.ErrSkip\n\t\t}\n\t\t// try client-side prepare to reduce roundtrip\n\t\tprepared, err := mc.interpolateParams(query, args)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery = prepared\n\t\targs = nil\n\t}\n\t// Send command\n\terr := mc.writeCommandPacketStr(comQuery, query)\n\tif err == nil {\n\t\t// Read Result\n\t\tvar resLen int\n\t\tresLen, err = mc.readResultSetHeaderPacket()\n\t\tif err == nil {\n\t\t\trows := new(textRows)\n\t\t\trows.mc = mc\n\n\t\t\tif resLen == 0 {\n\t\t\t\trows.rs.done = true\n\n\t\t\t\tswitch err := rows.NextResultSet(); err {\n\t\t\t\tcase nil, io.EOF:\n\t\t\t\t\treturn rows, nil\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Columns\n\t\t\trows.rs.columns, err = mc.readColumns(resLen)\n\t\t\treturn rows, err\n\t\t}\n\t}\n\treturn nil, err\n}\n\n// Gets the value of the given MySQL System Variable\n// The returned byte slice is only valid until the next read\nfunc (mc *mysqlConn) getSystemVar(name string) ([]byte, error) {\n\t// Send command\n\tif err := mc.writeCommandPacketStr(comQuery, \"SELECT @@\"+name); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Read Result\n\tresLen, err := mc.readResultSetHeaderPacket()\n\tif err == nil {\n\t\trows := new(textRows)\n\t\trows.mc = mc\n\t\trows.rs.columns = []mysqlField{{fieldType: fieldTypeVarChar}}\n\n\t\tif resLen > 0 {\n\t\t\t// Columns\n\t\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tdest := make([]driver.Value, resLen)\n\t\tif err = rows.readRow(dest); err == nil {\n\t\t\treturn dest[0].([]byte), mc.readUntilEOF()\n\t\t}\n\t}\n\treturn nil, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/const.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nconst (\n\tminProtocolVersion byte = 10\n\tmaxPacketSize           = 1<<24 - 1\n\ttimeFormat              = \"2006-01-02 15:04:05.999999\"\n)\n\n// MySQL constants documentation:\n// http://dev.mysql.com/doc/internals/en/client-server-protocol.html\n\nconst (\n\tiOK          byte = 0x00\n\tiLocalInFile byte = 0xfb\n\tiEOF         byte = 0xfe\n\tiERR         byte = 0xff\n)\n\n// https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags\ntype clientFlag uint32\n\nconst (\n\tclientLongPassword clientFlag = 1 << iota\n\tclientFoundRows\n\tclientLongFlag\n\tclientConnectWithDB\n\tclientNoSchema\n\tclientCompress\n\tclientODBC\n\tclientLocalFiles\n\tclientIgnoreSpace\n\tclientProtocol41\n\tclientInteractive\n\tclientSSL\n\tclientIgnoreSIGPIPE\n\tclientTransactions\n\tclientReserved\n\tclientSecureConn\n\tclientMultiStatements\n\tclientMultiResults\n\tclientPSMultiResults\n\tclientPluginAuth\n\tclientConnectAttrs\n\tclientPluginAuthLenEncClientData\n\tclientCanHandleExpiredPasswords\n\tclientSessionTrack\n\tclientDeprecateEOF\n)\n\nconst (\n\tcomQuit byte = iota + 1\n\tcomInitDB\n\tcomQuery\n\tcomFieldList\n\tcomCreateDB\n\tcomDropDB\n\tcomRefresh\n\tcomShutdown\n\tcomStatistics\n\tcomProcessInfo\n\tcomConnect\n\tcomProcessKill\n\tcomDebug\n\tcomPing\n\tcomTime\n\tcomDelayedInsert\n\tcomChangeUser\n\tcomBinlogDump\n\tcomTableDump\n\tcomConnectOut\n\tcomRegisterSlave\n\tcomStmtPrepare\n\tcomStmtExecute\n\tcomStmtSendLongData\n\tcomStmtClose\n\tcomStmtReset\n\tcomSetOption\n\tcomStmtFetch\n)\n\n// https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType\nconst (\n\tfieldTypeDecimal byte = iota\n\tfieldTypeTiny\n\tfieldTypeShort\n\tfieldTypeLong\n\tfieldTypeFloat\n\tfieldTypeDouble\n\tfieldTypeNULL\n\tfieldTypeTimestamp\n\tfieldTypeLongLong\n\tfieldTypeInt24\n\tfieldTypeDate\n\tfieldTypeTime\n\tfieldTypeDateTime\n\tfieldTypeYear\n\tfieldTypeNewDate\n\tfieldTypeVarChar\n\tfieldTypeBit\n)\nconst (\n\tfieldTypeJSON byte = iota + 0xf5\n\tfieldTypeNewDecimal\n\tfieldTypeEnum\n\tfieldTypeSet\n\tfieldTypeTinyBLOB\n\tfieldTypeMediumBLOB\n\tfieldTypeLongBLOB\n\tfieldTypeBLOB\n\tfieldTypeVarString\n\tfieldTypeString\n\tfieldTypeGeometry\n)\n\ntype fieldFlag uint16\n\nconst (\n\tflagNotNULL fieldFlag = 1 << iota\n\tflagPriKey\n\tflagUniqueKey\n\tflagMultipleKey\n\tflagBLOB\n\tflagUnsigned\n\tflagZeroFill\n\tflagBinary\n\tflagEnum\n\tflagAutoIncrement\n\tflagTimestamp\n\tflagSet\n\tflagUnknown1\n\tflagUnknown2\n\tflagUnknown3\n\tflagUnknown4\n)\n\n// http://dev.mysql.com/doc/internals/en/status-flags.html\ntype statusFlag uint16\n\nconst (\n\tstatusInTrans statusFlag = 1 << iota\n\tstatusInAutocommit\n\tstatusReserved // Not in documentation\n\tstatusMoreResultsExists\n\tstatusNoGoodIndexUsed\n\tstatusNoIndexUsed\n\tstatusCursorExists\n\tstatusLastRowSent\n\tstatusDbDropped\n\tstatusNoBackslashEscapes\n\tstatusMetadataChanged\n\tstatusQueryWasSlow\n\tstatusPsOutParams\n\tstatusInTransReadonly\n\tstatusSessionStateChanged\n)\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/driver.go",
    "content": "// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\n// Package mysql provides a MySQL driver for Go's database/sql package\n//\n// The driver should be used via the database/sql package:\n//\n//  import \"database/sql\"\n//  import _ \"github.com/go-sql-driver/mysql\"\n//\n//  db, err := sql.Open(\"mysql\", \"user:password@/dbname\")\n//\n// See https://github.com/go-sql-driver/mysql#usage for details\npackage mysql\n\nimport (\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"net\"\n)\n\n// MySQLDriver is exported to make the driver directly accessible.\n// In general the driver is used via the database/sql package.\ntype MySQLDriver struct{}\n\n// DialFunc is a function which can be used to establish the network connection.\n// Custom dial functions must be registered with RegisterDial\ntype DialFunc func(addr string) (net.Conn, error)\n\nvar dials map[string]DialFunc\n\n// RegisterDial registers a custom dial function. It can then be used by the\n// network address mynet(addr), where mynet is the registered new network.\n// addr is passed as a parameter to the dial function.\nfunc RegisterDial(net string, dial DialFunc) {\n\tif dials == nil {\n\t\tdials = make(map[string]DialFunc)\n\t}\n\tdials[net] = dial\n}\n\n// Open new Connection.\n// See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how\n// the DSN string is formated\nfunc (d MySQLDriver) Open(dsn string) (driver.Conn, error) {\n\tvar err error\n\n\t// New mysqlConn\n\tmc := &mysqlConn{\n\t\tmaxAllowedPacket: maxPacketSize,\n\t\tmaxWriteSize:     maxPacketSize - 1,\n\t}\n\tmc.cfg, err = ParseDSN(dsn)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmc.parseTime = mc.cfg.ParseTime\n\tmc.strict = mc.cfg.Strict\n\n\t// Connect to Server\n\tif dial, ok := dials[mc.cfg.Net]; ok {\n\t\tmc.netConn, err = dial(mc.cfg.Addr)\n\t} else {\n\t\tnd := net.Dialer{Timeout: mc.cfg.Timeout}\n\t\tmc.netConn, err = nd.Dial(mc.cfg.Net, mc.cfg.Addr)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Enable TCP Keepalives on TCP connections\n\tif tc, ok := mc.netConn.(*net.TCPConn); ok {\n\t\tif err := tc.SetKeepAlive(true); err != nil {\n\t\t\t// Don't send COM_QUIT before handshake.\n\t\t\tmc.netConn.Close()\n\t\t\tmc.netConn = nil\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tmc.buf = newBuffer(mc.netConn)\n\n\t// Set I/O timeouts\n\tmc.buf.timeout = mc.cfg.ReadTimeout\n\tmc.writeTimeout = mc.cfg.WriteTimeout\n\n\t// Reading Handshake Initialization Packet\n\tcipher, err := mc.readInitPacket()\n\tif err != nil {\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\t// Send Client Authentication Packet\n\tif err = mc.writeAuthPacket(cipher); err != nil {\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\t// Handle response to auth packet, switch methods if possible\n\tif err = handleAuthResult(mc, cipher); err != nil {\n\t\t// Authentication failed and MySQL has already closed the connection\n\t\t// (https://dev.mysql.com/doc/internals/en/authentication-fails.html).\n\t\t// Do not send COM_QUIT, just cleanup and return the error.\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\tif mc.cfg.MaxAllowedPacket > 0 {\n\t\tmc.maxAllowedPacket = mc.cfg.MaxAllowedPacket\n\t} else {\n\t\t// Get max allowed packet size\n\t\tmaxap, err := mc.getSystemVar(\"max_allowed_packet\")\n\t\tif err != nil {\n\t\t\tmc.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tmc.maxAllowedPacket = stringToInt(maxap) - 1\n\t}\n\tif mc.maxAllowedPacket < maxPacketSize {\n\t\tmc.maxWriteSize = mc.maxAllowedPacket\n\t}\n\n\t// Handle DSN Params\n\terr = mc.handleParams()\n\tif err != nil {\n\t\tmc.Close()\n\t\treturn nil, err\n\t}\n\n\treturn mc, nil\n}\n\nfunc handleAuthResult(mc *mysqlConn, oldCipher []byte) error {\n\t// Read Result Packet\n\tcipher, err := mc.readResultOK()\n\tif err == nil {\n\t\treturn nil // auth successful\n\t}\n\n\tif mc.cfg == nil {\n\t\treturn err // auth failed and retry not possible\n\t}\n\n\t// Retry auth if configured to do so.\n\tif mc.cfg.AllowOldPasswords && err == ErrOldPassword {\n\t\t// Retry with old authentication method. Note: there are edge cases\n\t\t// where this should work but doesn't; this is currently \"wontfix\":\n\t\t// https://github.com/go-sql-driver/mysql/issues/184\n\n\t\t// If CLIENT_PLUGIN_AUTH capability is not supported, no new cipher is\n\t\t// sent and we have to keep using the cipher sent in the init packet.\n\t\tif cipher == nil {\n\t\t\tcipher = oldCipher\n\t\t}\n\n\t\tif err = mc.writeOldAuthPacket(cipher); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = mc.readResultOK()\n\t} else if mc.cfg.AllowCleartextPasswords && err == ErrCleartextPassword {\n\t\t// Retry with clear text password for\n\t\t// http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html\n\t\t// http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html\n\t\tif err = mc.writeClearAuthPacket(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = mc.readResultOK()\n\t} else if mc.cfg.AllowNativePasswords && err == ErrNativePassword {\n\t\tif err = mc.writeNativeAuthPacket(cipher); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = mc.readResultOK()\n\t}\n\treturn err\n}\n\nfunc init() {\n\tsql.Register(\"mysql\", &MySQLDriver{})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/dsn.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar (\n\terrInvalidDSNUnescaped       = errors.New(\"invalid DSN: did you forget to escape a param value?\")\n\terrInvalidDSNAddr            = errors.New(\"invalid DSN: network address not terminated (missing closing brace)\")\n\terrInvalidDSNNoSlash         = errors.New(\"invalid DSN: missing the slash separating the database name\")\n\terrInvalidDSNUnsafeCollation = errors.New(\"invalid DSN: interpolateParams can not be used with unsafe collations\")\n)\n\n// Config is a configuration parsed from a DSN string\ntype Config struct {\n\tUser             string            // Username\n\tPasswd           string            // Password (requires User)\n\tNet              string            // Network type\n\tAddr             string            // Network address (requires Net)\n\tDBName           string            // Database name\n\tParams           map[string]string // Connection parameters\n\tCollation        string            // Connection collation\n\tLoc              *time.Location    // Location for time.Time values\n\tMaxAllowedPacket int               // Max packet size allowed\n\tTLSConfig        string            // TLS configuration name\n\ttls              *tls.Config       // TLS configuration\n\tTimeout          time.Duration     // Dial timeout\n\tReadTimeout      time.Duration     // I/O read timeout\n\tWriteTimeout     time.Duration     // I/O write timeout\n\n\tAllowAllFiles           bool // Allow all files to be used with LOAD DATA LOCAL INFILE\n\tAllowCleartextPasswords bool // Allows the cleartext client side plugin\n\tAllowNativePasswords    bool // Allows the native password authentication method\n\tAllowOldPasswords       bool // Allows the old insecure password method\n\tClientFoundRows         bool // Return number of matching rows instead of rows changed\n\tColumnsWithAlias        bool // Prepend table alias to column names\n\tInterpolateParams       bool // Interpolate placeholders into query string\n\tMultiStatements         bool // Allow multiple statements in one query\n\tParseTime               bool // Parse time values to time.Time\n\tStrict                  bool // Return warnings as errors\n}\n\n// FormatDSN formats the given Config into a DSN string which can be passed to\n// the driver.\nfunc (cfg *Config) FormatDSN() string {\n\tvar buf bytes.Buffer\n\n\t// [username[:password]@]\n\tif len(cfg.User) > 0 {\n\t\tbuf.WriteString(cfg.User)\n\t\tif len(cfg.Passwd) > 0 {\n\t\t\tbuf.WriteByte(':')\n\t\t\tbuf.WriteString(cfg.Passwd)\n\t\t}\n\t\tbuf.WriteByte('@')\n\t}\n\n\t// [protocol[(address)]]\n\tif len(cfg.Net) > 0 {\n\t\tbuf.WriteString(cfg.Net)\n\t\tif len(cfg.Addr) > 0 {\n\t\t\tbuf.WriteByte('(')\n\t\t\tbuf.WriteString(cfg.Addr)\n\t\t\tbuf.WriteByte(')')\n\t\t}\n\t}\n\n\t// /dbname\n\tbuf.WriteByte('/')\n\tbuf.WriteString(cfg.DBName)\n\n\t// [?param1=value1&...&paramN=valueN]\n\thasParam := false\n\n\tif cfg.AllowAllFiles {\n\t\thasParam = true\n\t\tbuf.WriteString(\"?allowAllFiles=true\")\n\t}\n\n\tif cfg.AllowCleartextPasswords {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&allowCleartextPasswords=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?allowCleartextPasswords=true\")\n\t\t}\n\t}\n\n\tif cfg.AllowNativePasswords {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&allowNativePasswords=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?allowNativePasswords=true\")\n\t\t}\n\t}\n\n\tif cfg.AllowOldPasswords {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&allowOldPasswords=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?allowOldPasswords=true\")\n\t\t}\n\t}\n\n\tif cfg.ClientFoundRows {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&clientFoundRows=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?clientFoundRows=true\")\n\t\t}\n\t}\n\n\tif col := cfg.Collation; col != defaultCollation && len(col) > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&collation=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?collation=\")\n\t\t}\n\t\tbuf.WriteString(col)\n\t}\n\n\tif cfg.ColumnsWithAlias {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&columnsWithAlias=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?columnsWithAlias=true\")\n\t\t}\n\t}\n\n\tif cfg.InterpolateParams {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&interpolateParams=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?interpolateParams=true\")\n\t\t}\n\t}\n\n\tif cfg.Loc != time.UTC && cfg.Loc != nil {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&loc=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?loc=\")\n\t\t}\n\t\tbuf.WriteString(url.QueryEscape(cfg.Loc.String()))\n\t}\n\n\tif cfg.MultiStatements {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&multiStatements=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?multiStatements=true\")\n\t\t}\n\t}\n\n\tif cfg.ParseTime {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&parseTime=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?parseTime=true\")\n\t\t}\n\t}\n\n\tif cfg.ReadTimeout > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&readTimeout=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?readTimeout=\")\n\t\t}\n\t\tbuf.WriteString(cfg.ReadTimeout.String())\n\t}\n\n\tif cfg.Strict {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&strict=true\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?strict=true\")\n\t\t}\n\t}\n\n\tif cfg.Timeout > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&timeout=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?timeout=\")\n\t\t}\n\t\tbuf.WriteString(cfg.Timeout.String())\n\t}\n\n\tif len(cfg.TLSConfig) > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&tls=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?tls=\")\n\t\t}\n\t\tbuf.WriteString(url.QueryEscape(cfg.TLSConfig))\n\t}\n\n\tif cfg.WriteTimeout > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&writeTimeout=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?writeTimeout=\")\n\t\t}\n\t\tbuf.WriteString(cfg.WriteTimeout.String())\n\t}\n\n\tif cfg.MaxAllowedPacket > 0 {\n\t\tif hasParam {\n\t\t\tbuf.WriteString(\"&maxAllowedPacket=\")\n\t\t} else {\n\t\t\thasParam = true\n\t\t\tbuf.WriteString(\"?maxAllowedPacket=\")\n\t\t}\n\t\tbuf.WriteString(strconv.Itoa(cfg.MaxAllowedPacket))\n\n\t}\n\n\t// other params\n\tif cfg.Params != nil {\n\t\tfor param, value := range cfg.Params {\n\t\t\tif hasParam {\n\t\t\t\tbuf.WriteByte('&')\n\t\t\t} else {\n\t\t\t\thasParam = true\n\t\t\t\tbuf.WriteByte('?')\n\t\t\t}\n\n\t\t\tbuf.WriteString(param)\n\t\t\tbuf.WriteByte('=')\n\t\t\tbuf.WriteString(url.QueryEscape(value))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\n// ParseDSN parses the DSN string to a Config\nfunc ParseDSN(dsn string) (cfg *Config, err error) {\n\t// New config with some default values\n\tcfg = &Config{\n\t\tLoc:       time.UTC,\n\t\tCollation: defaultCollation,\n\t}\n\n\t// [user[:password]@][net[(addr)]]/dbname[?param1=value1&paramN=valueN]\n\t// Find the last '/' (since the password or the net addr might contain a '/')\n\tfoundSlash := false\n\tfor i := len(dsn) - 1; i >= 0; i-- {\n\t\tif dsn[i] == '/' {\n\t\t\tfoundSlash = true\n\t\t\tvar j, k int\n\n\t\t\t// left part is empty if i <= 0\n\t\t\tif i > 0 {\n\t\t\t\t// [username[:password]@][protocol[(address)]]\n\t\t\t\t// Find the last '@' in dsn[:i]\n\t\t\t\tfor j = i; j >= 0; j-- {\n\t\t\t\t\tif dsn[j] == '@' {\n\t\t\t\t\t\t// username[:password]\n\t\t\t\t\t\t// Find the first ':' in dsn[:j]\n\t\t\t\t\t\tfor k = 0; k < j; k++ {\n\t\t\t\t\t\t\tif dsn[k] == ':' {\n\t\t\t\t\t\t\t\tcfg.Passwd = dsn[k+1 : j]\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcfg.User = dsn[:k]\n\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// [protocol[(address)]]\n\t\t\t\t// Find the first '(' in dsn[j+1:i]\n\t\t\t\tfor k = j + 1; k < i; k++ {\n\t\t\t\t\tif dsn[k] == '(' {\n\t\t\t\t\t\t// dsn[i-1] must be == ')' if an address is specified\n\t\t\t\t\t\tif dsn[i-1] != ')' {\n\t\t\t\t\t\t\tif strings.ContainsRune(dsn[k+1:i], ')') {\n\t\t\t\t\t\t\t\treturn nil, errInvalidDSNUnescaped\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn nil, errInvalidDSNAddr\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcfg.Addr = dsn[k+1 : i-1]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcfg.Net = dsn[j+1 : k]\n\t\t\t}\n\n\t\t\t// dbname[?param1=value1&...&paramN=valueN]\n\t\t\t// Find the first '?' in dsn[i+1:]\n\t\t\tfor j = i + 1; j < len(dsn); j++ {\n\t\t\t\tif dsn[j] == '?' {\n\t\t\t\t\tif err = parseDSNParams(cfg, dsn[j+1:]); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tcfg.DBName = dsn[i+1 : j]\n\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif !foundSlash && len(dsn) > 0 {\n\t\treturn nil, errInvalidDSNNoSlash\n\t}\n\n\tif cfg.InterpolateParams && unsafeCollations[cfg.Collation] {\n\t\treturn nil, errInvalidDSNUnsafeCollation\n\t}\n\n\t// Set default network if empty\n\tif cfg.Net == \"\" {\n\t\tcfg.Net = \"tcp\"\n\t}\n\n\t// Set default address if empty\n\tif cfg.Addr == \"\" {\n\t\tswitch cfg.Net {\n\t\tcase \"tcp\":\n\t\t\tcfg.Addr = \"127.0.0.1:3306\"\n\t\tcase \"unix\":\n\t\t\tcfg.Addr = \"/tmp/mysql.sock\"\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"default addr for network '\" + cfg.Net + \"' unknown\")\n\t\t}\n\n\t}\n\n\treturn\n}\n\n// parseDSNParams parses the DSN \"query string\"\n// Values must be url.QueryEscape'ed\nfunc parseDSNParams(cfg *Config, params string) (err error) {\n\tfor _, v := range strings.Split(params, \"&\") {\n\t\tparam := strings.SplitN(v, \"=\", 2)\n\t\tif len(param) != 2 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// cfg params\n\t\tswitch value := param[1]; param[0] {\n\n\t\t// Disable INFILE whitelist / enable all files\n\t\tcase \"allowAllFiles\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowAllFiles, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use cleartext authentication mode (MySQL 5.5.10+)\n\t\tcase \"allowCleartextPasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowCleartextPasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use native password authentication\n\t\tcase \"allowNativePasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowNativePasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use old authentication mode (pre MySQL 4.1)\n\t\tcase \"allowOldPasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowOldPasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Switch \"rowsAffected\" mode\n\t\tcase \"clientFoundRows\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ClientFoundRows, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Collation\n\t\tcase \"collation\":\n\t\t\tcfg.Collation = value\n\t\t\tbreak\n\n\t\tcase \"columnsWithAlias\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ColumnsWithAlias, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Compression\n\t\tcase \"compress\":\n\t\t\treturn errors.New(\"compression not implemented yet\")\n\n\t\t// Enable client side placeholder substitution\n\t\tcase \"interpolateParams\":\n\t\t\tvar isBool bool\n\t\t\tcfg.InterpolateParams, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Time Location\n\t\tcase \"loc\":\n\t\t\tif value, err = url.QueryUnescape(value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcfg.Loc, err = time.LoadLocation(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// multiple statements in one query\n\t\tcase \"multiStatements\":\n\t\t\tvar isBool bool\n\t\t\tcfg.MultiStatements, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// time.Time parsing\n\t\tcase \"parseTime\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ParseTime, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// I/O read Timeout\n\t\tcase \"readTimeout\":\n\t\t\tcfg.ReadTimeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// Strict mode\n\t\tcase \"strict\":\n\t\t\tvar isBool bool\n\t\t\tcfg.Strict, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Dial Timeout\n\t\tcase \"timeout\":\n\t\t\tcfg.Timeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// TLS-Encryption\n\t\tcase \"tls\":\n\t\t\tboolValue, isBool := readBool(value)\n\t\t\tif isBool {\n\t\t\t\tif boolValue {\n\t\t\t\t\tcfg.TLSConfig = \"true\"\n\t\t\t\t\tcfg.tls = &tls.Config{}\n\t\t\t\t} else {\n\t\t\t\t\tcfg.TLSConfig = \"false\"\n\t\t\t\t}\n\t\t\t} else if vl := strings.ToLower(value); vl == \"skip-verify\" {\n\t\t\t\tcfg.TLSConfig = vl\n\t\t\t\tcfg.tls = &tls.Config{InsecureSkipVerify: true}\n\t\t\t} else {\n\t\t\t\tname, err := url.QueryUnescape(value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"invalid value for TLS config name: %v\", err)\n\t\t\t\t}\n\n\t\t\t\tif tlsConfig, ok := tlsConfigRegister[name]; ok {\n\t\t\t\t\tif len(tlsConfig.ServerName) == 0 && !tlsConfig.InsecureSkipVerify {\n\t\t\t\t\t\thost, _, err := net.SplitHostPort(cfg.Addr)\n\t\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t\ttlsConfig.ServerName = host\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcfg.TLSConfig = name\n\t\t\t\t\tcfg.tls = tlsConfig\n\t\t\t\t} else {\n\t\t\t\t\treturn errors.New(\"invalid value / unknown config name: \" + name)\n\t\t\t\t}\n\t\t\t}\n\n\t\t// I/O write Timeout\n\t\tcase \"writeTimeout\":\n\t\t\tcfg.WriteTimeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tcase \"maxAllowedPacket\":\n\t\t\tcfg.MaxAllowedPacket, err = strconv.Atoi(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tdefault:\n\t\t\t// lazy init\n\t\t\tif cfg.Params == nil {\n\t\t\t\tcfg.Params = make(map[string]string)\n\t\t\t}\n\n\t\t\tif cfg.Params[param[0]], err = url.QueryUnescape(value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/errors.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n)\n\n// Various errors the driver might return. Can change between driver versions.\nvar (\n\tErrInvalidConn       = errors.New(\"invalid connection\")\n\tErrMalformPkt        = errors.New(\"malformed packet\")\n\tErrNoTLS             = errors.New(\"TLS requested but server does not support TLS\")\n\tErrCleartextPassword = errors.New(\"this user requires clear text authentication. If you still want to use it, please add 'allowCleartextPasswords=1' to your DSN\")\n\tErrNativePassword    = errors.New(\"this user requires mysql native password authentication.\")\n\tErrOldPassword       = errors.New(\"this user requires old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords\")\n\tErrUnknownPlugin     = errors.New(\"this authentication plugin is not supported\")\n\tErrOldProtocol       = errors.New(\"MySQL server does not support required protocol 41+\")\n\tErrPktSync           = errors.New(\"commands out of sync. You can't run this command now\")\n\tErrPktSyncMul        = errors.New(\"commands out of sync. Did you run multiple statements at once?\")\n\tErrPktTooLarge       = errors.New(\"packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server\")\n\tErrBusyBuffer        = errors.New(\"busy buffer\")\n)\n\nvar errLog = Logger(log.New(os.Stderr, \"[mysql] \", log.Ldate|log.Ltime|log.Lshortfile))\n\n// Logger is used to log critical error messages.\ntype Logger interface {\n\tPrint(v ...interface{})\n}\n\n// SetLogger is used to set the logger for critical errors.\n// The initial logger is os.Stderr.\nfunc SetLogger(logger Logger) error {\n\tif logger == nil {\n\t\treturn errors.New(\"logger is nil\")\n\t}\n\terrLog = logger\n\treturn nil\n}\n\n// MySQLError is an error type which represents a single MySQL error\ntype MySQLError struct {\n\tNumber  uint16\n\tMessage string\n}\n\nfunc (me *MySQLError) Error() string {\n\treturn fmt.Sprintf(\"Error %d: %s\", me.Number, me.Message)\n}\n\n// MySQLWarnings is an error type which represents a group of one or more MySQL\n// warnings\ntype MySQLWarnings []MySQLWarning\n\nfunc (mws MySQLWarnings) Error() string {\n\tvar msg string\n\tfor i, warning := range mws {\n\t\tif i > 0 {\n\t\t\tmsg += \"\\r\\n\"\n\t\t}\n\t\tmsg += fmt.Sprintf(\n\t\t\t\"%s %s: %s\",\n\t\t\twarning.Level,\n\t\t\twarning.Code,\n\t\t\twarning.Message,\n\t\t)\n\t}\n\treturn msg\n}\n\n// MySQLWarning is an error type which represents a single MySQL warning.\n// Warnings are returned in groups only. See MySQLWarnings\ntype MySQLWarning struct {\n\tLevel   string\n\tCode    string\n\tMessage string\n}\n\nfunc (mc *mysqlConn) getWarnings() (err error) {\n\trows, err := mc.Query(\"SHOW WARNINGS\", nil)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar warnings = MySQLWarnings{}\n\tvar values = make([]driver.Value, 3)\n\n\tfor {\n\t\terr = rows.Next(values)\n\t\tswitch err {\n\t\tcase nil:\n\t\t\twarning := MySQLWarning{}\n\n\t\t\tif raw, ok := values[0].([]byte); ok {\n\t\t\t\twarning.Level = string(raw)\n\t\t\t} else {\n\t\t\t\twarning.Level = fmt.Sprintf(\"%s\", values[0])\n\t\t\t}\n\t\t\tif raw, ok := values[1].([]byte); ok {\n\t\t\t\twarning.Code = string(raw)\n\t\t\t} else {\n\t\t\t\twarning.Code = fmt.Sprintf(\"%s\", values[1])\n\t\t\t}\n\t\t\tif raw, ok := values[2].([]byte); ok {\n\t\t\t\twarning.Message = string(raw)\n\t\t\t} else {\n\t\t\t\twarning.Message = fmt.Sprintf(\"%s\", values[0])\n\t\t\t}\n\n\t\t\twarnings = append(warnings, warning)\n\n\t\tcase io.EOF:\n\t\t\treturn warnings\n\n\t\tdefault:\n\t\t\trows.Close()\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/infile.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tfileRegister       map[string]bool\n\tfileRegisterLock   sync.RWMutex\n\treaderRegister     map[string]func() io.Reader\n\treaderRegisterLock sync.RWMutex\n)\n\n// RegisterLocalFile adds the given file to the file whitelist,\n// so that it can be used by \"LOAD DATA LOCAL INFILE <filepath>\".\n// Alternatively you can allow the use of all local files with\n// the DSN parameter 'allowAllFiles=true'\n//\n//  filePath := \"/home/gopher/data.csv\"\n//  mysql.RegisterLocalFile(filePath)\n//  err := db.Exec(\"LOAD DATA LOCAL INFILE '\" + filePath + \"' INTO TABLE foo\")\n//  if err != nil {\n//  ...\n//\nfunc RegisterLocalFile(filePath string) {\n\tfileRegisterLock.Lock()\n\t// lazy map init\n\tif fileRegister == nil {\n\t\tfileRegister = make(map[string]bool)\n\t}\n\n\tfileRegister[strings.Trim(filePath, `\"`)] = true\n\tfileRegisterLock.Unlock()\n}\n\n// DeregisterLocalFile removes the given filepath from the whitelist.\nfunc DeregisterLocalFile(filePath string) {\n\tfileRegisterLock.Lock()\n\tdelete(fileRegister, strings.Trim(filePath, `\"`))\n\tfileRegisterLock.Unlock()\n}\n\n// RegisterReaderHandler registers a handler function which is used\n// to receive a io.Reader.\n// The Reader can be used by \"LOAD DATA LOCAL INFILE Reader::<name>\".\n// If the handler returns a io.ReadCloser Close() is called when the\n// request is finished.\n//\n//  mysql.RegisterReaderHandler(\"data\", func() io.Reader {\n//  \tvar csvReader io.Reader // Some Reader that returns CSV data\n//  \t... // Open Reader here\n//  \treturn csvReader\n//  })\n//  err := db.Exec(\"LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo\")\n//  if err != nil {\n//  ...\n//\nfunc RegisterReaderHandler(name string, handler func() io.Reader) {\n\treaderRegisterLock.Lock()\n\t// lazy map init\n\tif readerRegister == nil {\n\t\treaderRegister = make(map[string]func() io.Reader)\n\t}\n\n\treaderRegister[name] = handler\n\treaderRegisterLock.Unlock()\n}\n\n// DeregisterReaderHandler removes the ReaderHandler function with\n// the given name from the registry.\nfunc DeregisterReaderHandler(name string) {\n\treaderRegisterLock.Lock()\n\tdelete(readerRegister, name)\n\treaderRegisterLock.Unlock()\n}\n\nfunc deferredClose(err *error, closer io.Closer) {\n\tcloseErr := closer.Close()\n\tif *err == nil {\n\t\t*err = closeErr\n\t}\n}\n\nfunc (mc *mysqlConn) handleInFileRequest(name string) (err error) {\n\tvar rdr io.Reader\n\tvar data []byte\n\tpacketSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP\n\tif mc.maxWriteSize < packetSize {\n\t\tpacketSize = mc.maxWriteSize\n\t}\n\n\tif idx := strings.Index(name, \"Reader::\"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader\n\t\t// The server might return an an absolute path. See issue #355.\n\t\tname = name[idx+8:]\n\n\t\treaderRegisterLock.RLock()\n\t\thandler, inMap := readerRegister[name]\n\t\treaderRegisterLock.RUnlock()\n\n\t\tif inMap {\n\t\t\trdr = handler()\n\t\t\tif rdr != nil {\n\t\t\t\tif cl, ok := rdr.(io.Closer); ok {\n\t\t\t\t\tdefer deferredClose(&err, cl)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terr = fmt.Errorf(\"Reader '%s' is <nil>\", name)\n\t\t\t}\n\t\t} else {\n\t\t\terr = fmt.Errorf(\"Reader '%s' is not registered\", name)\n\t\t}\n\t} else { // File\n\t\tname = strings.Trim(name, `\"`)\n\t\tfileRegisterLock.RLock()\n\t\tfr := fileRegister[name]\n\t\tfileRegisterLock.RUnlock()\n\t\tif mc.cfg.AllowAllFiles || fr {\n\t\t\tvar file *os.File\n\t\t\tvar fi os.FileInfo\n\n\t\t\tif file, err = os.Open(name); err == nil {\n\t\t\t\tdefer deferredClose(&err, file)\n\n\t\t\t\t// get file size\n\t\t\t\tif fi, err = file.Stat(); err == nil {\n\t\t\t\t\trdr = file\n\t\t\t\t\tif fileSize := int(fi.Size()); fileSize < packetSize {\n\t\t\t\t\t\tpacketSize = fileSize\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\terr = fmt.Errorf(\"local file '%s' is not registered\", name)\n\t\t}\n\t}\n\n\t// send content packets\n\tif err == nil {\n\t\tdata := make([]byte, 4+packetSize)\n\t\tvar n int\n\t\tfor err == nil {\n\t\t\tn, err = rdr.Read(data[4:])\n\t\t\tif n > 0 {\n\t\t\t\tif ioErr := mc.writePacket(data[:4+n]); ioErr != nil {\n\t\t\t\t\treturn ioErr\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err == io.EOF {\n\t\t\terr = nil\n\t\t}\n\t}\n\n\t// send empty packet (termination)\n\tif data == nil {\n\t\tdata = make([]byte, 4)\n\t}\n\tif ioErr := mc.writePacket(data[:4]); ioErr != nil {\n\t\treturn ioErr\n\t}\n\n\t// read OK packet\n\tif err == nil {\n\t\t_, err = mc.readResultOK()\n\t\treturn err\n\t}\n\n\tmc.readPacket()\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/packets.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"time\"\n)\n\n// Packets documentation:\n// http://dev.mysql.com/doc/internals/en/client-server-protocol.html\n\n// Read packet to buffer 'data'\nfunc (mc *mysqlConn) readPacket() ([]byte, error) {\n\tvar prevData []byte\n\tfor {\n\t\t// read packet header\n\t\tdata, err := mc.buf.readNext(4)\n\t\tif err != nil {\n\t\t\terrLog.Print(err)\n\t\t\tmc.Close()\n\t\t\treturn nil, driver.ErrBadConn\n\t\t}\n\n\t\t// packet length [24 bit]\n\t\tpktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)\n\n\t\t// check packet sync [8 bit]\n\t\tif data[3] != mc.sequence {\n\t\t\tif data[3] > mc.sequence {\n\t\t\t\treturn nil, ErrPktSyncMul\n\t\t\t}\n\t\t\treturn nil, ErrPktSync\n\t\t}\n\t\tmc.sequence++\n\n\t\t// packets with length 0 terminate a previous packet which is a\n\t\t// multiple of (2^24)−1 bytes long\n\t\tif pktLen == 0 {\n\t\t\t// there was no previous packet\n\t\t\tif prevData == nil {\n\t\t\t\terrLog.Print(ErrMalformPkt)\n\t\t\t\tmc.Close()\n\t\t\t\treturn nil, driver.ErrBadConn\n\t\t\t}\n\n\t\t\treturn prevData, nil\n\t\t}\n\n\t\t// read packet body [pktLen bytes]\n\t\tdata, err = mc.buf.readNext(pktLen)\n\t\tif err != nil {\n\t\t\terrLog.Print(err)\n\t\t\tmc.Close()\n\t\t\treturn nil, driver.ErrBadConn\n\t\t}\n\n\t\t// return data if this was the last packet\n\t\tif pktLen < maxPacketSize {\n\t\t\t// zero allocations for non-split packets\n\t\t\tif prevData == nil {\n\t\t\t\treturn data, nil\n\t\t\t}\n\n\t\t\treturn append(prevData, data...), nil\n\t\t}\n\n\t\tprevData = append(prevData, data...)\n\t}\n}\n\n// Write packet buffer 'data'\nfunc (mc *mysqlConn) writePacket(data []byte) error {\n\tpktLen := len(data) - 4\n\n\tif pktLen > mc.maxAllowedPacket {\n\t\treturn ErrPktTooLarge\n\t}\n\n\tfor {\n\t\tvar size int\n\t\tif pktLen >= maxPacketSize {\n\t\t\tdata[0] = 0xff\n\t\t\tdata[1] = 0xff\n\t\t\tdata[2] = 0xff\n\t\t\tsize = maxPacketSize\n\t\t} else {\n\t\t\tdata[0] = byte(pktLen)\n\t\t\tdata[1] = byte(pktLen >> 8)\n\t\t\tdata[2] = byte(pktLen >> 16)\n\t\t\tsize = pktLen\n\t\t}\n\t\tdata[3] = mc.sequence\n\n\t\t// Write packet\n\t\tif mc.writeTimeout > 0 {\n\t\t\tif err := mc.netConn.SetWriteDeadline(time.Now().Add(mc.writeTimeout)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tn, err := mc.netConn.Write(data[:4+size])\n\t\tif err == nil && n == 4+size {\n\t\t\tmc.sequence++\n\t\t\tif size != maxPacketSize {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tpktLen -= size\n\t\t\tdata = data[size:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle error\n\t\tif err == nil { // n != len(data)\n\t\t\terrLog.Print(ErrMalformPkt)\n\t\t} else {\n\t\t\terrLog.Print(err)\n\t\t}\n\t\treturn driver.ErrBadConn\n\t}\n}\n\n/******************************************************************************\n*                           Initialisation Process                            *\n******************************************************************************/\n\n// Handshake Initialization Packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake\nfunc (mc *mysqlConn) readInitPacket() ([]byte, error) {\n\tdata, err := mc.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif data[0] == iERR {\n\t\treturn nil, mc.handleErrorPacket(data)\n\t}\n\n\t// protocol version [1 byte]\n\tif data[0] < minProtocolVersion {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"unsupported protocol version %d. Version %d or higher is required\",\n\t\t\tdata[0],\n\t\t\tminProtocolVersion,\n\t\t)\n\t}\n\n\t// server version [null terminated string]\n\t// connection id [4 bytes]\n\tpos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4\n\n\t// first part of the password cipher [8 bytes]\n\tcipher := data[pos : pos+8]\n\n\t// (filler) always 0x00 [1 byte]\n\tpos += 8 + 1\n\n\t// capability flags (lower 2 bytes) [2 bytes]\n\tmc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\tif mc.flags&clientProtocol41 == 0 {\n\t\treturn nil, ErrOldProtocol\n\t}\n\tif mc.flags&clientSSL == 0 && mc.cfg.tls != nil {\n\t\treturn nil, ErrNoTLS\n\t}\n\tpos += 2\n\n\tif len(data) > pos {\n\t\t// character set [1 byte]\n\t\t// status flags [2 bytes]\n\t\t// capability flags (upper 2 bytes) [2 bytes]\n\t\t// length of auth-plugin-data [1 byte]\n\t\t// reserved (all [00]) [10 bytes]\n\t\tpos += 1 + 2 + 2 + 1 + 10\n\n\t\t// second part of the password cipher [mininum 13 bytes],\n\t\t// where len=MAX(13, length of auth-plugin-data - 8)\n\t\t//\n\t\t// The web documentation is ambiguous about the length. However,\n\t\t// according to mysql-5.7/sql/auth/sql_authentication.cc line 538,\n\t\t// the 13th byte is \"\\0 byte, terminating the second part of\n\t\t// a scramble\". So the second part of the password cipher is\n\t\t// a NULL terminated string that's at least 13 bytes with the\n\t\t// last byte being NULL.\n\t\t//\n\t\t// The official Python library uses the fixed length 12\n\t\t// which seems to work but technically could have a hidden bug.\n\t\tcipher = append(cipher, data[pos:pos+12]...)\n\n\t\t// TODO: Verify string termination\n\t\t// EOF if version (>= 5.5.7 and < 5.5.10) or (>= 5.6.0 and < 5.6.2)\n\t\t// \\NUL otherwise\n\t\t//\n\t\t//if data[len(data)-1] == 0 {\n\t\t//\treturn\n\t\t//}\n\t\t//return ErrMalformPkt\n\n\t\t// make a memory safe copy of the cipher slice\n\t\tvar b [20]byte\n\t\tcopy(b[:], cipher)\n\t\treturn b[:], nil\n\t}\n\n\t// make a memory safe copy of the cipher slice\n\tvar b [8]byte\n\tcopy(b[:], cipher)\n\treturn b[:], nil\n}\n\n// Client Authentication Packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse\nfunc (mc *mysqlConn) writeAuthPacket(cipher []byte) error {\n\t// Adjust client flags based on server support\n\tclientFlags := clientProtocol41 |\n\t\tclientSecureConn |\n\t\tclientLongPassword |\n\t\tclientTransactions |\n\t\tclientLocalFiles |\n\t\tclientPluginAuth |\n\t\tclientMultiResults |\n\t\tmc.flags&clientLongFlag\n\n\tif mc.cfg.ClientFoundRows {\n\t\tclientFlags |= clientFoundRows\n\t}\n\n\t// To enable TLS / SSL\n\tif mc.cfg.tls != nil {\n\t\tclientFlags |= clientSSL\n\t}\n\n\tif mc.cfg.MultiStatements {\n\t\tclientFlags |= clientMultiStatements\n\t}\n\n\t// User Password\n\tscrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd))\n\n\tpktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + 1 + len(scrambleBuff) + 21 + 1\n\n\t// To specify a db name\n\tif n := len(mc.cfg.DBName); n > 0 {\n\t\tclientFlags |= clientConnectWithDB\n\t\tpktLen += n + 1\n\t}\n\n\t// Calculate packet length and get buffer with that size\n\tdata := mc.buf.takeSmallBuffer(pktLen + 4)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// ClientFlags [32 bit]\n\tdata[4] = byte(clientFlags)\n\tdata[5] = byte(clientFlags >> 8)\n\tdata[6] = byte(clientFlags >> 16)\n\tdata[7] = byte(clientFlags >> 24)\n\n\t// MaxPacketSize [32 bit] (none)\n\tdata[8] = 0x00\n\tdata[9] = 0x00\n\tdata[10] = 0x00\n\tdata[11] = 0x00\n\n\t// Charset [1 byte]\n\tvar found bool\n\tdata[12], found = collations[mc.cfg.Collation]\n\tif !found {\n\t\t// Note possibility for false negatives:\n\t\t// could be triggered  although the collation is valid if the\n\t\t// collations map does not contain entries the server supports.\n\t\treturn errors.New(\"unknown collation\")\n\t}\n\n\t// SSL Connection Request Packet\n\t// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest\n\tif mc.cfg.tls != nil {\n\t\t// Send TLS / SSL request packet\n\t\tif err := mc.writePacket(data[:(4+4+1+23)+4]); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Switch to TLS\n\t\ttlsConn := tls.Client(mc.netConn, mc.cfg.tls)\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmc.netConn = tlsConn\n\t\tmc.buf.nc = tlsConn\n\t}\n\n\t// Filler [23 bytes] (all 0x00)\n\tpos := 13\n\tfor ; pos < 13+23; pos++ {\n\t\tdata[pos] = 0\n\t}\n\n\t// User [null terminated string]\n\tif len(mc.cfg.User) > 0 {\n\t\tpos += copy(data[pos:], mc.cfg.User)\n\t}\n\tdata[pos] = 0x00\n\tpos++\n\n\t// ScrambleBuffer [length encoded integer]\n\tdata[pos] = byte(len(scrambleBuff))\n\tpos += 1 + copy(data[pos+1:], scrambleBuff)\n\n\t// Databasename [null terminated string]\n\tif len(mc.cfg.DBName) > 0 {\n\t\tpos += copy(data[pos:], mc.cfg.DBName)\n\t\tdata[pos] = 0x00\n\t\tpos++\n\t}\n\n\t// Assume native client during response\n\tpos += copy(data[pos:], \"mysql_native_password\")\n\tdata[pos] = 0x00\n\n\t// Send Auth packet\n\treturn mc.writePacket(data)\n}\n\n//  Client old authentication packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse\nfunc (mc *mysqlConn) writeOldAuthPacket(cipher []byte) error {\n\t// User password\n\tscrambleBuff := scrambleOldPassword(cipher, []byte(mc.cfg.Passwd))\n\n\t// Calculate the packet length and add a tailing 0\n\tpktLen := len(scrambleBuff) + 1\n\tdata := mc.buf.takeSmallBuffer(4 + pktLen)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add the scrambled password [null terminated string]\n\tcopy(data[4:], scrambleBuff)\n\tdata[4+pktLen-1] = 0x00\n\n\treturn mc.writePacket(data)\n}\n\n//  Client clear text authentication packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse\nfunc (mc *mysqlConn) writeClearAuthPacket() error {\n\t// Calculate the packet length and add a tailing 0\n\tpktLen := len(mc.cfg.Passwd) + 1\n\tdata := mc.buf.takeSmallBuffer(4 + pktLen)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add the clear password [null terminated string]\n\tcopy(data[4:], mc.cfg.Passwd)\n\tdata[4+pktLen-1] = 0x00\n\n\treturn mc.writePacket(data)\n}\n\n//  Native password authentication method\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse\nfunc (mc *mysqlConn) writeNativeAuthPacket(cipher []byte) error {\n\tscrambleBuff := scramblePassword(cipher, []byte(mc.cfg.Passwd))\n\n\t// Calculate the packet length and add a tailing 0\n\tpktLen := len(scrambleBuff)\n\tdata := mc.buf.takeSmallBuffer(4 + pktLen)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add the scramble\n\tcopy(data[4:], scrambleBuff)\n\n\treturn mc.writePacket(data)\n}\n\n/******************************************************************************\n*                             Command Packets                                 *\n******************************************************************************/\n\nfunc (mc *mysqlConn) writeCommandPacket(command byte) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tdata := mc.buf.takeSmallBuffer(4 + 1)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\nfunc (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tpktLen := 1 + len(arg)\n\tdata := mc.buf.takeBuffer(pktLen + 4)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Add arg\n\tcopy(data[5:], arg)\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\nfunc (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tdata := mc.buf.takeSmallBuffer(4 + 1 + 4)\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Add arg [32 bit]\n\tdata[5] = byte(arg)\n\tdata[6] = byte(arg >> 8)\n\tdata[7] = byte(arg >> 16)\n\tdata[8] = byte(arg >> 24)\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\n/******************************************************************************\n*                              Result Packets                                 *\n******************************************************************************/\n\n// Returns error if Packet is not an 'Result OK'-Packet\nfunc (mc *mysqlConn) readResultOK() ([]byte, error) {\n\tdata, err := mc.readPacket()\n\tif err == nil {\n\t\t// packet indicator\n\t\tswitch data[0] {\n\n\t\tcase iOK:\n\t\t\treturn nil, mc.handleOkPacket(data)\n\n\t\tcase iEOF:\n\t\t\tif len(data) > 1 {\n\t\t\t\tpluginEndIndex := bytes.IndexByte(data, 0x00)\n\t\t\t\tplugin := string(data[1:pluginEndIndex])\n\t\t\t\tcipher := data[pluginEndIndex+1 : len(data)-1]\n\n\t\t\t\tif plugin == \"mysql_old_password\" {\n\t\t\t\t\t// using old_passwords\n\t\t\t\t\treturn cipher, ErrOldPassword\n\t\t\t\t} else if plugin == \"mysql_clear_password\" {\n\t\t\t\t\t// using clear text password\n\t\t\t\t\treturn cipher, ErrCleartextPassword\n\t\t\t\t} else if plugin == \"mysql_native_password\" {\n\t\t\t\t\t// using mysql default authentication method\n\t\t\t\t\treturn cipher, ErrNativePassword\n\t\t\t\t} else {\n\t\t\t\t\treturn cipher, ErrUnknownPlugin\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest\n\t\t\t\treturn nil, ErrOldPassword\n\t\t\t}\n\n\t\tdefault: // Error otherwise\n\t\t\treturn nil, mc.handleErrorPacket(data)\n\t\t}\n\t}\n\treturn nil, err\n}\n\n// Result Set Header Packet\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset\nfunc (mc *mysqlConn) readResultSetHeaderPacket() (int, error) {\n\tdata, err := mc.readPacket()\n\tif err == nil {\n\t\tswitch data[0] {\n\n\t\tcase iOK:\n\t\t\treturn 0, mc.handleOkPacket(data)\n\n\t\tcase iERR:\n\t\t\treturn 0, mc.handleErrorPacket(data)\n\n\t\tcase iLocalInFile:\n\t\t\treturn 0, mc.handleInFileRequest(string(data[1:]))\n\t\t}\n\n\t\t// column count\n\t\tnum, _, n := readLengthEncodedInteger(data)\n\t\tif n-len(data) == 0 {\n\t\t\treturn int(num), nil\n\t\t}\n\n\t\treturn 0, ErrMalformPkt\n\t}\n\treturn 0, err\n}\n\n// Error Packet\n// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-ERR_Packet\nfunc (mc *mysqlConn) handleErrorPacket(data []byte) error {\n\tif data[0] != iERR {\n\t\treturn ErrMalformPkt\n\t}\n\n\t// 0xff [1 byte]\n\n\t// Error Number [16 bit uint]\n\terrno := binary.LittleEndian.Uint16(data[1:3])\n\n\tpos := 3\n\n\t// SQL State [optional: # + 5bytes string]\n\tif data[3] == 0x23 {\n\t\t//sqlstate := string(data[4 : 4+5])\n\t\tpos = 9\n\t}\n\n\t// Error Message [string]\n\treturn &MySQLError{\n\t\tNumber:  errno,\n\t\tMessage: string(data[pos:]),\n\t}\n}\n\nfunc readStatus(b []byte) statusFlag {\n\treturn statusFlag(b[0]) | statusFlag(b[1])<<8\n}\n\n// Ok Packet\n// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-OK_Packet\nfunc (mc *mysqlConn) handleOkPacket(data []byte) error {\n\tvar n, m int\n\n\t// 0x00 [1 byte]\n\n\t// Affected rows [Length Coded Binary]\n\tmc.affectedRows, _, n = readLengthEncodedInteger(data[1:])\n\n\t// Insert id [Length Coded Binary]\n\tmc.insertId, _, m = readLengthEncodedInteger(data[1+n:])\n\n\t// server_status [2 bytes]\n\tmc.status = readStatus(data[1+n+m : 1+n+m+2])\n\tif mc.status&statusMoreResultsExists != 0 {\n\t\treturn nil\n\t}\n\n\t// warning count [2 bytes]\n\tif !mc.strict {\n\t\treturn nil\n\t}\n\n\tpos := 1 + n + m + 2\n\tif binary.LittleEndian.Uint16(data[pos:pos+2]) > 0 {\n\t\treturn mc.getWarnings()\n\t}\n\treturn nil\n}\n\n// Read Packets as Field Packets until EOF-Packet or an Error appears\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnDefinition41\nfunc (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) {\n\tcolumns := make([]mysqlField, count)\n\n\tfor i := 0; ; i++ {\n\t\tdata, err := mc.readPacket()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// EOF Packet\n\t\tif data[0] == iEOF && (len(data) == 5 || len(data) == 1) {\n\t\t\tif i == count {\n\t\t\t\treturn columns, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"column count mismatch n:%d len:%d\", count, len(columns))\n\t\t}\n\n\t\t// Catalog\n\t\tpos, err := skipLengthEncodedString(data)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Database [len coded string]\n\t\tn, err := skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpos += n\n\n\t\t// Table [len coded string]\n\t\tif mc.cfg.ColumnsWithAlias {\n\t\t\ttableName, _, n, err := readLengthEncodedString(data[pos:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tpos += n\n\t\t\tcolumns[i].tableName = string(tableName)\n\t\t} else {\n\t\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tpos += n\n\t\t}\n\n\t\t// Original table [len coded string]\n\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpos += n\n\n\t\t// Name [len coded string]\n\t\tname, _, n, err := readLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcolumns[i].name = string(name)\n\t\tpos += n\n\n\t\t// Original name [len coded string]\n\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Filler [uint8]\n\t\t// Charset [charset, collation uint8]\n\t\t// Length [uint32]\n\t\tpos += n + 1 + 2 + 4\n\n\t\t// Field type [uint8]\n\t\tcolumns[i].fieldType = data[pos]\n\t\tpos++\n\n\t\t// Flags [uint16]\n\t\tcolumns[i].flags = fieldFlag(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\t\tpos += 2\n\n\t\t// Decimals [uint8]\n\t\tcolumns[i].decimals = data[pos]\n\t\t//pos++\n\n\t\t// Default value [len coded binary]\n\t\t//if pos < len(data) {\n\t\t//\tdefaultVal, _, err = bytesToLengthCodedBinary(data[pos:])\n\t\t//}\n\t}\n}\n\n// Read Packets as Field Packets until EOF-Packet or an Error appears\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::ResultsetRow\nfunc (rows *textRows) readRow(dest []driver.Value) error {\n\tmc := rows.mc\n\n\tif rows.rs.done {\n\t\treturn io.EOF\n\t}\n\n\tdata, err := mc.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// EOF Packet\n\tif data[0] == iEOF && len(data) == 5 {\n\t\t// server_status [2 bytes]\n\t\trows.mc.status = readStatus(data[3:])\n\t\trows.rs.done = true\n\t\tif !rows.HasNextResultSet() {\n\t\t\trows.mc = nil\n\t\t}\n\t\treturn io.EOF\n\t}\n\tif data[0] == iERR {\n\t\trows.mc = nil\n\t\treturn mc.handleErrorPacket(data)\n\t}\n\n\t// RowSet Packet\n\tvar n int\n\tvar isNull bool\n\tpos := 0\n\n\tfor i := range dest {\n\t\t// Read bytes and convert to string\n\t\tdest[i], isNull, n, err = readLengthEncodedString(data[pos:])\n\t\tpos += n\n\t\tif err == nil {\n\t\t\tif !isNull {\n\t\t\t\tif !mc.parseTime {\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\tswitch rows.rs.columns[i].fieldType {\n\t\t\t\t\tcase fieldTypeTimestamp, fieldTypeDateTime,\n\t\t\t\t\t\tfieldTypeDate, fieldTypeNewDate:\n\t\t\t\t\t\tdest[i], err = parseDateTime(\n\t\t\t\t\t\t\tstring(dest[i].([]byte)),\n\t\t\t\t\t\t\tmc.cfg.Loc,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tdest[i] = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\treturn err // err != nil\n\t}\n\n\treturn nil\n}\n\n// Reads Packets until EOF-Packet or an Error appears. Returns count of Packets read\nfunc (mc *mysqlConn) readUntilEOF() error {\n\tfor {\n\t\tdata, err := mc.readPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tswitch data[0] {\n\t\tcase iERR:\n\t\t\treturn mc.handleErrorPacket(data)\n\t\tcase iEOF:\n\t\t\tif len(data) == 5 {\n\t\t\t\tmc.status = readStatus(data[3:])\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\n/******************************************************************************\n*                           Prepared Statements                               *\n******************************************************************************/\n\n// Prepare Result Packets\n// http://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html\nfunc (stmt *mysqlStmt) readPrepareResultPacket() (uint16, error) {\n\tdata, err := stmt.mc.readPacket()\n\tif err == nil {\n\t\t// packet indicator [1 byte]\n\t\tif data[0] != iOK {\n\t\t\treturn 0, stmt.mc.handleErrorPacket(data)\n\t\t}\n\n\t\t// statement id [4 bytes]\n\t\tstmt.id = binary.LittleEndian.Uint32(data[1:5])\n\n\t\t// Column count [16 bit uint]\n\t\tcolumnCount := binary.LittleEndian.Uint16(data[5:7])\n\n\t\t// Param count [16 bit uint]\n\t\tstmt.paramCount = int(binary.LittleEndian.Uint16(data[7:9]))\n\n\t\t// Reserved [8 bit]\n\n\t\t// Warning count [16 bit uint]\n\t\tif !stmt.mc.strict {\n\t\t\treturn columnCount, nil\n\t\t}\n\n\t\t// Check for warnings count > 0, only available in MySQL > 4.1\n\t\tif len(data) >= 12 && binary.LittleEndian.Uint16(data[10:12]) > 0 {\n\t\t\treturn columnCount, stmt.mc.getWarnings()\n\t\t}\n\t\treturn columnCount, nil\n\t}\n\treturn 0, err\n}\n\n// http://dev.mysql.com/doc/internals/en/com-stmt-send-long-data.html\nfunc (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error {\n\tmaxLen := stmt.mc.maxAllowedPacket - 1\n\tpktLen := maxLen\n\n\t// After the header (bytes 0-3) follows before the data:\n\t// 1 byte command\n\t// 4 bytes stmtID\n\t// 2 bytes paramID\n\tconst dataOffset = 1 + 4 + 2\n\n\t// Can not use the write buffer since\n\t// a) the buffer is too small\n\t// b) it is in use\n\tdata := make([]byte, 4+1+4+2+len(arg))\n\n\tcopy(data[4+dataOffset:], arg)\n\n\tfor argLen := len(arg); argLen > 0; argLen -= pktLen - dataOffset {\n\t\tif dataOffset+argLen < maxLen {\n\t\t\tpktLen = dataOffset + argLen\n\t\t}\n\n\t\tstmt.mc.sequence = 0\n\t\t// Add command byte [1 byte]\n\t\tdata[4] = comStmtSendLongData\n\n\t\t// Add stmtID [32 bit]\n\t\tdata[5] = byte(stmt.id)\n\t\tdata[6] = byte(stmt.id >> 8)\n\t\tdata[7] = byte(stmt.id >> 16)\n\t\tdata[8] = byte(stmt.id >> 24)\n\n\t\t// Add paramID [16 bit]\n\t\tdata[9] = byte(paramID)\n\t\tdata[10] = byte(paramID >> 8)\n\n\t\t// Send CMD packet\n\t\terr := stmt.mc.writePacket(data[:4+pktLen])\n\t\tif err == nil {\n\t\t\tdata = data[pktLen-dataOffset:]\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\n\t}\n\n\t// Reset Packet Sequence\n\tstmt.mc.sequence = 0\n\treturn nil\n}\n\n// Execute Prepared Statement\n// http://dev.mysql.com/doc/internals/en/com-stmt-execute.html\nfunc (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {\n\tif len(args) != stmt.paramCount {\n\t\treturn fmt.Errorf(\n\t\t\t\"argument count mismatch (got: %d; has: %d)\",\n\t\t\tlen(args),\n\t\t\tstmt.paramCount,\n\t\t)\n\t}\n\n\tconst minPktLen = 4 + 1 + 4 + 1 + 4\n\tmc := stmt.mc\n\n\t// Reset packet-sequence\n\tmc.sequence = 0\n\n\tvar data []byte\n\n\tif len(args) == 0 {\n\t\tdata = mc.buf.takeBuffer(minPktLen)\n\t} else {\n\t\tdata = mc.buf.takeCompleteBuffer()\n\t}\n\tif data == nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\terrLog.Print(ErrBusyBuffer)\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// command [1 byte]\n\tdata[4] = comStmtExecute\n\n\t// statement_id [4 bytes]\n\tdata[5] = byte(stmt.id)\n\tdata[6] = byte(stmt.id >> 8)\n\tdata[7] = byte(stmt.id >> 16)\n\tdata[8] = byte(stmt.id >> 24)\n\n\t// flags (0: CURSOR_TYPE_NO_CURSOR) [1 byte]\n\tdata[9] = 0x00\n\n\t// iteration_count (uint32(1)) [4 bytes]\n\tdata[10] = 0x01\n\tdata[11] = 0x00\n\tdata[12] = 0x00\n\tdata[13] = 0x00\n\n\tif len(args) > 0 {\n\t\tpos := minPktLen\n\n\t\tvar nullMask []byte\n\t\tif maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= len(data) {\n\t\t\t// buffer has to be extended but we don't know by how much so\n\t\t\t// we depend on append after all data with known sizes fit.\n\t\t\t// We stop at that because we deal with a lot of columns here\n\t\t\t// which makes the required allocation size hard to guess.\n\t\t\ttmp := make([]byte, pos+maskLen+typesLen)\n\t\t\tcopy(tmp[:pos], data[:pos])\n\t\t\tdata = tmp\n\t\t\tnullMask = data[pos : pos+maskLen]\n\t\t\tpos += maskLen\n\t\t} else {\n\t\t\tnullMask = data[pos : pos+maskLen]\n\t\t\tfor i := 0; i < maskLen; i++ {\n\t\t\t\tnullMask[i] = 0\n\t\t\t}\n\t\t\tpos += maskLen\n\t\t}\n\n\t\t// newParameterBoundFlag 1 [1 byte]\n\t\tdata[pos] = 0x01\n\t\tpos++\n\n\t\t// type of each parameter [len(args)*2 bytes]\n\t\tparamTypes := data[pos:]\n\t\tpos += len(args) * 2\n\n\t\t// value of each parameter [n bytes]\n\t\tparamValues := data[pos:pos]\n\t\tvaluesCap := cap(paramValues)\n\n\t\tfor i, arg := range args {\n\t\t\t// build NULL-bitmap\n\t\t\tif arg == nil {\n\t\t\t\tnullMask[i/8] |= 1 << (uint(i) & 7)\n\t\t\t\tparamTypes[i+i] = fieldTypeNULL\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// cache types and values\n\t\t\tswitch v := arg.(type) {\n\t\t\tcase int64:\n\t\t\t\tparamTypes[i+i] = fieldTypeLongLong\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif cap(paramValues)-len(paramValues)-8 >= 0 {\n\t\t\t\t\tparamValues = paramValues[:len(paramValues)+8]\n\t\t\t\t\tbinary.LittleEndian.PutUint64(\n\t\t\t\t\t\tparamValues[len(paramValues)-8:],\n\t\t\t\t\t\tuint64(v),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues,\n\t\t\t\t\t\tuint64ToBytes(uint64(v))...,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tcase float64:\n\t\t\t\tparamTypes[i+i] = fieldTypeDouble\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif cap(paramValues)-len(paramValues)-8 >= 0 {\n\t\t\t\t\tparamValues = paramValues[:len(paramValues)+8]\n\t\t\t\t\tbinary.LittleEndian.PutUint64(\n\t\t\t\t\t\tparamValues[len(paramValues)-8:],\n\t\t\t\t\t\tmath.Float64bits(v),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues,\n\t\t\t\t\t\tuint64ToBytes(math.Float64bits(v))...,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tcase bool:\n\t\t\t\tparamTypes[i+i] = fieldTypeTiny\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif v {\n\t\t\t\t\tparamValues = append(paramValues, 0x01)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues, 0x00)\n\t\t\t\t}\n\n\t\t\tcase []byte:\n\t\t\t\t// Common case (non-nil value) first\n\t\t\t\tif v != nil {\n\t\t\t\t\tparamTypes[i+i] = fieldTypeString\n\t\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\t\tif len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 {\n\t\t\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\t\t\tuint64(len(v)),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tparamValues = append(paramValues, v...)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif err := stmt.writeCommandLongData(i, v); 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\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Handle []byte(nil) as a NULL value\n\t\t\t\tnullMask[i/8] |= 1 << (uint(i) & 7)\n\t\t\t\tparamTypes[i+i] = fieldTypeNULL\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\tcase string:\n\t\t\t\tparamTypes[i+i] = fieldTypeString\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif len(v) < mc.maxAllowedPacket-pos-len(paramValues)-(len(args)-(i+1))*64 {\n\t\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\t\tuint64(len(v)),\n\t\t\t\t\t)\n\t\t\t\t\tparamValues = append(paramValues, v...)\n\t\t\t\t} else {\n\t\t\t\t\tif err := stmt.writeCommandLongData(i, []byte(v)); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase time.Time:\n\t\t\t\tparamTypes[i+i] = fieldTypeString\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tvar val []byte\n\t\t\t\tif v.IsZero() {\n\t\t\t\t\tval = []byte(\"0000-00-00\")\n\t\t\t\t} else {\n\t\t\t\t\tval = []byte(v.In(mc.cfg.Loc).Format(timeFormat))\n\t\t\t\t}\n\n\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\tuint64(len(val)),\n\t\t\t\t)\n\t\t\t\tparamValues = append(paramValues, val...)\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"can not convert type: %T\", arg)\n\t\t\t}\n\t\t}\n\n\t\t// Check if param values exceeded the available buffer\n\t\t// In that case we must build the data packet with the new values buffer\n\t\tif valuesCap != cap(paramValues) {\n\t\t\tdata = append(data[:pos], paramValues...)\n\t\t\tmc.buf.buf = data\n\t\t}\n\n\t\tpos += len(paramValues)\n\t\tdata = data[:pos]\n\t}\n\n\treturn mc.writePacket(data)\n}\n\nfunc (mc *mysqlConn) discardResults() error {\n\tfor mc.status&statusMoreResultsExists != 0 {\n\t\tresLen, err := mc.readResultSetHeaderPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif resLen > 0 {\n\t\t\t// columns\n\t\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// rows\n\t\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// http://dev.mysql.com/doc/internals/en/binary-protocol-resultset-row.html\nfunc (rows *binaryRows) readRow(dest []driver.Value) error {\n\tdata, err := rows.mc.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// packet indicator [1 byte]\n\tif data[0] != iOK {\n\t\t// EOF Packet\n\t\tif data[0] == iEOF && len(data) == 5 {\n\t\t\trows.mc.status = readStatus(data[3:])\n\t\t\trows.rs.done = true\n\t\t\tif !rows.HasNextResultSet() {\n\t\t\t\trows.mc = nil\n\t\t\t}\n\t\t\treturn io.EOF\n\t\t}\n\t\trows.mc = nil\n\n\t\t// Error otherwise\n\t\treturn rows.mc.handleErrorPacket(data)\n\t}\n\n\t// NULL-bitmap,  [(column-count + 7 + 2) / 8 bytes]\n\tpos := 1 + (len(dest)+7+2)>>3\n\tnullMask := data[1:pos]\n\n\tfor i := range dest {\n\t\t// Field is NULL\n\t\t// (byte >> bit-pos) % 2 == 1\n\t\tif ((nullMask[(i+2)>>3] >> uint((i+2)&7)) & 1) == 1 {\n\t\t\tdest[i] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\t// Convert to byte-coded string\n\t\tswitch rows.rs.columns[i].fieldType {\n\t\tcase fieldTypeNULL:\n\t\t\tdest[i] = nil\n\t\t\tcontinue\n\n\t\t// Numeric Types\n\t\tcase fieldTypeTiny:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(data[pos])\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int8(data[pos]))\n\t\t\t}\n\t\t\tpos++\n\t\t\tcontinue\n\n\t\tcase fieldTypeShort, fieldTypeYear:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int16(binary.LittleEndian.Uint16(data[pos : pos+2])))\n\t\t\t}\n\t\t\tpos += 2\n\t\t\tcontinue\n\n\t\tcase fieldTypeInt24, fieldTypeLong:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint32(data[pos : pos+4]))\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int32(binary.LittleEndian.Uint32(data[pos : pos+4])))\n\t\t\t}\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase fieldTypeLongLong:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tval := binary.LittleEndian.Uint64(data[pos : pos+8])\n\t\t\t\tif val > math.MaxInt64 {\n\t\t\t\t\tdest[i] = uint64ToString(val)\n\t\t\t\t} else {\n\t\t\t\t\tdest[i] = int64(val)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\t\t}\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\tcase fieldTypeFloat:\n\t\t\tdest[i] = float32(math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4])))\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase fieldTypeDouble:\n\t\t\tdest[i] = math.Float64frombits(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\t// Length coded Binary Strings\n\t\tcase fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar,\n\t\t\tfieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB,\n\t\t\tfieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB,\n\t\t\tfieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON:\n\t\t\tvar isNull bool\n\t\t\tvar n int\n\t\t\tdest[i], isNull, n, err = readLengthEncodedString(data[pos:])\n\t\t\tpos += n\n\t\t\tif err == nil {\n\t\t\t\tif !isNull {\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\tdest[i] = nil\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn err\n\n\t\tcase\n\t\t\tfieldTypeDate, fieldTypeNewDate, // Date YYYY-MM-DD\n\t\t\tfieldTypeTime,                         // Time [-][H]HH:MM:SS[.fractal]\n\t\t\tfieldTypeTimestamp, fieldTypeDateTime: // Timestamp YYYY-MM-DD HH:MM:SS[.fractal]\n\n\t\t\tnum, isNull, n := readLengthEncodedInteger(data[pos:])\n\t\t\tpos += n\n\n\t\t\tswitch {\n\t\t\tcase isNull:\n\t\t\t\tdest[i] = nil\n\t\t\t\tcontinue\n\t\t\tcase rows.rs.columns[i].fieldType == fieldTypeTime:\n\t\t\t\t// database/sql does not support an equivalent to TIME, return a string\n\t\t\t\tvar dstlen uint8\n\t\t\t\tswitch decimals := rows.rs.columns[i].decimals; decimals {\n\t\t\t\tcase 0x00, 0x1f:\n\t\t\t\t\tdstlen = 8\n\t\t\t\tcase 1, 2, 3, 4, 5, 6:\n\t\t\t\t\tdstlen = 8 + 1 + decimals\n\t\t\t\tdefault:\n\t\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\t\"protocol error, illegal decimals value %d\",\n\t\t\t\t\t\trows.rs.columns[i].decimals,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tdest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, true)\n\t\t\tcase rows.mc.parseTime:\n\t\t\t\tdest[i], err = parseBinaryDateTime(num, data[pos:], rows.mc.cfg.Loc)\n\t\t\tdefault:\n\t\t\t\tvar dstlen uint8\n\t\t\t\tif rows.rs.columns[i].fieldType == fieldTypeDate {\n\t\t\t\t\tdstlen = 10\n\t\t\t\t} else {\n\t\t\t\t\tswitch decimals := rows.rs.columns[i].decimals; decimals {\n\t\t\t\t\tcase 0x00, 0x1f:\n\t\t\t\t\t\tdstlen = 19\n\t\t\t\t\tcase 1, 2, 3, 4, 5, 6:\n\t\t\t\t\t\tdstlen = 19 + 1 + decimals\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\t\t\"protocol error, illegal decimals value %d\",\n\t\t\t\t\t\t\trows.rs.columns[i].decimals,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, false)\n\t\t\t}\n\n\t\t\tif err == nil {\n\t\t\t\tpos += int(num)\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t// Please report if this happens!\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown field type %d\", rows.rs.columns[i].fieldType)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/result.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\ntype mysqlResult struct {\n\taffectedRows int64\n\tinsertId     int64\n}\n\nfunc (res *mysqlResult) LastInsertId() (int64, error) {\n\treturn res.insertId, nil\n}\n\nfunc (res *mysqlResult) RowsAffected() (int64, error) {\n\treturn res.affectedRows, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/rows.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"io\"\n)\n\ntype mysqlField struct {\n\ttableName string\n\tname      string\n\tflags     fieldFlag\n\tfieldType byte\n\tdecimals  byte\n}\n\ntype resultSet struct {\n\tcolumns []mysqlField\n\tdone    bool\n}\n\ntype mysqlRows struct {\n\tmc *mysqlConn\n\trs resultSet\n}\n\ntype binaryRows struct {\n\tmysqlRows\n\t// stmtCols is a pointer to the statement's cached columns for different\n\t// result sets.\n\tstmtCols *[][]mysqlField\n\t// i is a number of the current result set. It is used to fetch proper\n\t// columns from stmtCols.\n\ti int\n}\n\ntype textRows struct {\n\tmysqlRows\n}\n\nfunc (rows *mysqlRows) Columns() []string {\n\tcolumns := make([]string, len(rows.rs.columns))\n\tif rows.mc != nil && rows.mc.cfg.ColumnsWithAlias {\n\t\tfor i := range columns {\n\t\t\tif tableName := rows.rs.columns[i].tableName; len(tableName) > 0 {\n\t\t\t\tcolumns[i] = tableName + \".\" + rows.rs.columns[i].name\n\t\t\t} else {\n\t\t\t\tcolumns[i] = rows.rs.columns[i].name\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor i := range columns {\n\t\t\tcolumns[i] = rows.rs.columns[i].name\n\t\t}\n\t}\n\treturn columns\n}\n\nfunc (rows *mysqlRows) Close() (err error) {\n\tmc := rows.mc\n\tif mc == nil {\n\t\treturn nil\n\t}\n\tif mc.netConn == nil {\n\t\treturn ErrInvalidConn\n\t}\n\n\t// Remove unread packets from stream\n\tif !rows.rs.done {\n\t\terr = mc.readUntilEOF()\n\t}\n\tif err == nil {\n\t\tif err = mc.discardResults(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\trows.mc = nil\n\treturn err\n}\n\nfunc (rows *mysqlRows) HasNextResultSet() (b bool) {\n\tif rows.mc == nil {\n\t\treturn false\n\t}\n\treturn rows.mc.status&statusMoreResultsExists != 0\n}\n\nfunc (rows *mysqlRows) nextResultSet() (int, error) {\n\tif rows.mc == nil {\n\t\treturn 0, io.EOF\n\t}\n\tif rows.mc.netConn == nil {\n\t\treturn 0, ErrInvalidConn\n\t}\n\n\t// Remove unread packets from stream\n\tif !rows.rs.done {\n\t\tif err := rows.mc.readUntilEOF(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trows.rs.done = true\n\t}\n\n\tif !rows.HasNextResultSet() {\n\t\trows.mc = nil\n\t\treturn 0, io.EOF\n\t}\n\trows.rs = resultSet{}\n\treturn rows.mc.readResultSetHeaderPacket()\n}\n\nfunc (rows *mysqlRows) nextNotEmptyResultSet() (int, error) {\n\tfor {\n\t\tresLen, err := rows.nextResultSet()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tif resLen > 0 {\n\t\t\treturn resLen, nil\n\t\t}\n\n\t\trows.rs.done = true\n\t}\n}\n\nfunc (rows *binaryRows) NextResultSet() (err error) {\n\tresLen, err := rows.nextNotEmptyResultSet()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// get columns, if not cached, read them and cache them.\n\tif rows.i >= len(*rows.stmtCols) {\n\t\trows.rs.columns, err = rows.mc.readColumns(resLen)\n\t\t*rows.stmtCols = append(*rows.stmtCols, rows.rs.columns)\n\t} else {\n\t\trows.rs.columns = (*rows.stmtCols)[rows.i]\n\t\tif err := rows.mc.readUntilEOF(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\trows.i++\n\treturn nil\n}\n\nfunc (rows *binaryRows) Next(dest []driver.Value) error {\n\tif mc := rows.mc; mc != nil {\n\t\tif mc.netConn == nil {\n\t\t\treturn ErrInvalidConn\n\t\t}\n\n\t\t// Fetch next row from stream\n\t\treturn rows.readRow(dest)\n\t}\n\treturn io.EOF\n}\n\nfunc (rows *textRows) NextResultSet() (err error) {\n\tresLen, err := rows.nextNotEmptyResultSet()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trows.rs.columns, err = rows.mc.readColumns(resLen)\n\treturn err\n}\n\nfunc (rows *textRows) Next(dest []driver.Value) error {\n\tif mc := rows.mc; mc != nil {\n\t\tif mc.netConn == nil {\n\t\t\treturn ErrInvalidConn\n\t\t}\n\n\t\t// Fetch next row from stream\n\t\treturn rows.readRow(dest)\n\t}\n\treturn io.EOF\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/statement.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n)\n\ntype mysqlStmt struct {\n\tmc         *mysqlConn\n\tid         uint32\n\tparamCount int\n\tcolumns    [][]mysqlField // cached from the first query\n}\n\nfunc (stmt *mysqlStmt) Close() error {\n\tif stmt.mc == nil || stmt.mc.netConn == nil {\n\t\t// driver.Stmt.Close can be called more than once, thus this function\n\t\t// has to be idempotent.\n\t\t// See also Issue #450 and golang/go#16019.\n\t\t//errLog.Print(ErrInvalidConn)\n\t\treturn driver.ErrBadConn\n\t}\n\n\terr := stmt.mc.writeCommandPacketUint32(comStmtClose, stmt.id)\n\tstmt.mc = nil\n\treturn err\n}\n\nfunc (stmt *mysqlStmt) NumInput() int {\n\treturn stmt.paramCount\n}\n\nfunc (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter {\n\treturn converter{}\n}\n\nfunc (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {\n\tif stmt.mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := stmt.writeExecutePacket(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmc := stmt.mc\n\n\tmc.affectedRows = 0\n\tmc.insertId = 0\n\n\t// Read Result\n\tresLen, err := mc.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resLen > 0 {\n\t\t// Columns\n\t\tif err = mc.readUntilEOF(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Rows\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err := mc.discardResults(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &mysqlResult{\n\t\taffectedRows: int64(mc.affectedRows),\n\t\tinsertId:     int64(mc.insertId),\n\t}, nil\n}\n\nfunc (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {\n\tif stmt.mc.netConn == nil {\n\t\terrLog.Print(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := stmt.writeExecutePacket(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmc := stmt.mc\n\n\t// Read Result\n\tresLen, err := mc.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trows := new(binaryRows)\n\trows.stmtCols = &stmt.columns\n\n\tif resLen > 0 {\n\t\trows.mc = mc\n\t\trows.i++\n\t\t// Columns\n\t\t// If not cached, read them and cache them\n\t\tif len(stmt.columns) == 0 {\n\t\t\trows.rs.columns, err = mc.readColumns(resLen)\n\t\t\tstmt.columns = append(stmt.columns, rows.rs.columns)\n\t\t} else {\n\t\t\trows.rs.columns = stmt.columns[0]\n\t\t\terr = mc.readUntilEOF()\n\t\t}\n\t} else {\n\t\trows.rs.done = true\n\n\t\tswitch err := rows.NextResultSet(); err {\n\t\tcase nil, io.EOF:\n\t\t\treturn rows, nil\n\t\tdefault:\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn rows, err\n}\n\ntype converter struct{}\n\nfunc (c converter) ConvertValue(v interface{}) (driver.Value, error) {\n\tif driver.IsValue(v) {\n\t\treturn v, nil\n\t}\n\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Ptr:\n\t\t// indirect pointers\n\t\tif rv.IsNil() {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn c.ConvertValue(rv.Elem().Interface())\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn rv.Int(), nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32:\n\t\treturn int64(rv.Uint()), nil\n\tcase reflect.Uint64:\n\t\tu64 := rv.Uint()\n\t\tif u64 >= 1<<63 {\n\t\t\treturn strconv.FormatUint(u64, 10), nil\n\t\t}\n\t\treturn int64(u64), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn rv.Float(), nil\n\t}\n\treturn nil, fmt.Errorf(\"unsupported type %T, a %s\", v, rv.Kind())\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/transaction.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\ntype mysqlTx struct {\n\tmc *mysqlConn\n}\n\nfunc (tx *mysqlTx) Commit() (err error) {\n\tif tx.mc == nil || tx.mc.netConn == nil {\n\t\treturn ErrInvalidConn\n\t}\n\terr = tx.mc.exec(\"COMMIT\")\n\ttx.mc = nil\n\treturn\n}\n\nfunc (tx *mysqlTx) Rollback() (err error) {\n\tif tx.mc == nil || tx.mc.netConn == nil {\n\t\treturn ErrInvalidConn\n\t}\n\terr = tx.mc.exec(\"ROLLBACK\")\n\ttx.mc = nil\n\treturn\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/go-sql-driver/mysql/utils.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\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 file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"crypto/sha1\"\n\t\"crypto/tls\"\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar (\n\ttlsConfigRegister map[string]*tls.Config // Register for custom tls.Configs\n)\n\n// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open.\n// Use the key as a value in the DSN where tls=value.\n//\n//  rootCertPool := x509.NewCertPool()\n//  pem, err := ioutil.ReadFile(\"/path/ca-cert.pem\")\n//  if err != nil {\n//      log.Fatal(err)\n//  }\n//  if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {\n//      log.Fatal(\"Failed to append PEM.\")\n//  }\n//  clientCert := make([]tls.Certificate, 0, 1)\n//  certs, err := tls.LoadX509KeyPair(\"/path/client-cert.pem\", \"/path/client-key.pem\")\n//  if err != nil {\n//      log.Fatal(err)\n//  }\n//  clientCert = append(clientCert, certs)\n//  mysql.RegisterTLSConfig(\"custom\", &tls.Config{\n//      RootCAs: rootCertPool,\n//      Certificates: clientCert,\n//  })\n//  db, err := sql.Open(\"mysql\", \"user@tcp(localhost:3306)/test?tls=custom\")\n//\nfunc RegisterTLSConfig(key string, config *tls.Config) error {\n\tif _, isBool := readBool(key); isBool || strings.ToLower(key) == \"skip-verify\" {\n\t\treturn fmt.Errorf(\"key '%s' is reserved\", key)\n\t}\n\n\tif tlsConfigRegister == nil {\n\t\ttlsConfigRegister = make(map[string]*tls.Config)\n\t}\n\n\ttlsConfigRegister[key] = config\n\treturn nil\n}\n\n// DeregisterTLSConfig removes the tls.Config associated with key.\nfunc DeregisterTLSConfig(key string) {\n\tif tlsConfigRegister != nil {\n\t\tdelete(tlsConfigRegister, key)\n\t}\n}\n\n// Returns the bool value of the input.\n// The 2nd return value indicates if the input was a valid bool value\nfunc readBool(input string) (value bool, valid bool) {\n\tswitch input {\n\tcase \"1\", \"true\", \"TRUE\", \"True\":\n\t\treturn true, true\n\tcase \"0\", \"false\", \"FALSE\", \"False\":\n\t\treturn false, true\n\t}\n\n\t// Not a valid bool value\n\treturn\n}\n\n/******************************************************************************\n*                             Authentication                                  *\n******************************************************************************/\n\n// Encrypt password using 4.1+ method\nfunc scramblePassword(scramble, password []byte) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\t// stage1Hash = SHA1(password)\n\tcrypt := sha1.New()\n\tcrypt.Write(password)\n\tstage1 := crypt.Sum(nil)\n\n\t// scrambleHash = SHA1(scramble + SHA1(stage1Hash))\n\t// inner Hash\n\tcrypt.Reset()\n\tcrypt.Write(stage1)\n\thash := crypt.Sum(nil)\n\n\t// outer Hash\n\tcrypt.Reset()\n\tcrypt.Write(scramble)\n\tcrypt.Write(hash)\n\tscramble = crypt.Sum(nil)\n\n\t// token = scrambleHash XOR stage1Hash\n\tfor i := range scramble {\n\t\tscramble[i] ^= stage1[i]\n\t}\n\treturn scramble\n}\n\n// Encrypt password using pre 4.1 (old password) method\n// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c\ntype myRnd struct {\n\tseed1, seed2 uint32\n}\n\nconst myRndMaxVal = 0x3FFFFFFF\n\n// Pseudo random number generator\nfunc newMyRnd(seed1, seed2 uint32) *myRnd {\n\treturn &myRnd{\n\t\tseed1: seed1 % myRndMaxVal,\n\t\tseed2: seed2 % myRndMaxVal,\n\t}\n}\n\n// Tested to be equivalent to MariaDB's floating point variant\n// http://play.golang.org/p/QHvhd4qved\n// http://play.golang.org/p/RG0q4ElWDx\nfunc (r *myRnd) NextByte() byte {\n\tr.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal\n\tr.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal\n\n\treturn byte(uint64(r.seed1) * 31 / myRndMaxVal)\n}\n\n// Generate binary hash from byte string using insecure pre 4.1 method\nfunc pwHash(password []byte) (result [2]uint32) {\n\tvar add uint32 = 7\n\tvar tmp uint32\n\n\tresult[0] = 1345345333\n\tresult[1] = 0x12345671\n\n\tfor _, c := range password {\n\t\t// skip spaces and tabs in password\n\t\tif c == ' ' || c == '\\t' {\n\t\t\tcontinue\n\t\t}\n\n\t\ttmp = uint32(c)\n\t\tresult[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8)\n\t\tresult[1] += (result[1] << 8) ^ result[0]\n\t\tadd += tmp\n\t}\n\n\t// Remove sign bit (1<<31)-1)\n\tresult[0] &= 0x7FFFFFFF\n\tresult[1] &= 0x7FFFFFFF\n\n\treturn\n}\n\n// Encrypt password using insecure pre 4.1 method\nfunc scrambleOldPassword(scramble, password []byte) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\tscramble = scramble[:8]\n\n\thashPw := pwHash(password)\n\thashSc := pwHash(scramble)\n\n\tr := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1])\n\n\tvar out [8]byte\n\tfor i := range out {\n\t\tout[i] = r.NextByte() + 64\n\t}\n\n\tmask := r.NextByte()\n\tfor i := range out {\n\t\tout[i] ^= mask\n\t}\n\n\treturn out[:]\n}\n\n/******************************************************************************\n*                           Time related utils                                *\n******************************************************************************/\n\n// NullTime represents a time.Time that may be NULL.\n// NullTime implements the Scanner interface so\n// it can be used as a scan destination:\n//\n//  var nt NullTime\n//  err := db.QueryRow(\"SELECT time FROM foo WHERE id=?\", id).Scan(&nt)\n//  ...\n//  if nt.Valid {\n//     // use nt.Time\n//  } else {\n//     // NULL value\n//  }\n//\n// This NullTime implementation is not driver-specific\ntype NullTime struct {\n\tTime  time.Time\n\tValid bool // Valid is true if Time is not NULL\n}\n\n// Scan implements the Scanner interface.\n// The value type must be time.Time or string / []byte (formatted time-string),\n// otherwise Scan fails.\nfunc (nt *NullTime) Scan(value interface{}) (err error) {\n\tif value == nil {\n\t\tnt.Time, nt.Valid = time.Time{}, false\n\t\treturn\n\t}\n\n\tswitch v := value.(type) {\n\tcase time.Time:\n\t\tnt.Time, nt.Valid = v, true\n\t\treturn\n\tcase []byte:\n\t\tnt.Time, err = parseDateTime(string(v), time.UTC)\n\t\tnt.Valid = (err == nil)\n\t\treturn\n\tcase string:\n\t\tnt.Time, err = parseDateTime(v, time.UTC)\n\t\tnt.Valid = (err == nil)\n\t\treturn\n\t}\n\n\tnt.Valid = false\n\treturn fmt.Errorf(\"Can't convert %T to time.Time\", value)\n}\n\n// Value implements the driver Valuer interface.\nfunc (nt NullTime) Value() (driver.Value, error) {\n\tif !nt.Valid {\n\t\treturn nil, nil\n\t}\n\treturn nt.Time, nil\n}\n\nfunc parseDateTime(str string, loc *time.Location) (t time.Time, err error) {\n\tbase := \"0000-00-00 00:00:00.0000000\"\n\tswitch len(str) {\n\tcase 10, 19, 21, 22, 23, 24, 25, 26: // up to \"YYYY-MM-DD HH:MM:SS.MMMMMM\"\n\t\tif str == base[:len(str)] {\n\t\t\treturn\n\t\t}\n\t\tt, err = time.Parse(timeFormat[:len(str)], str)\n\tdefault:\n\t\terr = fmt.Errorf(\"invalid time string: %s\", str)\n\t\treturn\n\t}\n\n\t// Adjust location\n\tif err == nil && loc != time.UTC {\n\t\ty, mo, d := t.Date()\n\t\th, mi, s := t.Clock()\n\t\tt, err = time.Date(y, mo, d, h, mi, s, t.Nanosecond(), loc), nil\n\t}\n\n\treturn\n}\n\nfunc parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) {\n\tswitch num {\n\tcase 0:\n\t\treturn time.Time{}, nil\n\tcase 4:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\t0, 0, 0, 0,\n\t\t\tloc,\n\t\t), nil\n\tcase 7:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\tint(data[4]),                              // hour\n\t\t\tint(data[5]),                              // minutes\n\t\t\tint(data[6]),                              // seconds\n\t\t\t0,\n\t\t\tloc,\n\t\t), nil\n\tcase 11:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\tint(data[4]),                              // hour\n\t\t\tint(data[5]),                              // minutes\n\t\t\tint(data[6]),                              // seconds\n\t\t\tint(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds\n\t\t\tloc,\n\t\t), nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid DATETIME packet length %d\", num)\n}\n\n// zeroDateTime is used in formatBinaryDateTime to avoid an allocation\n// if the DATE or DATETIME has the zero value.\n// It must never be changed.\n// The current behavior depends on database/sql copying the result.\nvar zeroDateTime = []byte(\"0000-00-00 00:00:00.000000\")\n\nconst digits01 = \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\"\nconst digits10 = \"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999\"\n\nfunc formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value, error) {\n\t// length expects the deterministic length of the zero value,\n\t// negative time and 100+ hours are automatically added if needed\n\tif len(src) == 0 {\n\t\tif justTime {\n\t\t\treturn zeroDateTime[11 : 11+length], nil\n\t\t}\n\t\treturn zeroDateTime[:length], nil\n\t}\n\tvar dst []byte          // return value\n\tvar pt, p1, p2, p3 byte // current digit pair\n\tvar zOffs byte          // offset of value in zeroDateTime\n\tif justTime {\n\t\tswitch length {\n\t\tcase\n\t\t\t8,                      // time (can be up to 10 when negative and 100+ hours)\n\t\t\t10, 11, 12, 13, 14, 15: // time with fractional seconds\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"illegal TIME length %d\", length)\n\t\t}\n\t\tswitch len(src) {\n\t\tcase 8, 12:\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"invalid TIME packet length %d\", len(src))\n\t\t}\n\t\t// +2 to enable negative time and 100+ hours\n\t\tdst = make([]byte, 0, length+2)\n\t\tif src[0] == 1 {\n\t\t\tdst = append(dst, '-')\n\t\t}\n\t\tif src[1] != 0 {\n\t\t\thour := uint16(src[1])*24 + uint16(src[5])\n\t\t\tpt = byte(hour / 100)\n\t\t\tp1 = byte(hour - 100*uint16(pt))\n\t\t\tdst = append(dst, digits01[pt])\n\t\t} else {\n\t\t\tp1 = src[5]\n\t\t}\n\t\tzOffs = 11\n\t\tsrc = src[6:]\n\t} else {\n\t\tswitch length {\n\t\tcase 10, 19, 21, 22, 23, 24, 25, 26:\n\t\tdefault:\n\t\t\tt := \"DATE\"\n\t\t\tif length > 10 {\n\t\t\t\tt += \"TIME\"\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"illegal %s length %d\", t, length)\n\t\t}\n\t\tswitch len(src) {\n\t\tcase 4, 7, 11:\n\t\tdefault:\n\t\t\tt := \"DATE\"\n\t\t\tif length > 10 {\n\t\t\t\tt += \"TIME\"\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"illegal %s packet length %d\", t, len(src))\n\t\t}\n\t\tdst = make([]byte, 0, length)\n\t\t// start with the date\n\t\tyear := binary.LittleEndian.Uint16(src[:2])\n\t\tpt = byte(year / 100)\n\t\tp1 = byte(year - 100*uint16(pt))\n\t\tp2, p3 = src[2], src[3]\n\t\tdst = append(dst,\n\t\t\tdigits10[pt], digits01[pt],\n\t\t\tdigits10[p1], digits01[p1], '-',\n\t\t\tdigits10[p2], digits01[p2], '-',\n\t\t\tdigits10[p3], digits01[p3],\n\t\t)\n\t\tif length == 10 {\n\t\t\treturn dst, nil\n\t\t}\n\t\tif len(src) == 4 {\n\t\t\treturn append(dst, zeroDateTime[10:length]...), nil\n\t\t}\n\t\tdst = append(dst, ' ')\n\t\tp1 = src[4] // hour\n\t\tsrc = src[5:]\n\t}\n\t// p1 is 2-digit hour, src is after hour\n\tp2, p3 = src[0], src[1]\n\tdst = append(dst,\n\t\tdigits10[p1], digits01[p1], ':',\n\t\tdigits10[p2], digits01[p2], ':',\n\t\tdigits10[p3], digits01[p3],\n\t)\n\tif length <= byte(len(dst)) {\n\t\treturn dst, nil\n\t}\n\tsrc = src[2:]\n\tif len(src) == 0 {\n\t\treturn append(dst, zeroDateTime[19:zOffs+length]...), nil\n\t}\n\tmicrosecs := binary.LittleEndian.Uint32(src[:4])\n\tp1 = byte(microsecs / 10000)\n\tmicrosecs -= 10000 * uint32(p1)\n\tp2 = byte(microsecs / 100)\n\tmicrosecs -= 100 * uint32(p2)\n\tp3 = byte(microsecs)\n\tswitch decimals := zOffs + length - 20; decimals {\n\tdefault:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t\tdigits10[p3], digits01[p3],\n\t\t), nil\n\tcase 1:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1],\n\t\t), nil\n\tcase 2:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t), nil\n\tcase 3:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2],\n\t\t), nil\n\tcase 4:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t), nil\n\tcase 5:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t\tdigits10[p3],\n\t\t), nil\n\t}\n}\n\n/******************************************************************************\n*                       Convert from and to bytes                             *\n******************************************************************************/\n\nfunc uint64ToBytes(n uint64) []byte {\n\treturn []byte{\n\t\tbyte(n),\n\t\tbyte(n >> 8),\n\t\tbyte(n >> 16),\n\t\tbyte(n >> 24),\n\t\tbyte(n >> 32),\n\t\tbyte(n >> 40),\n\t\tbyte(n >> 48),\n\t\tbyte(n >> 56),\n\t}\n}\n\nfunc uint64ToString(n uint64) []byte {\n\tvar a [20]byte\n\ti := 20\n\n\t// U+0030 = 0\n\t// ...\n\t// U+0039 = 9\n\n\tvar q uint64\n\tfor n >= 10 {\n\t\ti--\n\t\tq = n / 10\n\t\ta[i] = uint8(n-q*10) + 0x30\n\t\tn = q\n\t}\n\n\ti--\n\ta[i] = uint8(n) + 0x30\n\n\treturn a[i:]\n}\n\n// treats string value as unsigned integer representation\nfunc stringToInt(b []byte) int {\n\tval := 0\n\tfor i := range b {\n\t\tval *= 10\n\t\tval += int(b[i] - 0x30)\n\t}\n\treturn val\n}\n\n// returns the string read as a bytes slice, wheter the value is NULL,\n// the number of bytes read and an error, in case the string is longer than\n// the input slice\nfunc readLengthEncodedString(b []byte) ([]byte, bool, int, error) {\n\t// Get length\n\tnum, isNull, n := readLengthEncodedInteger(b)\n\tif num < 1 {\n\t\treturn b[n:n], isNull, n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn b[n-int(num) : n], false, n, nil\n\t}\n\treturn nil, false, n, io.EOF\n}\n\n// returns the number of bytes skipped and an error, in case the string is\n// longer than the input slice\nfunc skipLengthEncodedString(b []byte) (int, error) {\n\t// Get length\n\tnum, _, n := readLengthEncodedInteger(b)\n\tif num < 1 {\n\t\treturn n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn n, nil\n\t}\n\treturn n, io.EOF\n}\n\n// returns the number read, whether the value is NULL and the number of bytes read\nfunc readLengthEncodedInteger(b []byte) (uint64, bool, int) {\n\t// See issue #349\n\tif len(b) == 0 {\n\t\treturn 0, true, 1\n\t}\n\tswitch b[0] {\n\n\t// 251: NULL\n\tcase 0xfb:\n\t\treturn 0, true, 1\n\n\t// 252: value of following 2\n\tcase 0xfc:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8, false, 3\n\n\t// 253: value of following 3\n\tcase 0xfd:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4\n\n\t// 254: value of following 8\n\tcase 0xfe:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |\n\t\t\t\tuint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |\n\t\t\t\tuint64(b[7])<<48 | uint64(b[8])<<56,\n\t\t\tfalse, 9\n\t}\n\n\t// 0-250: value of first byte\n\treturn uint64(b[0]), false, 1\n}\n\n// encodes a uint64 value and appends it to the given bytes slice\nfunc appendLengthEncodedInteger(b []byte, n uint64) []byte {\n\tswitch {\n\tcase n <= 250:\n\t\treturn append(b, byte(n))\n\n\tcase n <= 0xffff:\n\t\treturn append(b, 0xfc, byte(n), byte(n>>8))\n\n\tcase n <= 0xffffff:\n\t\treturn append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16))\n\t}\n\treturn append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24),\n\t\tbyte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56))\n}\n\n// reserveBuffer checks cap(buf) and expand buffer to len(buf) + appendSize.\n// If cap(buf) is not enough, reallocate new buffer.\nfunc reserveBuffer(buf []byte, appendSize int) []byte {\n\tnewSize := len(buf) + appendSize\n\tif cap(buf) < newSize {\n\t\t// Grow buffer exponentially\n\t\tnewBuf := make([]byte, len(buf)*2+appendSize)\n\t\tcopy(newBuf, buf)\n\t\tbuf = newBuf\n\t}\n\treturn buf[:newSize]\n}\n\n// escapeBytesBackslash escapes []byte with backslashes (\\)\n// This escapes the contents of a string (provided as []byte) by adding backslashes before special\n// characters, and turning others into specific escape sequences, such as\n// turning newlines into \\n and null bytes into \\0.\n// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L823-L932\nfunc escapeBytesBackslash(buf, v []byte) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor _, c := range v {\n\t\tswitch c {\n\t\tcase '\\x00':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '0'\n\t\t\tpos += 2\n\t\tcase '\\n':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'n'\n\t\t\tpos += 2\n\t\tcase '\\r':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'r'\n\t\t\tpos += 2\n\t\tcase '\\x1a':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'Z'\n\t\t\tpos += 2\n\t\tcase '\\'':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tpos += 2\n\t\tcase '\"':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\"'\n\t\t\tpos += 2\n\t\tcase '\\\\':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\\\\'\n\t\t\tpos += 2\n\t\tdefault:\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeStringBackslash is similar to escapeBytesBackslash but for string.\nfunc escapeStringBackslash(buf []byte, v string) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor i := 0; i < len(v); i++ {\n\t\tc := v[i]\n\t\tswitch c {\n\t\tcase '\\x00':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '0'\n\t\t\tpos += 2\n\t\tcase '\\n':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'n'\n\t\t\tpos += 2\n\t\tcase '\\r':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'r'\n\t\t\tpos += 2\n\t\tcase '\\x1a':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = 'Z'\n\t\t\tpos += 2\n\t\tcase '\\'':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tpos += 2\n\t\tcase '\"':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\"'\n\t\t\tpos += 2\n\t\tcase '\\\\':\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tbuf[pos+1] = '\\\\'\n\t\t\tpos += 2\n\t\tdefault:\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeBytesQuotes escapes apostrophes in []byte by doubling them up.\n// This escapes the contents of a string by doubling up any apostrophes that\n// it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in\n// effect on the server.\n// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L963-L1038\nfunc escapeBytesQuotes(buf, v []byte) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor _, c := range v {\n\t\tif c == '\\'' {\n\t\t\tbuf[pos] = '\\''\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tpos += 2\n\t\t} else {\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeStringQuotes is similar to escapeBytesQuotes but for string.\nfunc escapeStringQuotes(buf []byte, v string) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor i := 0; i < len(v); i++ {\n\t\tc := v[i]\n\t\tif c == '\\'' {\n\t\t\tbuf[pos] = '\\''\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tpos += 2\n\t\t} else {\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/LICENSE",
    "content": " Copyright (c) 2013, Jason Moiron\n\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/bind.go",
    "content": "package sqlx\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jmoiron/sqlx/reflectx\"\n)\n\n// Bindvar types supported by Rebind, BindMap and BindStruct.\nconst (\n\tUNKNOWN = iota\n\tQUESTION\n\tDOLLAR\n\tNAMED\n)\n\n// BindType returns the bindtype for a given database given a drivername.\nfunc BindType(driverName string) int {\n\tswitch driverName {\n\tcase \"postgres\", \"pgx\":\n\t\treturn DOLLAR\n\tcase \"mysql\":\n\t\treturn QUESTION\n\tcase \"sqlite3\":\n\t\treturn QUESTION\n\tcase \"oci8\", \"ora\", \"goracle\":\n\t\treturn NAMED\n\t}\n\treturn UNKNOWN\n}\n\n// FIXME: this should be able to be tolerant of escaped ?'s in queries without\n// losing much speed, and should be to avoid confusion.\n\n// Rebind a query from the default bindtype (QUESTION) to the target bindtype.\nfunc Rebind(bindType int, query string) string {\n\tswitch bindType {\n\tcase QUESTION, UNKNOWN:\n\t\treturn query\n\t}\n\n\t// Add space enough for 10 params before we have to allocate\n\trqb := make([]byte, 0, len(query)+10)\n\n\tvar i, j int\n\n\tfor i = strings.Index(query, \"?\"); i != -1; i = strings.Index(query, \"?\") {\n\t\trqb = append(rqb, query[:i]...)\n\n\t\tswitch bindType {\n\t\tcase DOLLAR:\n\t\t\trqb = append(rqb, '$')\n\t\tcase NAMED:\n\t\t\trqb = append(rqb, ':', 'a', 'r', 'g')\n\t\t}\n\n\t\tj++\n\t\trqb = strconv.AppendInt(rqb, int64(j), 10)\n\n\t\tquery = query[i+1:]\n\t}\n\n\treturn string(append(rqb, query...))\n}\n\n// Experimental implementation of Rebind which uses a bytes.Buffer.  The code is\n// much simpler and should be more resistant to odd unicode, but it is twice as\n// slow.  Kept here for benchmarking purposes and to possibly replace Rebind if\n// problems arise with its somewhat naive handling of unicode.\nfunc rebindBuff(bindType int, query string) string {\n\tif bindType != DOLLAR {\n\t\treturn query\n\t}\n\n\tb := make([]byte, 0, len(query))\n\trqb := bytes.NewBuffer(b)\n\tj := 1\n\tfor _, r := range query {\n\t\tif r == '?' {\n\t\t\trqb.WriteRune('$')\n\t\t\trqb.WriteString(strconv.Itoa(j))\n\t\t\tj++\n\t\t} else {\n\t\t\trqb.WriteRune(r)\n\t\t}\n\t}\n\n\treturn rqb.String()\n}\n\n// In expands slice values in args, returning the modified query string\n// and a new arg list that can be executed by a database. The `query` should\n// use the `?` bindVar.  The return value uses the `?` bindVar.\nfunc In(query string, args ...interface{}) (string, []interface{}, error) {\n\t// argMeta stores reflect.Value and length for slices and\n\t// the value itself for non-slice arguments\n\ttype argMeta struct {\n\t\tv      reflect.Value\n\t\ti      interface{}\n\t\tlength int\n\t}\n\n\tvar flatArgsCount int\n\tvar anySlices bool\n\n\tmeta := make([]argMeta, len(args))\n\n\tfor i, arg := range args {\n\t\tv := reflect.ValueOf(arg)\n\t\tt := reflectx.Deref(v.Type())\n\n\t\tif t.Kind() == reflect.Slice {\n\t\t\tmeta[i].length = v.Len()\n\t\t\tmeta[i].v = v\n\n\t\t\tanySlices = true\n\t\t\tflatArgsCount += meta[i].length\n\n\t\t\tif meta[i].length == 0 {\n\t\t\t\treturn \"\", nil, errors.New(\"empty slice passed to 'in' query\")\n\t\t\t}\n\t\t} else {\n\t\t\tmeta[i].i = arg\n\t\t\tflatArgsCount++\n\t\t}\n\t}\n\n\t// don't do any parsing if there aren't any slices;  note that this means\n\t// some errors that we might have caught below will not be returned.\n\tif !anySlices {\n\t\treturn query, args, nil\n\t}\n\n\tnewArgs := make([]interface{}, 0, flatArgsCount)\n\tbuf := bytes.NewBuffer(make([]byte, 0, len(query)+len(\", ?\")*flatArgsCount))\n\n\tvar arg, offset int\n\n\tfor i := strings.IndexByte(query[offset:], '?'); i != -1; i = strings.IndexByte(query[offset:], '?') {\n\t\tif arg >= len(meta) {\n\t\t\t// if an argument wasn't passed, lets return an error;  this is\n\t\t\t// not actually how database/sql Exec/Query works, but since we are\n\t\t\t// creating an argument list programmatically, we want to be able\n\t\t\t// to catch these programmer errors earlier.\n\t\t\treturn \"\", nil, errors.New(\"number of bindVars exceeds arguments\")\n\t\t}\n\n\t\targMeta := meta[arg]\n\t\targ++\n\n\t\t// not a slice, continue.\n\t\t// our questionmark will either be written before the next expansion\n\t\t// of a slice or after the loop when writing the rest of the query\n\t\tif argMeta.length == 0 {\n\t\t\toffset = offset + i + 1\n\t\t\tnewArgs = append(newArgs, argMeta.i)\n\t\t\tcontinue\n\t\t}\n\n\t\t// write everything up to and including our ? character\n\t\tbuf.WriteString(query[:offset+i+1])\n\n\t\tfor si := 1; si < argMeta.length; si++ {\n\t\t\tbuf.WriteString(\", ?\")\n\t\t}\n\n\t\tnewArgs = appendReflectSlice(newArgs, argMeta.v, argMeta.length)\n\n\t\t// slice the query and reset the offset. this avoids some bookkeeping for\n\t\t// the write after the loop\n\t\tquery = query[offset+i+1:]\n\t\toffset = 0\n\t}\n\n\tbuf.WriteString(query)\n\n\tif arg < len(meta) {\n\t\treturn \"\", nil, errors.New(\"number of bindVars less than number arguments\")\n\t}\n\n\treturn buf.String(), newArgs, nil\n}\n\nfunc appendReflectSlice(args []interface{}, v reflect.Value, vlen int) []interface{} {\n\tswitch val := v.Interface().(type) {\n\tcase []interface{}:\n\t\targs = append(args, val...)\n\tcase []int:\n\t\tfor i := range val {\n\t\t\targs = append(args, val[i])\n\t\t}\n\tcase []string:\n\t\tfor i := range val {\n\t\t\targs = append(args, val[i])\n\t\t}\n\tdefault:\n\t\tfor si := 0; si < vlen; si++ {\n\t\t\targs = append(args, v.Index(si).Interface())\n\t\t}\n\t}\n\n\treturn args\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/doc.go",
    "content": "// Package sqlx provides general purpose extensions to database/sql.\n//\n// It is intended to seamlessly wrap database/sql and provide convenience\n// methods which are useful in the development of database driven applications.\n// None of the underlying database/sql methods are changed.  Instead all extended\n// behavior is implemented through new methods defined on wrapper types.\n//\n// Additions include scanning into structs, named query support, rebinding\n// queries for different drivers, convenient shorthands for common error handling\n// and more.\n//\npackage sqlx\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/named.go",
    "content": "package sqlx\n\n// Named Query Support\n//\n//  * BindMap - bind query bindvars to map/struct args\n//\t* NamedExec, NamedQuery - named query w/ struct or map\n//  * NamedStmt - a pre-compiled named query which is a prepared statement\n//\n// Internal Interfaces:\n//\n//  * compileNamedQuery - rebind a named query, returning a query and list of names\n//  * bindArgs, bindMapArgs, bindAnyArgs - given a list of names, return an arglist\n//\nimport (\n\t\"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"unicode\"\n\n\t\"github.com/jmoiron/sqlx/reflectx\"\n)\n\n// NamedStmt is a prepared statement that executes named queries.  Prepare it\n// how you would execute a NamedQuery, but pass in a struct or map when executing.\ntype NamedStmt struct {\n\tParams      []string\n\tQueryString string\n\tStmt        *Stmt\n}\n\n// Close closes the named statement.\nfunc (n *NamedStmt) Close() error {\n\treturn n.Stmt.Close()\n}\n\n// Exec executes a named statement using the struct passed.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) Exec(arg interface{}) (sql.Result, error) {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn *new(sql.Result), err\n\t}\n\treturn n.Stmt.Exec(args...)\n}\n\n// Query executes a named statement using the struct argument, returning rows.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) Query(arg interface{}) (*sql.Rows, error) {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn n.Stmt.Query(args...)\n}\n\n// QueryRow executes a named statement against the database.  Because sqlx cannot\n// create a *sql.Row with an error condition pre-set for binding errors, sqlx\n// returns a *sqlx.Row instead.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryRow(arg interface{}) *Row {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn &Row{err: err}\n\t}\n\treturn n.Stmt.QueryRowx(args...)\n}\n\n// MustExec execs a NamedStmt, panicing on error\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) MustExec(arg interface{}) sql.Result {\n\tres, err := n.Exec(arg)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn res\n}\n\n// Queryx using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) Queryx(arg interface{}) (*Rows, error) {\n\tr, err := n.Query(arg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, Mapper: n.Stmt.Mapper, unsafe: isUnsafe(n)}, err\n}\n\n// QueryRowx this NamedStmt.  Because of limitations with QueryRow, this is\n// an alias for QueryRow.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryRowx(arg interface{}) *Row {\n\treturn n.QueryRow(arg)\n}\n\n// Select using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) Select(dest interface{}, arg interface{}) error {\n\trows, err := n.Queryx(arg)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// if something happens here, we want to make sure the rows are Closed\n\tdefer rows.Close()\n\treturn scanAll(rows, dest, false)\n}\n\n// Get using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) Get(dest interface{}, arg interface{}) error {\n\tr := n.QueryRowx(arg)\n\treturn r.scanAny(dest, false)\n}\n\n// Unsafe creates an unsafe version of the NamedStmt\nfunc (n *NamedStmt) Unsafe() *NamedStmt {\n\tr := &NamedStmt{Params: n.Params, Stmt: n.Stmt, QueryString: n.QueryString}\n\tr.Stmt.unsafe = true\n\treturn r\n}\n\n// A union interface of preparer and binder, required to be able to prepare\n// named statements (as the bindtype must be determined).\ntype namedPreparer interface {\n\tPreparer\n\tbinder\n}\n\nfunc prepareNamed(p namedPreparer, query string) (*NamedStmt, error) {\n\tbindType := BindType(p.DriverName())\n\tq, args, err := compileNamedQuery([]byte(query), bindType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstmt, err := Preparex(p, q)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &NamedStmt{\n\t\tQueryString: q,\n\t\tParams:      args,\n\t\tStmt:        stmt,\n\t}, nil\n}\n\nfunc bindAnyArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) {\n\tif maparg, ok := arg.(map[string]interface{}); ok {\n\t\treturn bindMapArgs(names, maparg)\n\t}\n\treturn bindArgs(names, arg, m)\n}\n\n// private interface to generate a list of interfaces from a given struct\n// type, given a list of names to pull out of the struct.  Used by public\n// BindStruct interface.\nfunc bindArgs(names []string, arg interface{}, m *reflectx.Mapper) ([]interface{}, error) {\n\targlist := make([]interface{}, 0, len(names))\n\n\t// grab the indirected value of arg\n\tv := reflect.ValueOf(arg)\n\tfor v = reflect.ValueOf(arg); v.Kind() == reflect.Ptr; {\n\t\tv = v.Elem()\n\t}\n\n\tfields := m.TraversalsByName(v.Type(), names)\n\tfor i, t := range fields {\n\t\tif len(t) == 0 {\n\t\t\treturn arglist, fmt.Errorf(\"could not find name %s in %#v\", names[i], arg)\n\t\t}\n\t\tval := reflectx.FieldByIndexesReadOnly(v, t)\n\t\targlist = append(arglist, val.Interface())\n\t}\n\n\treturn arglist, nil\n}\n\n// like bindArgs, but for maps.\nfunc bindMapArgs(names []string, arg map[string]interface{}) ([]interface{}, error) {\n\targlist := make([]interface{}, 0, len(names))\n\n\tfor _, name := range names {\n\t\tval, ok := arg[name]\n\t\tif !ok {\n\t\t\treturn arglist, fmt.Errorf(\"could not find name %s in %#v\", name, arg)\n\t\t}\n\t\targlist = append(arglist, val)\n\t}\n\treturn arglist, nil\n}\n\n// bindStruct binds a named parameter query with fields from a struct argument.\n// The rules for binding field names to parameter names follow the same\n// conventions as for StructScan, including obeying the `db` struct tags.\nfunc bindStruct(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {\n\tbound, names, err := compileNamedQuery([]byte(query), bindType)\n\tif err != nil {\n\t\treturn \"\", []interface{}{}, err\n\t}\n\n\targlist, err := bindArgs(names, arg, m)\n\tif err != nil {\n\t\treturn \"\", []interface{}{}, err\n\t}\n\n\treturn bound, arglist, nil\n}\n\n// bindMap binds a named parameter query with a map of arguments.\nfunc bindMap(bindType int, query string, args map[string]interface{}) (string, []interface{}, error) {\n\tbound, names, err := compileNamedQuery([]byte(query), bindType)\n\tif err != nil {\n\t\treturn \"\", []interface{}{}, err\n\t}\n\n\targlist, err := bindMapArgs(names, args)\n\treturn bound, arglist, err\n}\n\n// -- Compilation of Named Queries\n\n// Allow digits and letters in bind params;  additionally runes are\n// checked against underscores, meaning that bind params can have be\n// alphanumeric with underscores.  Mind the difference between unicode\n// digits and numbers, where '5' is a digit but '五' is not.\nvar allowedBindRunes = []*unicode.RangeTable{unicode.Letter, unicode.Digit}\n\n// FIXME: this function isn't safe for unicode named params, as a failing test\n// can testify.  This is not a regression but a failure of the original code\n// as well.  It should be modified to range over runes in a string rather than\n// bytes, even though this is less convenient and slower.  Hopefully the\n// addition of the prepared NamedStmt (which will only do this once) will make\n// up for the slightly slower ad-hoc NamedExec/NamedQuery.\n\n// compile a NamedQuery into an unbound query (using the '?' bindvar) and\n// a list of names.\nfunc compileNamedQuery(qs []byte, bindType int) (query string, names []string, err error) {\n\tnames = make([]string, 0, 10)\n\trebound := make([]byte, 0, len(qs))\n\n\tinName := false\n\tlast := len(qs) - 1\n\tcurrentVar := 1\n\tname := make([]byte, 0, 10)\n\n\tfor i, b := range qs {\n\t\t// a ':' while we're in a name is an error\n\t\tif b == ':' {\n\t\t\t// if this is the second ':' in a '::' escape sequence, append a ':'\n\t\t\tif inName && i > 0 && qs[i-1] == ':' {\n\t\t\t\trebound = append(rebound, ':')\n\t\t\t\tinName = false\n\t\t\t\tcontinue\n\t\t\t} else if inName {\n\t\t\t\terr = errors.New(\"unexpected `:` while reading named param at \" + strconv.Itoa(i))\n\t\t\t\treturn query, names, err\n\t\t\t}\n\t\t\tinName = true\n\t\t\tname = []byte{}\n\t\t\t// if we're in a name, and this is an allowed character, continue\n\t\t} else if inName && (unicode.IsOneOf(allowedBindRunes, rune(b)) || b == '_' || b == '.') && i != last {\n\t\t\t// append the byte to the name if we are in a name and not on the last byte\n\t\t\tname = append(name, b)\n\t\t\t// if we're in a name and it's not an allowed character, the name is done\n\t\t} else if inName {\n\t\t\tinName = false\n\t\t\t// if this is the final byte of the string and it is part of the name, then\n\t\t\t// make sure to add it to the name\n\t\t\tif i == last && unicode.IsOneOf(allowedBindRunes, rune(b)) {\n\t\t\t\tname = append(name, b)\n\t\t\t}\n\t\t\t// add the string representation to the names list\n\t\t\tnames = append(names, string(name))\n\t\t\t// add a proper bindvar for the bindType\n\t\t\tswitch bindType {\n\t\t\t// oracle only supports named type bind vars even for positional\n\t\t\tcase NAMED:\n\t\t\t\trebound = append(rebound, ':')\n\t\t\t\trebound = append(rebound, name...)\n\t\t\tcase QUESTION, UNKNOWN:\n\t\t\t\trebound = append(rebound, '?')\n\t\t\tcase DOLLAR:\n\t\t\t\trebound = append(rebound, '$')\n\t\t\t\tfor _, b := range strconv.Itoa(currentVar) {\n\t\t\t\t\trebound = append(rebound, byte(b))\n\t\t\t\t}\n\t\t\t\tcurrentVar++\n\t\t\t}\n\t\t\t// add this byte to string unless it was not part of the name\n\t\t\tif i != last {\n\t\t\t\trebound = append(rebound, b)\n\t\t\t} else if !unicode.IsOneOf(allowedBindRunes, rune(b)) {\n\t\t\t\trebound = append(rebound, b)\n\t\t\t}\n\t\t} else {\n\t\t\t// this is a normal byte and should just go onto the rebound query\n\t\t\trebound = append(rebound, b)\n\t\t}\n\t}\n\n\treturn string(rebound), names, err\n}\n\n// BindNamed binds a struct or a map to a query with named parameters.\n// DEPRECATED: use sqlx.Named` instead of this, it may be removed in future.\nfunc BindNamed(bindType int, query string, arg interface{}) (string, []interface{}, error) {\n\treturn bindNamedMapper(bindType, query, arg, mapper())\n}\n\n// Named takes a query using named parameters and an argument and\n// returns a new query with a list of args that can be executed by\n// a database.  The return value uses the `?` bindvar.\nfunc Named(query string, arg interface{}) (string, []interface{}, error) {\n\treturn bindNamedMapper(QUESTION, query, arg, mapper())\n}\n\nfunc bindNamedMapper(bindType int, query string, arg interface{}, m *reflectx.Mapper) (string, []interface{}, error) {\n\tif maparg, ok := arg.(map[string]interface{}); ok {\n\t\treturn bindMap(bindType, query, maparg)\n\t}\n\treturn bindStruct(bindType, query, arg, m)\n}\n\n// NamedQuery binds a named query and then runs Query on the result using the\n// provided Ext (sqlx.Tx, sqlx.Db).  It works with both structs and with\n// map[string]interface{} types.\nfunc NamedQuery(e Ext, query string, arg interface{}) (*Rows, error) {\n\tq, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn e.Queryx(q, args...)\n}\n\n// NamedExec uses BindStruct to get a query executable by the driver and\n// then runs Exec on the result.  Returns an error from the binding\n// or the query excution itself.\nfunc NamedExec(e Ext, query string, arg interface{}) (sql.Result, error) {\n\tq, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn e.Exec(q, args...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/named_context.go",
    "content": "// +build go1.8\n\npackage sqlx\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n)\n\n// A union interface of contextPreparer and binder, required to be able to\n// prepare named statements with context (as the bindtype must be determined).\ntype namedPreparerContext interface {\n\tPreparerContext\n\tbinder\n}\n\nfunc prepareNamedContext(ctx context.Context, p namedPreparerContext, query string) (*NamedStmt, error) {\n\tbindType := BindType(p.DriverName())\n\tq, args, err := compileNamedQuery([]byte(query), bindType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstmt, err := PreparexContext(ctx, p, q)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &NamedStmt{\n\t\tQueryString: q,\n\t\tParams:      args,\n\t\tStmt:        stmt,\n\t}, nil\n}\n\n// ExecContext executes a named statement using the struct passed.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) ExecContext(ctx context.Context, arg interface{}) (sql.Result, error) {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn *new(sql.Result), err\n\t}\n\treturn n.Stmt.ExecContext(ctx, args...)\n}\n\n// QueryContext executes a named statement using the struct argument, returning rows.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryContext(ctx context.Context, arg interface{}) (*sql.Rows, error) {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn n.Stmt.QueryContext(ctx, args...)\n}\n\n// QueryRowContext executes a named statement against the database.  Because sqlx cannot\n// create a *sql.Row with an error condition pre-set for binding errors, sqlx\n// returns a *sqlx.Row instead.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryRowContext(ctx context.Context, arg interface{}) *Row {\n\targs, err := bindAnyArgs(n.Params, arg, n.Stmt.Mapper)\n\tif err != nil {\n\t\treturn &Row{err: err}\n\t}\n\treturn n.Stmt.QueryRowxContext(ctx, args...)\n}\n\n// MustExecContext execs a NamedStmt, panicing on error\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) MustExecContext(ctx context.Context, arg interface{}) sql.Result {\n\tres, err := n.ExecContext(ctx, arg)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn res\n}\n\n// QueryxContext using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryxContext(ctx context.Context, arg interface{}) (*Rows, error) {\n\tr, err := n.QueryContext(ctx, arg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, Mapper: n.Stmt.Mapper, unsafe: isUnsafe(n)}, err\n}\n\n// QueryRowxContext this NamedStmt.  Because of limitations with QueryRow, this is\n// an alias for QueryRow.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) QueryRowxContext(ctx context.Context, arg interface{}) *Row {\n\treturn n.QueryRowContext(ctx, arg)\n}\n\n// SelectContext using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) SelectContext(ctx context.Context, dest interface{}, arg interface{}) error {\n\trows, err := n.QueryxContext(ctx, arg)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// if something happens here, we want to make sure the rows are Closed\n\tdefer rows.Close()\n\treturn scanAll(rows, dest, false)\n}\n\n// GetContext using this NamedStmt\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (n *NamedStmt) GetContext(ctx context.Context, dest interface{}, arg interface{}) error {\n\tr := n.QueryRowxContext(ctx, arg)\n\treturn r.scanAny(dest, false)\n}\n\n// NamedQueryContext binds a named query and then runs Query on the result using the\n// provided Ext (sqlx.Tx, sqlx.Db).  It works with both structs and with\n// map[string]interface{} types.\nfunc NamedQueryContext(ctx context.Context, e ExtContext, query string, arg interface{}) (*Rows, error) {\n\tq, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn e.QueryxContext(ctx, q, args...)\n}\n\n// NamedExecContext uses BindStruct to get a query executable by the driver and\n// then runs Exec on the result.  Returns an error from the binding\n// or the query excution itself.\nfunc NamedExecContext(ctx context.Context, e ExtContext, query string, arg interface{}) (sql.Result, error) {\n\tq, args, err := bindNamedMapper(BindType(e.DriverName()), query, arg, mapperFor(e))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn e.ExecContext(ctx, q, args...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/reflectx/reflect.go",
    "content": "// Package reflectx implements extensions to the standard reflect lib suitable\n// for implementing marshalling and unmarshalling packages.  The main Mapper type\n// allows for Go-compatible named attribute access, including accessing embedded\n// struct attributes and the ability to use  functions and struct tags to\n// customize field names.\n//\npackage reflectx\n\nimport (\n\t\"reflect\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// A FieldInfo is metadata for a struct field.\ntype FieldInfo struct {\n\tIndex    []int\n\tPath     string\n\tField    reflect.StructField\n\tZero     reflect.Value\n\tName     string\n\tOptions  map[string]string\n\tEmbedded bool\n\tChildren []*FieldInfo\n\tParent   *FieldInfo\n}\n\n// A StructMap is an index of field metadata for a struct.\ntype StructMap struct {\n\tTree  *FieldInfo\n\tIndex []*FieldInfo\n\tPaths map[string]*FieldInfo\n\tNames map[string]*FieldInfo\n}\n\n// GetByPath returns a *FieldInfo for a given string path.\nfunc (f StructMap) GetByPath(path string) *FieldInfo {\n\treturn f.Paths[path]\n}\n\n// GetByTraversal returns a *FieldInfo for a given integer path.  It is\n// analogous to reflect.FieldByIndex, but using the cached traversal\n// rather than re-executing the reflect machinery each time.\nfunc (f StructMap) GetByTraversal(index []int) *FieldInfo {\n\tif len(index) == 0 {\n\t\treturn nil\n\t}\n\n\ttree := f.Tree\n\tfor _, i := range index {\n\t\tif i >= len(tree.Children) || tree.Children[i] == nil {\n\t\t\treturn nil\n\t\t}\n\t\ttree = tree.Children[i]\n\t}\n\treturn tree\n}\n\n// Mapper is a general purpose mapper of names to struct fields.  A Mapper\n// behaves like most marshallers in the standard library, obeying a field tag\n// for name mapping but also providing a basic transform function.\ntype Mapper struct {\n\tcache      map[reflect.Type]*StructMap\n\ttagName    string\n\ttagMapFunc func(string) string\n\tmapFunc    func(string) string\n\tmutex      sync.Mutex\n}\n\n// NewMapper returns a new mapper using the tagName as its struct field tag.\n// If tagName is the empty string, it is ignored.\nfunc NewMapper(tagName string) *Mapper {\n\treturn &Mapper{\n\t\tcache:   make(map[reflect.Type]*StructMap),\n\t\ttagName: tagName,\n\t}\n}\n\n// NewMapperTagFunc returns a new mapper which contains a mapper for field names\n// AND a mapper for tag values.  This is useful for tags like json which can\n// have values like \"name,omitempty\".\nfunc NewMapperTagFunc(tagName string, mapFunc, tagMapFunc func(string) string) *Mapper {\n\treturn &Mapper{\n\t\tcache:      make(map[reflect.Type]*StructMap),\n\t\ttagName:    tagName,\n\t\tmapFunc:    mapFunc,\n\t\ttagMapFunc: tagMapFunc,\n\t}\n}\n\n// NewMapperFunc returns a new mapper which optionally obeys a field tag and\n// a struct field name mapper func given by f.  Tags will take precedence, but\n// for any other field, the mapped name will be f(field.Name)\nfunc NewMapperFunc(tagName string, f func(string) string) *Mapper {\n\treturn &Mapper{\n\t\tcache:   make(map[reflect.Type]*StructMap),\n\t\ttagName: tagName,\n\t\tmapFunc: f,\n\t}\n}\n\n// TypeMap returns a mapping of field strings to int slices representing\n// the traversal down the struct to reach the field.\nfunc (m *Mapper) TypeMap(t reflect.Type) *StructMap {\n\tm.mutex.Lock()\n\tmapping, ok := m.cache[t]\n\tif !ok {\n\t\tmapping = getMapping(t, m.tagName, m.mapFunc, m.tagMapFunc)\n\t\tm.cache[t] = mapping\n\t}\n\tm.mutex.Unlock()\n\treturn mapping\n}\n\n// FieldMap returns the mapper's mapping of field names to reflect values.  Panics\n// if v's Kind is not Struct, or v is not Indirectable to a struct kind.\nfunc (m *Mapper) FieldMap(v reflect.Value) map[string]reflect.Value {\n\tv = reflect.Indirect(v)\n\tmustBe(v, reflect.Struct)\n\n\tr := map[string]reflect.Value{}\n\ttm := m.TypeMap(v.Type())\n\tfor tagName, fi := range tm.Names {\n\t\tr[tagName] = FieldByIndexes(v, fi.Index)\n\t}\n\treturn r\n}\n\n// FieldByName returns a field by its mapped name as a reflect.Value.\n// Panics if v's Kind is not Struct or v is not Indirectable to a struct Kind.\n// Returns zero Value if the name is not found.\nfunc (m *Mapper) FieldByName(v reflect.Value, name string) reflect.Value {\n\tv = reflect.Indirect(v)\n\tmustBe(v, reflect.Struct)\n\n\ttm := m.TypeMap(v.Type())\n\tfi, ok := tm.Names[name]\n\tif !ok {\n\t\treturn v\n\t}\n\treturn FieldByIndexes(v, fi.Index)\n}\n\n// FieldsByName returns a slice of values corresponding to the slice of names\n// for the value.  Panics if v's Kind is not Struct or v is not Indirectable\n// to a struct Kind.  Returns zero Value for each name not found.\nfunc (m *Mapper) FieldsByName(v reflect.Value, names []string) []reflect.Value {\n\tv = reflect.Indirect(v)\n\tmustBe(v, reflect.Struct)\n\n\ttm := m.TypeMap(v.Type())\n\tvals := make([]reflect.Value, 0, len(names))\n\tfor _, name := range names {\n\t\tfi, ok := tm.Names[name]\n\t\tif !ok {\n\t\t\tvals = append(vals, *new(reflect.Value))\n\t\t} else {\n\t\t\tvals = append(vals, FieldByIndexes(v, fi.Index))\n\t\t}\n\t}\n\treturn vals\n}\n\n// TraversalsByName returns a slice of int slices which represent the struct\n// traversals for each mapped name.  Panics if t is not a struct or Indirectable\n// to a struct.  Returns empty int slice for each name not found.\nfunc (m *Mapper) TraversalsByName(t reflect.Type, names []string) [][]int {\n\tt = Deref(t)\n\tmustBe(t, reflect.Struct)\n\ttm := m.TypeMap(t)\n\n\tr := make([][]int, 0, len(names))\n\tfor _, name := range names {\n\t\tfi, ok := tm.Names[name]\n\t\tif !ok {\n\t\t\tr = append(r, []int{})\n\t\t} else {\n\t\t\tr = append(r, fi.Index)\n\t\t}\n\t}\n\treturn r\n}\n\n// FieldByIndexes returns a value for the field given by the struct traversal\n// for the given value.\nfunc FieldByIndexes(v reflect.Value, indexes []int) reflect.Value {\n\tfor _, i := range indexes {\n\t\tv = reflect.Indirect(v).Field(i)\n\t\t// if this is a pointer and it's nil, allocate a new value and set it\n\t\tif v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\talloc := reflect.New(Deref(v.Type()))\n\t\t\tv.Set(alloc)\n\t\t}\n\t\tif v.Kind() == reflect.Map && v.IsNil() {\n\t\t\tv.Set(reflect.MakeMap(v.Type()))\n\t\t}\n\t}\n\treturn v\n}\n\n// FieldByIndexesReadOnly returns a value for a particular struct traversal,\n// but is not concerned with allocating nil pointers because the value is\n// going to be used for reading and not setting.\nfunc FieldByIndexesReadOnly(v reflect.Value, indexes []int) reflect.Value {\n\tfor _, i := range indexes {\n\t\tv = reflect.Indirect(v).Field(i)\n\t}\n\treturn v\n}\n\n// Deref is Indirect for reflect.Types\nfunc Deref(t reflect.Type) reflect.Type {\n\tif t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\treturn t\n}\n\n// -- helpers & utilities --\n\ntype kinder interface {\n\tKind() reflect.Kind\n}\n\n// mustBe checks a value against a kind, panicing with a reflect.ValueError\n// if the kind isn't that which is required.\nfunc mustBe(v kinder, expected reflect.Kind) {\n\tif k := v.Kind(); k != expected {\n\t\tpanic(&reflect.ValueError{Method: methodName(), Kind: k})\n\t}\n}\n\n// methodName returns the caller of the function calling methodName\nfunc methodName() string {\n\tpc, _, _, _ := runtime.Caller(2)\n\tf := runtime.FuncForPC(pc)\n\tif f == nil {\n\t\treturn \"unknown method\"\n\t}\n\treturn f.Name()\n}\n\ntype typeQueue struct {\n\tt  reflect.Type\n\tfi *FieldInfo\n\tpp string // Parent path\n}\n\n// A copying append that creates a new slice each time.\nfunc apnd(is []int, i int) []int {\n\tx := make([]int, len(is)+1)\n\tfor p, n := range is {\n\t\tx[p] = n\n\t}\n\tx[len(x)-1] = i\n\treturn x\n}\n\ntype mapf func(string) string\n\n// parseName parses the tag and the target name for the given field using\n// the tagName (eg 'json' for `json:\"foo\"` tags), mapFunc for mapping the\n// field's name to a target name, and tagMapFunc for mapping the tag to\n// a target name.\nfunc parseName(field reflect.StructField, tagName string, mapFunc, tagMapFunc mapf) (tag, fieldName string) {\n\t// first, set the fieldName to the field's name\n\tfieldName = field.Name\n\t// if a mapFunc is set, use that to override the fieldName\n\tif mapFunc != nil {\n\t\tfieldName = mapFunc(fieldName)\n\t}\n\n\t// if there's no tag to look for, return the field name\n\tif tagName == \"\" {\n\t\treturn \"\", fieldName\n\t}\n\n\t// if this tag is not set using the normal convention in the tag,\n\t// then return the fieldname..  this check is done because according\n\t// to the reflect documentation:\n\t//    If the tag does not have the conventional format,\n\t//    the value returned by Get is unspecified.\n\t// which doesn't sound great.\n\tif !strings.Contains(string(field.Tag), tagName+\":\") {\n\t\treturn \"\", fieldName\n\t}\n\n\t// at this point we're fairly sure that we have a tag, so lets pull it out\n\ttag = field.Tag.Get(tagName)\n\n\t// if we have a mapper function, call it on the whole tag\n\t// XXX: this is a change from the old version, which pulled out the name\n\t// before the tagMapFunc could be run, but I think this is the right way\n\tif tagMapFunc != nil {\n\t\ttag = tagMapFunc(tag)\n\t}\n\n\t// finally, split the options from the name\n\tparts := strings.Split(tag, \",\")\n\tfieldName = parts[0]\n\n\treturn tag, fieldName\n}\n\n// parseOptions parses options out of a tag string, skipping the name\nfunc parseOptions(tag string) map[string]string {\n\tparts := strings.Split(tag, \",\")\n\toptions := make(map[string]string, len(parts))\n\tif len(parts) > 1 {\n\t\tfor _, opt := range parts[1:] {\n\t\t\t// short circuit potentially expensive split op\n\t\t\tif strings.Contains(opt, \"=\") {\n\t\t\t\tkv := strings.Split(opt, \"=\")\n\t\t\t\toptions[kv[0]] = kv[1]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\toptions[opt] = \"\"\n\t\t}\n\t}\n\treturn options\n}\n\n// getMapping returns a mapping for the t type, using the tagName, mapFunc and\n// tagMapFunc to determine the canonical names of fields.\nfunc getMapping(t reflect.Type, tagName string, mapFunc, tagMapFunc mapf) *StructMap {\n\tm := []*FieldInfo{}\n\n\troot := &FieldInfo{}\n\tqueue := []typeQueue{}\n\tqueue = append(queue, typeQueue{Deref(t), root, \"\"})\n\nQueueLoop:\n\tfor len(queue) != 0 {\n\t\t// pop the first item off of the queue\n\t\ttq := queue[0]\n\t\tqueue = queue[1:]\n\n\t\t// ignore recursive field\n\t\tfor p := tq.fi.Parent; p != nil; p = p.Parent {\n\t\t\tif tq.fi.Field.Type == p.Field.Type {\n\t\t\t\tcontinue QueueLoop\n\t\t\t}\n\t\t}\n\n\t\tnChildren := 0\n\t\tif tq.t.Kind() == reflect.Struct {\n\t\t\tnChildren = tq.t.NumField()\n\t\t}\n\t\ttq.fi.Children = make([]*FieldInfo, nChildren)\n\n\t\t// iterate through all of its fields\n\t\tfor fieldPos := 0; fieldPos < nChildren; fieldPos++ {\n\n\t\t\tf := tq.t.Field(fieldPos)\n\n\t\t\t// parse the tag and the target name using the mapping options for this field\n\t\t\ttag, name := parseName(f, tagName, mapFunc, tagMapFunc)\n\n\t\t\t// if the name is \"-\", disabled via a tag, skip it\n\t\t\tif name == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfi := FieldInfo{\n\t\t\t\tField:   f,\n\t\t\t\tName:    name,\n\t\t\t\tZero:    reflect.New(f.Type).Elem(),\n\t\t\t\tOptions: parseOptions(tag),\n\t\t\t}\n\n\t\t\t// if the path is empty this path is just the name\n\t\t\tif tq.pp == \"\" {\n\t\t\t\tfi.Path = fi.Name\n\t\t\t} else {\n\t\t\t\tfi.Path = tq.pp + \".\" + fi.Name\n\t\t\t}\n\n\t\t\t// skip unexported fields\n\t\t\tif len(f.PkgPath) != 0 && !f.Anonymous {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// bfs search of anonymous embedded structs\n\t\t\tif f.Anonymous {\n\t\t\t\tpp := tq.pp\n\t\t\t\tif tag != \"\" {\n\t\t\t\t\tpp = fi.Path\n\t\t\t\t}\n\n\t\t\t\tfi.Embedded = true\n\t\t\t\tfi.Index = apnd(tq.fi.Index, fieldPos)\n\t\t\t\tnChildren := 0\n\t\t\t\tft := Deref(f.Type)\n\t\t\t\tif ft.Kind() == reflect.Struct {\n\t\t\t\t\tnChildren = ft.NumField()\n\t\t\t\t}\n\t\t\t\tfi.Children = make([]*FieldInfo, nChildren)\n\t\t\t\tqueue = append(queue, typeQueue{Deref(f.Type), &fi, pp})\n\t\t\t} else if fi.Zero.Kind() == reflect.Struct || (fi.Zero.Kind() == reflect.Ptr && fi.Zero.Type().Elem().Kind() == reflect.Struct) {\n\t\t\t\tfi.Index = apnd(tq.fi.Index, fieldPos)\n\t\t\t\tfi.Children = make([]*FieldInfo, Deref(f.Type).NumField())\n\t\t\t\tqueue = append(queue, typeQueue{Deref(f.Type), &fi, fi.Path})\n\t\t\t}\n\n\t\t\tfi.Index = apnd(tq.fi.Index, fieldPos)\n\t\t\tfi.Parent = tq.fi\n\t\t\ttq.fi.Children[fieldPos] = &fi\n\t\t\tm = append(m, &fi)\n\t\t}\n\t}\n\n\tflds := &StructMap{Index: m, Tree: root, Paths: map[string]*FieldInfo{}, Names: map[string]*FieldInfo{}}\n\tfor _, fi := range flds.Index {\n\t\tflds.Paths[fi.Path] = fi\n\t\tif fi.Name != \"\" && !fi.Embedded {\n\t\t\tflds.Names[fi.Path] = fi\n\t\t}\n\t}\n\n\treturn flds\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/sqlx.go",
    "content": "package sqlx\n\nimport (\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/jmoiron/sqlx/reflectx\"\n)\n\n// Although the NameMapper is convenient, in practice it should not\n// be relied on except for application code.  If you are writing a library\n// that uses sqlx, you should be aware that the name mappings you expect\n// can be overridden by your user's application.\n\n// NameMapper is used to map column names to struct field names.  By default,\n// it uses strings.ToLower to lowercase struct field names.  It can be set\n// to whatever you want, but it is encouraged to be set before sqlx is used\n// as name-to-field mappings are cached after first use on a type.\nvar NameMapper = strings.ToLower\nvar origMapper = reflect.ValueOf(NameMapper)\n\n// Rather than creating on init, this is created when necessary so that\n// importers have time to customize the NameMapper.\nvar mpr *reflectx.Mapper\n\n// mprMu protects mpr.\nvar mprMu sync.Mutex\n\n// mapper returns a valid mapper using the configured NameMapper func.\nfunc mapper() *reflectx.Mapper {\n\tmprMu.Lock()\n\tdefer mprMu.Unlock()\n\n\tif mpr == nil {\n\t\tmpr = reflectx.NewMapperFunc(\"db\", NameMapper)\n\t} else if origMapper != reflect.ValueOf(NameMapper) {\n\t\t// if NameMapper has changed, create a new mapper\n\t\tmpr = reflectx.NewMapperFunc(\"db\", NameMapper)\n\t\torigMapper = reflect.ValueOf(NameMapper)\n\t}\n\treturn mpr\n}\n\n// isScannable takes the reflect.Type and the actual dest value and returns\n// whether or not it's Scannable.  Something is scannable if:\n//   * it is not a struct\n//   * it implements sql.Scanner\n//   * it has no exported fields\nfunc isScannable(t reflect.Type) bool {\n\tif reflect.PtrTo(t).Implements(_scannerInterface) {\n\t\treturn true\n\t}\n\tif t.Kind() != reflect.Struct {\n\t\treturn true\n\t}\n\n\t// it's not important that we use the right mapper for this particular object,\n\t// we're only concerned on how many exported fields this struct has\n\tm := mapper()\n\tif len(m.TypeMap(t).Index) == 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// ColScanner is an interface used by MapScan and SliceScan\ntype ColScanner interface {\n\tColumns() ([]string, error)\n\tScan(dest ...interface{}) error\n\tErr() error\n}\n\n// Queryer is an interface used by Get and Select\ntype Queryer interface {\n\tQuery(query string, args ...interface{}) (*sql.Rows, error)\n\tQueryx(query string, args ...interface{}) (*Rows, error)\n\tQueryRowx(query string, args ...interface{}) *Row\n}\n\n// Execer is an interface used by MustExec and LoadFile\ntype Execer interface {\n\tExec(query string, args ...interface{}) (sql.Result, error)\n}\n\n// Binder is an interface for something which can bind queries (Tx, DB)\ntype binder interface {\n\tDriverName() string\n\tRebind(string) string\n\tBindNamed(string, interface{}) (string, []interface{}, error)\n}\n\n// Ext is a union interface which can bind, query, and exec, used by\n// NamedQuery and NamedExec.\ntype Ext interface {\n\tbinder\n\tQueryer\n\tExecer\n}\n\n// Preparer is an interface used by Preparex.\ntype Preparer interface {\n\tPrepare(query string) (*sql.Stmt, error)\n}\n\n// determine if any of our extensions are unsafe\nfunc isUnsafe(i interface{}) bool {\n\tswitch v := i.(type) {\n\tcase Row:\n\t\treturn v.unsafe\n\tcase *Row:\n\t\treturn v.unsafe\n\tcase Rows:\n\t\treturn v.unsafe\n\tcase *Rows:\n\t\treturn v.unsafe\n\tcase NamedStmt:\n\t\treturn v.Stmt.unsafe\n\tcase *NamedStmt:\n\t\treturn v.Stmt.unsafe\n\tcase Stmt:\n\t\treturn v.unsafe\n\tcase *Stmt:\n\t\treturn v.unsafe\n\tcase qStmt:\n\t\treturn v.unsafe\n\tcase *qStmt:\n\t\treturn v.unsafe\n\tcase DB:\n\t\treturn v.unsafe\n\tcase *DB:\n\t\treturn v.unsafe\n\tcase Tx:\n\t\treturn v.unsafe\n\tcase *Tx:\n\t\treturn v.unsafe\n\tcase sql.Rows, *sql.Rows:\n\t\treturn false\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc mapperFor(i interface{}) *reflectx.Mapper {\n\tswitch i.(type) {\n\tcase DB:\n\t\treturn i.(DB).Mapper\n\tcase *DB:\n\t\treturn i.(*DB).Mapper\n\tcase Tx:\n\t\treturn i.(Tx).Mapper\n\tcase *Tx:\n\t\treturn i.(*Tx).Mapper\n\tdefault:\n\t\treturn mapper()\n\t}\n}\n\nvar _scannerInterface = reflect.TypeOf((*sql.Scanner)(nil)).Elem()\nvar _valuerInterface = reflect.TypeOf((*driver.Valuer)(nil)).Elem()\n\n// Row is a reimplementation of sql.Row in order to gain access to the underlying\n// sql.Rows.Columns() data, necessary for StructScan.\ntype Row struct {\n\terr    error\n\tunsafe bool\n\trows   *sql.Rows\n\tMapper *reflectx.Mapper\n}\n\n// Scan is a fixed implementation of sql.Row.Scan, which does not discard the\n// underlying error from the internal rows object if it exists.\nfunc (r *Row) Scan(dest ...interface{}) error {\n\tif r.err != nil {\n\t\treturn r.err\n\t}\n\n\t// TODO(bradfitz): for now we need to defensively clone all\n\t// []byte that the driver returned (not permitting\n\t// *RawBytes in Rows.Scan), since we're about to close\n\t// the Rows in our defer, when we return from this function.\n\t// the contract with the driver.Next(...) interface is that it\n\t// can return slices into read-only temporary memory that's\n\t// only valid until the next Scan/Close.  But the TODO is that\n\t// for a lot of drivers, this copy will be unnecessary.  We\n\t// should provide an optional interface for drivers to\n\t// implement to say, \"don't worry, the []bytes that I return\n\t// from Next will not be modified again.\" (for instance, if\n\t// they were obtained from the network anyway) But for now we\n\t// don't care.\n\tdefer r.rows.Close()\n\tfor _, dp := range dest {\n\t\tif _, ok := dp.(*sql.RawBytes); ok {\n\t\t\treturn errors.New(\"sql: RawBytes isn't allowed on Row.Scan\")\n\t\t}\n\t}\n\n\tif !r.rows.Next() {\n\t\tif err := r.rows.Err(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn sql.ErrNoRows\n\t}\n\terr := r.rows.Scan(dest...)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Make sure the query can be processed to completion with no errors.\n\tif err := r.rows.Close(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Columns returns the underlying sql.Rows.Columns(), or the deferred error usually\n// returned by Row.Scan()\nfunc (r *Row) Columns() ([]string, error) {\n\tif r.err != nil {\n\t\treturn []string{}, r.err\n\t}\n\treturn r.rows.Columns()\n}\n\n// Err returns the error encountered while scanning.\nfunc (r *Row) Err() error {\n\treturn r.err\n}\n\n// DB is a wrapper around sql.DB which keeps track of the driverName upon Open,\n// used mostly to automatically bind named queries using the right bindvars.\ntype DB struct {\n\t*sql.DB\n\tdriverName string\n\tunsafe     bool\n\tMapper     *reflectx.Mapper\n}\n\n// NewDb returns a new sqlx DB wrapper for a pre-existing *sql.DB.  The\n// driverName of the original database is required for named query support.\nfunc NewDb(db *sql.DB, driverName string) *DB {\n\treturn &DB{DB: db, driverName: driverName, Mapper: mapper()}\n}\n\n// DriverName returns the driverName passed to the Open function for this DB.\nfunc (db *DB) DriverName() string {\n\treturn db.driverName\n}\n\n// Open is the same as sql.Open, but returns an *sqlx.DB instead.\nfunc Open(driverName, dataSourceName string) (*DB, error) {\n\tdb, err := sql.Open(driverName, dataSourceName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &DB{DB: db, driverName: driverName, Mapper: mapper()}, err\n}\n\n// MustOpen is the same as sql.Open, but returns an *sqlx.DB instead and panics on error.\nfunc MustOpen(driverName, dataSourceName string) *DB {\n\tdb, err := Open(driverName, dataSourceName)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn db\n}\n\n// MapperFunc sets a new mapper for this db using the default sqlx struct tag\n// and the provided mapper function.\nfunc (db *DB) MapperFunc(mf func(string) string) {\n\tdb.Mapper = reflectx.NewMapperFunc(\"db\", mf)\n}\n\n// Rebind transforms a query from QUESTION to the DB driver's bindvar type.\nfunc (db *DB) Rebind(query string) string {\n\treturn Rebind(BindType(db.driverName), query)\n}\n\n// Unsafe returns a version of DB which will silently succeed to scan when\n// columns in the SQL result have no fields in the destination struct.\n// sqlx.Stmt and sqlx.Tx which are created from this DB will inherit its\n// safety behavior.\nfunc (db *DB) Unsafe() *DB {\n\treturn &DB{DB: db.DB, driverName: db.driverName, unsafe: true, Mapper: db.Mapper}\n}\n\n// BindNamed binds a query using the DB driver's bindvar type.\nfunc (db *DB) BindNamed(query string, arg interface{}) (string, []interface{}, error) {\n\treturn bindNamedMapper(BindType(db.driverName), query, arg, db.Mapper)\n}\n\n// NamedQuery using this DB.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (db *DB) NamedQuery(query string, arg interface{}) (*Rows, error) {\n\treturn NamedQuery(db, query, arg)\n}\n\n// NamedExec using this DB.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (db *DB) NamedExec(query string, arg interface{}) (sql.Result, error) {\n\treturn NamedExec(db, query, arg)\n}\n\n// Select using this DB.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) Select(dest interface{}, query string, args ...interface{}) error {\n\treturn Select(db, dest, query, args...)\n}\n\n// Get using this DB.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (db *DB) Get(dest interface{}, query string, args ...interface{}) error {\n\treturn Get(db, dest, query, args...)\n}\n\n// MustBegin starts a transaction, and panics on error.  Returns an *sqlx.Tx instead\n// of an *sql.Tx.\nfunc (db *DB) MustBegin() *Tx {\n\ttx, err := db.Beginx()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn tx\n}\n\n// Beginx begins a transaction and returns an *sqlx.Tx instead of an *sql.Tx.\nfunc (db *DB) Beginx() (*Tx, error) {\n\ttx, err := db.DB.Begin()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err\n}\n\n// Queryx queries the database and returns an *sqlx.Rows.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) Queryx(query string, args ...interface{}) (*Rows, error) {\n\tr, err := db.DB.Query(query, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: db.unsafe, Mapper: db.Mapper}, err\n}\n\n// QueryRowx queries the database and returns an *sqlx.Row.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) QueryRowx(query string, args ...interface{}) *Row {\n\trows, err := db.DB.Query(query, args...)\n\treturn &Row{rows: rows, err: err, unsafe: db.unsafe, Mapper: db.Mapper}\n}\n\n// MustExec (panic) runs MustExec using this database.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) MustExec(query string, args ...interface{}) sql.Result {\n\treturn MustExec(db, query, args...)\n}\n\n// Preparex returns an sqlx.Stmt instead of a sql.Stmt\nfunc (db *DB) Preparex(query string) (*Stmt, error) {\n\treturn Preparex(db, query)\n}\n\n// PrepareNamed returns an sqlx.NamedStmt\nfunc (db *DB) PrepareNamed(query string) (*NamedStmt, error) {\n\treturn prepareNamed(db, query)\n}\n\n// Tx is an sqlx wrapper around sql.Tx with extra functionality\ntype Tx struct {\n\t*sql.Tx\n\tdriverName string\n\tunsafe     bool\n\tMapper     *reflectx.Mapper\n}\n\n// DriverName returns the driverName used by the DB which began this transaction.\nfunc (tx *Tx) DriverName() string {\n\treturn tx.driverName\n}\n\n// Rebind a query within a transaction's bindvar type.\nfunc (tx *Tx) Rebind(query string) string {\n\treturn Rebind(BindType(tx.driverName), query)\n}\n\n// Unsafe returns a version of Tx which will silently succeed to scan when\n// columns in the SQL result have no fields in the destination struct.\nfunc (tx *Tx) Unsafe() *Tx {\n\treturn &Tx{Tx: tx.Tx, driverName: tx.driverName, unsafe: true, Mapper: tx.Mapper}\n}\n\n// BindNamed binds a query within a transaction's bindvar type.\nfunc (tx *Tx) BindNamed(query string, arg interface{}) (string, []interface{}, error) {\n\treturn bindNamedMapper(BindType(tx.driverName), query, arg, tx.Mapper)\n}\n\n// NamedQuery within a transaction.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (tx *Tx) NamedQuery(query string, arg interface{}) (*Rows, error) {\n\treturn NamedQuery(tx, query, arg)\n}\n\n// NamedExec a named query within a transaction.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (tx *Tx) NamedExec(query string, arg interface{}) (sql.Result, error) {\n\treturn NamedExec(tx, query, arg)\n}\n\n// Select within a transaction.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) Select(dest interface{}, query string, args ...interface{}) error {\n\treturn Select(tx, dest, query, args...)\n}\n\n// Queryx within a transaction.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) Queryx(query string, args ...interface{}) (*Rows, error) {\n\tr, err := tx.Tx.Query(query, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: tx.unsafe, Mapper: tx.Mapper}, err\n}\n\n// QueryRowx within a transaction.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) QueryRowx(query string, args ...interface{}) *Row {\n\trows, err := tx.Tx.Query(query, args...)\n\treturn &Row{rows: rows, err: err, unsafe: tx.unsafe, Mapper: tx.Mapper}\n}\n\n// Get within a transaction.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (tx *Tx) Get(dest interface{}, query string, args ...interface{}) error {\n\treturn Get(tx, dest, query, args...)\n}\n\n// MustExec runs MustExec within a transaction.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) MustExec(query string, args ...interface{}) sql.Result {\n\treturn MustExec(tx, query, args...)\n}\n\n// Preparex  a statement within a transaction.\nfunc (tx *Tx) Preparex(query string) (*Stmt, error) {\n\treturn Preparex(tx, query)\n}\n\n// Stmtx returns a version of the prepared statement which runs within a transaction.  Provided\n// stmt can be either *sql.Stmt or *sqlx.Stmt.\nfunc (tx *Tx) Stmtx(stmt interface{}) *Stmt {\n\tvar s *sql.Stmt\n\tswitch v := stmt.(type) {\n\tcase Stmt:\n\t\ts = v.Stmt\n\tcase *Stmt:\n\t\ts = v.Stmt\n\tcase sql.Stmt:\n\t\ts = &v\n\tcase *sql.Stmt:\n\t\ts = v\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"non-statement type %v passed to Stmtx\", reflect.ValueOf(stmt).Type()))\n\t}\n\treturn &Stmt{Stmt: tx.Stmt(s), Mapper: tx.Mapper}\n}\n\n// NamedStmt returns a version of the prepared statement which runs within a transaction.\nfunc (tx *Tx) NamedStmt(stmt *NamedStmt) *NamedStmt {\n\treturn &NamedStmt{\n\t\tQueryString: stmt.QueryString,\n\t\tParams:      stmt.Params,\n\t\tStmt:        tx.Stmtx(stmt.Stmt),\n\t}\n}\n\n// PrepareNamed returns an sqlx.NamedStmt\nfunc (tx *Tx) PrepareNamed(query string) (*NamedStmt, error) {\n\treturn prepareNamed(tx, query)\n}\n\n// Stmt is an sqlx wrapper around sql.Stmt with extra functionality\ntype Stmt struct {\n\t*sql.Stmt\n\tunsafe bool\n\tMapper *reflectx.Mapper\n}\n\n// Unsafe returns a version of Stmt which will silently succeed to scan when\n// columns in the SQL result have no fields in the destination struct.\nfunc (s *Stmt) Unsafe() *Stmt {\n\treturn &Stmt{Stmt: s.Stmt, unsafe: true, Mapper: s.Mapper}\n}\n\n// Select using the prepared statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) Select(dest interface{}, args ...interface{}) error {\n\treturn Select(&qStmt{s}, dest, \"\", args...)\n}\n\n// Get using the prepared statement.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (s *Stmt) Get(dest interface{}, args ...interface{}) error {\n\treturn Get(&qStmt{s}, dest, \"\", args...)\n}\n\n// MustExec (panic) using this statement.  Note that the query portion of the error\n// output will be blank, as Stmt does not expose its query.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) MustExec(args ...interface{}) sql.Result {\n\treturn MustExec(&qStmt{s}, \"\", args...)\n}\n\n// QueryRowx using this statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) QueryRowx(args ...interface{}) *Row {\n\tqs := &qStmt{s}\n\treturn qs.QueryRowx(\"\", args...)\n}\n\n// Queryx using this statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) Queryx(args ...interface{}) (*Rows, error) {\n\tqs := &qStmt{s}\n\treturn qs.Queryx(\"\", args...)\n}\n\n// qStmt is an unexposed wrapper which lets you use a Stmt as a Queryer & Execer by\n// implementing those interfaces and ignoring the `query` argument.\ntype qStmt struct{ *Stmt }\n\nfunc (q *qStmt) Query(query string, args ...interface{}) (*sql.Rows, error) {\n\treturn q.Stmt.Query(args...)\n}\n\nfunc (q *qStmt) Queryx(query string, args ...interface{}) (*Rows, error) {\n\tr, err := q.Stmt.Query(args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}, err\n}\n\nfunc (q *qStmt) QueryRowx(query string, args ...interface{}) *Row {\n\trows, err := q.Stmt.Query(args...)\n\treturn &Row{rows: rows, err: err, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}\n}\n\nfunc (q *qStmt) Exec(query string, args ...interface{}) (sql.Result, error) {\n\treturn q.Stmt.Exec(args...)\n}\n\n// Rows is a wrapper around sql.Rows which caches costly reflect operations\n// during a looped StructScan\ntype Rows struct {\n\t*sql.Rows\n\tunsafe bool\n\tMapper *reflectx.Mapper\n\t// these fields cache memory use for a rows during iteration w/ structScan\n\tstarted bool\n\tfields  [][]int\n\tvalues  []interface{}\n}\n\n// SliceScan using this Rows.\nfunc (r *Rows) SliceScan() ([]interface{}, error) {\n\treturn SliceScan(r)\n}\n\n// MapScan using this Rows.\nfunc (r *Rows) MapScan(dest map[string]interface{}) error {\n\treturn MapScan(r, dest)\n}\n\n// StructScan is like sql.Rows.Scan, but scans a single Row into a single Struct.\n// Use this and iterate over Rows manually when the memory load of Select() might be\n// prohibitive.  *Rows.StructScan caches the reflect work of matching up column\n// positions to fields to avoid that overhead per scan, which means it is not safe\n// to run StructScan on the same Rows instance with different struct types.\nfunc (r *Rows) StructScan(dest interface{}) error {\n\tv := reflect.ValueOf(dest)\n\n\tif v.Kind() != reflect.Ptr {\n\t\treturn errors.New(\"must pass a pointer, not a value, to StructScan destination\")\n\t}\n\n\tv = reflect.Indirect(v)\n\n\tif !r.started {\n\t\tcolumns, err := r.Columns()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm := r.Mapper\n\n\t\tr.fields = m.TraversalsByName(v.Type(), columns)\n\t\t// if we are not unsafe and are missing fields, return an error\n\t\tif f, err := missingFields(r.fields); err != nil && !r.unsafe {\n\t\t\treturn fmt.Errorf(\"missing destination name %s in %T\", columns[f], dest)\n\t\t}\n\t\tr.values = make([]interface{}, len(columns))\n\t\tr.started = true\n\t}\n\n\terr := fieldsByTraversal(v, r.fields, r.values, true)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// scan into the struct field pointers and append to our results\n\terr = r.Scan(r.values...)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn r.Err()\n}\n\n// Connect to a database and verify with a ping.\nfunc Connect(driverName, dataSourceName string) (*DB, error) {\n\tdb, err := Open(driverName, dataSourceName)\n\tif err != nil {\n\t\treturn db, err\n\t}\n\terr = db.Ping()\n\treturn db, err\n}\n\n// MustConnect connects to a database and panics on error.\nfunc MustConnect(driverName, dataSourceName string) *DB {\n\tdb, err := Connect(driverName, dataSourceName)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn db\n}\n\n// Preparex prepares a statement.\nfunc Preparex(p Preparer, query string) (*Stmt, error) {\n\ts, err := p.Prepare(query)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Stmt{Stmt: s, unsafe: isUnsafe(p), Mapper: mapperFor(p)}, err\n}\n\n// Select executes a query using the provided Queryer, and StructScans each row\n// into dest, which must be a slice.  If the slice elements are scannable, then\n// the result set must have only one column.  Otherwise, StructScan is used.\n// The *sql.Rows are closed automatically.\n// Any placeholder parameters are replaced with supplied args.\nfunc Select(q Queryer, dest interface{}, query string, args ...interface{}) error {\n\trows, err := q.Queryx(query, args...)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// if something happens here, we want to make sure the rows are Closed\n\tdefer rows.Close()\n\treturn scanAll(rows, dest, false)\n}\n\n// Get does a QueryRow using the provided Queryer, and scans the resulting row\n// to dest.  If dest is scannable, the result must only have one column.  Otherwise,\n// StructScan is used.  Get will return sql.ErrNoRows like row.Scan would.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc Get(q Queryer, dest interface{}, query string, args ...interface{}) error {\n\tr := q.QueryRowx(query, args...)\n\treturn r.scanAny(dest, false)\n}\n\n// LoadFile exec's every statement in a file (as a single call to Exec).\n// LoadFile may return a nil *sql.Result if errors are encountered locating or\n// reading the file at path.  LoadFile reads the entire file into memory, so it\n// is not suitable for loading large data dumps, but can be useful for initializing\n// schemas or loading indexes.\n//\n// FIXME: this does not really work with multi-statement files for mattn/go-sqlite3\n// or the go-mysql-driver/mysql drivers;  pq seems to be an exception here.  Detecting\n// this by requiring something with DriverName() and then attempting to split the\n// queries will be difficult to get right, and its current driver-specific behavior\n// is deemed at least not complex in its incorrectness.\nfunc LoadFile(e Execer, path string) (*sql.Result, error) {\n\trealpath, err := filepath.Abs(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcontents, err := ioutil.ReadFile(realpath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tres, err := e.Exec(string(contents))\n\treturn &res, err\n}\n\n// MustExec execs the query using e and panics if there was an error.\n// Any placeholder parameters are replaced with supplied args.\nfunc MustExec(e Execer, query string, args ...interface{}) sql.Result {\n\tres, err := e.Exec(query, args...)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn res\n}\n\n// SliceScan using this Rows.\nfunc (r *Row) SliceScan() ([]interface{}, error) {\n\treturn SliceScan(r)\n}\n\n// MapScan using this Rows.\nfunc (r *Row) MapScan(dest map[string]interface{}) error {\n\treturn MapScan(r, dest)\n}\n\nfunc (r *Row) scanAny(dest interface{}, structOnly bool) error {\n\tif r.err != nil {\n\t\treturn r.err\n\t}\n\tif r.rows == nil {\n\t\tr.err = sql.ErrNoRows\n\t\treturn r.err\n\t}\n\tdefer r.rows.Close()\n\n\tv := reflect.ValueOf(dest)\n\tif v.Kind() != reflect.Ptr {\n\t\treturn errors.New(\"must pass a pointer, not a value, to StructScan destination\")\n\t}\n\tif v.IsNil() {\n\t\treturn errors.New(\"nil pointer passed to StructScan destination\")\n\t}\n\n\tbase := reflectx.Deref(v.Type())\n\tscannable := isScannable(base)\n\n\tif structOnly && scannable {\n\t\treturn structOnlyError(base)\n\t}\n\n\tcolumns, err := r.Columns()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif scannable && len(columns) > 1 {\n\t\treturn fmt.Errorf(\"scannable dest type %s with >1 columns (%d) in result\", base.Kind(), len(columns))\n\t}\n\n\tif scannable {\n\t\treturn r.Scan(dest)\n\t}\n\n\tm := r.Mapper\n\n\tfields := m.TraversalsByName(v.Type(), columns)\n\t// if we are not unsafe and are missing fields, return an error\n\tif f, err := missingFields(fields); err != nil && !r.unsafe {\n\t\treturn fmt.Errorf(\"missing destination name %s in %T\", columns[f], dest)\n\t}\n\tvalues := make([]interface{}, len(columns))\n\n\terr = fieldsByTraversal(v, fields, values, true)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// scan into the struct field pointers and append to our results\n\treturn r.Scan(values...)\n}\n\n// StructScan a single Row into dest.\nfunc (r *Row) StructScan(dest interface{}) error {\n\treturn r.scanAny(dest, true)\n}\n\n// SliceScan a row, returning a []interface{} with values similar to MapScan.\n// This function is primarily intended for use where the number of columns\n// is not known.  Because you can pass an []interface{} directly to Scan,\n// it's recommended that you do that as it will not have to allocate new\n// slices per row.\nfunc SliceScan(r ColScanner) ([]interface{}, error) {\n\t// ignore r.started, since we needn't use reflect for anything.\n\tcolumns, err := r.Columns()\n\tif err != nil {\n\t\treturn []interface{}{}, err\n\t}\n\n\tvalues := make([]interface{}, len(columns))\n\tfor i := range values {\n\t\tvalues[i] = new(interface{})\n\t}\n\n\terr = r.Scan(values...)\n\n\tif err != nil {\n\t\treturn values, err\n\t}\n\n\tfor i := range columns {\n\t\tvalues[i] = *(values[i].(*interface{}))\n\t}\n\n\treturn values, r.Err()\n}\n\n// MapScan scans a single Row into the dest map[string]interface{}.\n// Use this to get results for SQL that might not be under your control\n// (for instance, if you're building an interface for an SQL server that\n// executes SQL from input).  Please do not use this as a primary interface!\n// This will modify the map sent to it in place, so reuse the same map with\n// care.  Columns which occur more than once in the result will overwrite\n// each other!\nfunc MapScan(r ColScanner, dest map[string]interface{}) error {\n\t// ignore r.started, since we needn't use reflect for anything.\n\tcolumns, err := r.Columns()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvalues := make([]interface{}, len(columns))\n\tfor i := range values {\n\t\tvalues[i] = new(interface{})\n\t}\n\n\terr = r.Scan(values...)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i, column := range columns {\n\t\tdest[column] = *(values[i].(*interface{}))\n\t}\n\n\treturn r.Err()\n}\n\ntype rowsi interface {\n\tClose() error\n\tColumns() ([]string, error)\n\tErr() error\n\tNext() bool\n\tScan(...interface{}) error\n}\n\n// structOnlyError returns an error appropriate for type when a non-scannable\n// struct is expected but something else is given\nfunc structOnlyError(t reflect.Type) error {\n\tisStruct := t.Kind() == reflect.Struct\n\tisScanner := reflect.PtrTo(t).Implements(_scannerInterface)\n\tif !isStruct {\n\t\treturn fmt.Errorf(\"expected %s but got %s\", reflect.Struct, t.Kind())\n\t}\n\tif isScanner {\n\t\treturn fmt.Errorf(\"structscan expects a struct dest but the provided struct type %s implements scanner\", t.Name())\n\t}\n\treturn fmt.Errorf(\"expected a struct, but struct %s has no exported fields\", t.Name())\n}\n\n// scanAll scans all rows into a destination, which must be a slice of any\n// type.  If the destination slice type is a Struct, then StructScan will be\n// used on each row.  If the destination is some other kind of base type, then\n// each row must only have one column which can scan into that type.  This\n// allows you to do something like:\n//\n//    rows, _ := db.Query(\"select id from people;\")\n//    var ids []int\n//    scanAll(rows, &ids, false)\n//\n// and ids will be a list of the id results.  I realize that this is a desirable\n// interface to expose to users, but for now it will only be exposed via changes\n// to `Get` and `Select`.  The reason that this has been implemented like this is\n// this is the only way to not duplicate reflect work in the new API while\n// maintaining backwards compatibility.\nfunc scanAll(rows rowsi, dest interface{}, structOnly bool) error {\n\tvar v, vp reflect.Value\n\n\tvalue := reflect.ValueOf(dest)\n\n\t// json.Unmarshal returns errors for these\n\tif value.Kind() != reflect.Ptr {\n\t\treturn errors.New(\"must pass a pointer, not a value, to StructScan destination\")\n\t}\n\tif value.IsNil() {\n\t\treturn errors.New(\"nil pointer passed to StructScan destination\")\n\t}\n\tdirect := reflect.Indirect(value)\n\n\tslice, err := baseType(value.Type(), reflect.Slice)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tisPtr := slice.Elem().Kind() == reflect.Ptr\n\tbase := reflectx.Deref(slice.Elem())\n\tscannable := isScannable(base)\n\n\tif structOnly && scannable {\n\t\treturn structOnlyError(base)\n\t}\n\n\tcolumns, err := rows.Columns()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// if it's a base type make sure it only has 1 column;  if not return an error\n\tif scannable && len(columns) > 1 {\n\t\treturn fmt.Errorf(\"non-struct dest type %s with >1 columns (%d)\", base.Kind(), len(columns))\n\t}\n\n\tif !scannable {\n\t\tvar values []interface{}\n\t\tvar m *reflectx.Mapper\n\n\t\tswitch rows.(type) {\n\t\tcase *Rows:\n\t\t\tm = rows.(*Rows).Mapper\n\t\tdefault:\n\t\t\tm = mapper()\n\t\t}\n\n\t\tfields := m.TraversalsByName(base, columns)\n\t\t// if we are not unsafe and are missing fields, return an error\n\t\tif f, err := missingFields(fields); err != nil && !isUnsafe(rows) {\n\t\t\treturn fmt.Errorf(\"missing destination name %s in %T\", columns[f], dest)\n\t\t}\n\t\tvalues = make([]interface{}, len(columns))\n\n\t\tfor rows.Next() {\n\t\t\t// create a new struct type (which returns PtrTo) and indirect it\n\t\t\tvp = reflect.New(base)\n\t\t\tv = reflect.Indirect(vp)\n\n\t\t\terr = fieldsByTraversal(v, fields, values, true)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// scan into the struct field pointers and append to our results\n\t\t\terr = rows.Scan(values...)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif isPtr {\n\t\t\t\tdirect.Set(reflect.Append(direct, vp))\n\t\t\t} else {\n\t\t\t\tdirect.Set(reflect.Append(direct, v))\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor rows.Next() {\n\t\t\tvp = reflect.New(base)\n\t\t\terr = rows.Scan(vp.Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// append\n\t\t\tif isPtr {\n\t\t\t\tdirect.Set(reflect.Append(direct, vp))\n\t\t\t} else {\n\t\t\t\tdirect.Set(reflect.Append(direct, reflect.Indirect(vp)))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn rows.Err()\n}\n\n// FIXME: StructScan was the very first bit of API in sqlx, and now unfortunately\n// it doesn't really feel like it's named properly.  There is an incongruency\n// between this and the way that StructScan (which might better be ScanStruct\n// anyway) works on a rows object.\n\n// StructScan all rows from an sql.Rows or an sqlx.Rows into the dest slice.\n// StructScan will scan in the entire rows result, so if you do not want to\n// allocate structs for the entire result, use Queryx and see sqlx.Rows.StructScan.\n// If rows is sqlx.Rows, it will use its mapper, otherwise it will use the default.\nfunc StructScan(rows rowsi, dest interface{}) error {\n\treturn scanAll(rows, dest, true)\n\n}\n\n// reflect helpers\n\nfunc baseType(t reflect.Type, expected reflect.Kind) (reflect.Type, error) {\n\tt = reflectx.Deref(t)\n\tif t.Kind() != expected {\n\t\treturn nil, fmt.Errorf(\"expected %s but got %s\", expected, t.Kind())\n\t}\n\treturn t, nil\n}\n\n// fieldsByName fills a values interface with fields from the passed value based\n// on the traversals in int.  If ptrs is true, return addresses instead of values.\n// We write this instead of using FieldsByName to save allocations and map lookups\n// when iterating over many rows.  Empty traversals will get an interface pointer.\n// Because of the necessity of requesting ptrs or values, it's considered a bit too\n// specialized for inclusion in reflectx itself.\nfunc fieldsByTraversal(v reflect.Value, traversals [][]int, values []interface{}, ptrs bool) error {\n\tv = reflect.Indirect(v)\n\tif v.Kind() != reflect.Struct {\n\t\treturn errors.New(\"argument not a struct\")\n\t}\n\n\tfor i, traversal := range traversals {\n\t\tif len(traversal) == 0 {\n\t\t\tvalues[i] = new(interface{})\n\t\t\tcontinue\n\t\t}\n\t\tf := reflectx.FieldByIndexes(v, traversal)\n\t\tif ptrs {\n\t\t\tvalues[i] = f.Addr().Interface()\n\t\t} else {\n\t\t\tvalues[i] = f.Interface()\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc missingFields(transversals [][]int) (field int, err error) {\n\tfor i, t := range transversals {\n\t\tif len(t) == 0 {\n\t\t\treturn i, errors.New(\"missing field\")\n\t\t}\n\t}\n\treturn 0, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/sqlx_context.go",
    "content": "// +build go1.8\n\npackage sqlx\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"reflect\"\n)\n\n// ConnectContext to a database and verify with a ping.\nfunc ConnectContext(ctx context.Context, driverName, dataSourceName string) (*DB, error) {\n\tdb, err := Open(driverName, dataSourceName)\n\tif err != nil {\n\t\treturn db, err\n\t}\n\terr = db.PingContext(ctx)\n\treturn db, err\n}\n\n// QueryerContext is an interface used by GetContext and SelectContext\ntype QueryerContext interface {\n\tQueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)\n\tQueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error)\n\tQueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row\n}\n\n// PreparerContext is an interface used by PreparexContext.\ntype PreparerContext interface {\n\tPrepareContext(ctx context.Context, query string) (*sql.Stmt, error)\n}\n\n// ExecerContext is an interface used by MustExecContext and LoadFileContext\ntype ExecerContext interface {\n\tExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)\n}\n\n// ExtContext is a union interface which can bind, query, and exec, with Context\n// used by NamedQueryContext and NamedExecContext.\ntype ExtContext interface {\n\tbinder\n\tQueryerContext\n\tExecerContext\n}\n\n// SelectContext executes a query using the provided Queryer, and StructScans\n// each row into dest, which must be a slice.  If the slice elements are\n// scannable, then the result set must have only one column.  Otherwise,\n// StructScan is used. The *sql.Rows are closed automatically.\n// Any placeholder parameters are replaced with supplied args.\nfunc SelectContext(ctx context.Context, q QueryerContext, dest interface{}, query string, args ...interface{}) error {\n\trows, err := q.QueryxContext(ctx, query, args...)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// if something happens here, we want to make sure the rows are Closed\n\tdefer rows.Close()\n\treturn scanAll(rows, dest, false)\n}\n\n// PreparexContext prepares a statement.\n//\n// The provided context is used for the preparation of the statement, not for\n// the execution of the statement.\nfunc PreparexContext(ctx context.Context, p PreparerContext, query string) (*Stmt, error) {\n\ts, err := p.PrepareContext(ctx, query)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Stmt{Stmt: s, unsafe: isUnsafe(p), Mapper: mapperFor(p)}, err\n}\n\n// GetContext does a QueryRow using the provided Queryer, and scans the\n// resulting row to dest.  If dest is scannable, the result must only have one\n// column. Otherwise, StructScan is used.  Get will return sql.ErrNoRows like\n// row.Scan would. Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc GetContext(ctx context.Context, q QueryerContext, dest interface{}, query string, args ...interface{}) error {\n\tr := q.QueryRowxContext(ctx, query, args...)\n\treturn r.scanAny(dest, false)\n}\n\n// LoadFileContext exec's every statement in a file (as a single call to Exec).\n// LoadFileContext may return a nil *sql.Result if errors are encountered\n// locating or reading the file at path.  LoadFile reads the entire file into\n// memory, so it is not suitable for loading large data dumps, but can be useful\n// for initializing schemas or loading indexes.\n//\n// FIXME: this does not really work with multi-statement files for mattn/go-sqlite3\n// or the go-mysql-driver/mysql drivers;  pq seems to be an exception here.  Detecting\n// this by requiring something with DriverName() and then attempting to split the\n// queries will be difficult to get right, and its current driver-specific behavior\n// is deemed at least not complex in its incorrectness.\nfunc LoadFileContext(ctx context.Context, e ExecerContext, path string) (*sql.Result, error) {\n\trealpath, err := filepath.Abs(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcontents, err := ioutil.ReadFile(realpath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tres, err := e.ExecContext(ctx, string(contents))\n\treturn &res, err\n}\n\n// MustExecContext execs the query using e and panics if there was an error.\n// Any placeholder parameters are replaced with supplied args.\nfunc MustExecContext(ctx context.Context, e ExecerContext, query string, args ...interface{}) sql.Result {\n\tres, err := e.ExecContext(ctx, query, args...)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn res\n}\n\n// PrepareNamedContext returns an sqlx.NamedStmt\nfunc (db *DB) PrepareNamedContext(ctx context.Context, query string) (*NamedStmt, error) {\n\treturn prepareNamedContext(ctx, db, query)\n}\n\n// NamedQueryContext using this DB.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (db *DB) NamedQueryContext(ctx context.Context, query string, arg interface{}) (*Rows, error) {\n\treturn NamedQueryContext(ctx, db, query, arg)\n}\n\n// NamedExecContext using this DB.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (db *DB) NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error) {\n\treturn NamedExecContext(ctx, db, query, arg)\n}\n\n// SelectContext using this DB.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {\n\treturn SelectContext(ctx, db, dest, query, args...)\n}\n\n// GetContext using this DB.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (db *DB) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {\n\treturn GetContext(ctx, db, dest, query, args...)\n}\n\n// PreparexContext returns an sqlx.Stmt instead of a sql.Stmt.\n//\n// The provided context is used for the preparation of the statement, not for\n// the execution of the statement.\nfunc (db *DB) PreparexContext(ctx context.Context, query string) (*Stmt, error) {\n\treturn PreparexContext(ctx, db, query)\n}\n\n// QueryxContext queries the database and returns an *sqlx.Rows.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {\n\tr, err := db.DB.QueryContext(ctx, query, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: db.unsafe, Mapper: db.Mapper}, err\n}\n\n// QueryRowxContext queries the database and returns an *sqlx.Row.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row {\n\trows, err := db.DB.QueryContext(ctx, query, args...)\n\treturn &Row{rows: rows, err: err, unsafe: db.unsafe, Mapper: db.Mapper}\n}\n\n// MustBeginTx starts a transaction, and panics on error.  Returns an *sqlx.Tx instead\n// of an *sql.Tx.\n//\n// The provided context is used until the transaction is committed or rolled\n// back. If the context is canceled, the sql package will roll back the\n// transaction. Tx.Commit will return an error if the context provided to\n// MustBeginContext is canceled.\nfunc (db *DB) MustBeginTx(ctx context.Context, opts *sql.TxOptions) *Tx {\n\ttx, err := db.BeginTxx(ctx, opts)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn tx\n}\n\n// MustExecContext (panic) runs MustExec using this database.\n// Any placeholder parameters are replaced with supplied args.\nfunc (db *DB) MustExecContext(ctx context.Context, query string, args ...interface{}) sql.Result {\n\treturn MustExecContext(ctx, db, query, args...)\n}\n\n// BeginTxx begins a transaction and returns an *sqlx.Tx instead of an\n// *sql.Tx.\n//\n// The provided context is used until the transaction is committed or rolled\n// back. If the context is canceled, the sql package will roll back the\n// transaction. Tx.Commit will return an error if the context provided to\n// BeginxContext is canceled.\nfunc (db *DB) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {\n\ttx, err := db.DB.BeginTx(ctx, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Tx{Tx: tx, driverName: db.driverName, unsafe: db.unsafe, Mapper: db.Mapper}, err\n}\n\n// StmtxContext returns a version of the prepared statement which runs within a\n// transaction. Provided stmt can be either *sql.Stmt or *sqlx.Stmt.\nfunc (tx *Tx) StmtxContext(ctx context.Context, stmt interface{}) *Stmt {\n\tvar s *sql.Stmt\n\tswitch v := stmt.(type) {\n\tcase Stmt:\n\t\ts = v.Stmt\n\tcase *Stmt:\n\t\ts = v.Stmt\n\tcase sql.Stmt:\n\t\ts = &v\n\tcase *sql.Stmt:\n\t\ts = v\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"non-statement type %v passed to Stmtx\", reflect.ValueOf(stmt).Type()))\n\t}\n\treturn &Stmt{Stmt: tx.StmtContext(ctx, s), Mapper: tx.Mapper}\n}\n\n// NamedStmtContext returns a version of the prepared statement which runs\n// within a transaction.\nfunc (tx *Tx) NamedStmtContext(ctx context.Context, stmt *NamedStmt) *NamedStmt {\n\treturn &NamedStmt{\n\t\tQueryString: stmt.QueryString,\n\t\tParams:      stmt.Params,\n\t\tStmt:        tx.StmtxContext(ctx, stmt.Stmt),\n\t}\n}\n\n// MustExecContext runs MustExecContext within a transaction.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) MustExecContext(ctx context.Context, query string, args ...interface{}) sql.Result {\n\treturn MustExecContext(ctx, tx, query, args...)\n}\n\n// QueryxContext within a transaction and context.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {\n\tr, err := tx.Tx.QueryContext(ctx, query, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: tx.unsafe, Mapper: tx.Mapper}, err\n}\n\n// SelectContext within a transaction and context.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {\n\treturn SelectContext(ctx, tx, dest, query, args...)\n}\n\n// GetContext within a transaction and context.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (tx *Tx) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {\n\treturn GetContext(ctx, tx, dest, query, args...)\n}\n\n// QueryRowxContext within a transaction and context.\n// Any placeholder parameters are replaced with supplied args.\nfunc (tx *Tx) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row {\n\trows, err := tx.Tx.QueryContext(ctx, query, args...)\n\treturn &Row{rows: rows, err: err, unsafe: tx.unsafe, Mapper: tx.Mapper}\n}\n\n// NamedExecContext using this Tx.\n// Any named placeholder parameters are replaced with fields from arg.\nfunc (tx *Tx) NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error) {\n\treturn NamedExecContext(ctx, tx, query, arg)\n}\n\n// SelectContext using the prepared statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) SelectContext(ctx context.Context, dest interface{}, args ...interface{}) error {\n\treturn SelectContext(ctx, &qStmt{s}, dest, \"\", args...)\n}\n\n// GetContext using the prepared statement.\n// Any placeholder parameters are replaced with supplied args.\n// An error is returned if the result set is empty.\nfunc (s *Stmt) GetContext(ctx context.Context, dest interface{}, args ...interface{}) error {\n\treturn GetContext(ctx, &qStmt{s}, dest, \"\", args...)\n}\n\n// MustExecContext (panic) using this statement.  Note that the query portion of\n// the error output will be blank, as Stmt does not expose its query.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) MustExecContext(ctx context.Context, args ...interface{}) sql.Result {\n\treturn MustExecContext(ctx, &qStmt{s}, \"\", args...)\n}\n\n// QueryRowxContext using this statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) QueryRowxContext(ctx context.Context, args ...interface{}) *Row {\n\tqs := &qStmt{s}\n\treturn qs.QueryRowxContext(ctx, \"\", args...)\n}\n\n// QueryxContext using this statement.\n// Any placeholder parameters are replaced with supplied args.\nfunc (s *Stmt) QueryxContext(ctx context.Context, args ...interface{}) (*Rows, error) {\n\tqs := &qStmt{s}\n\treturn qs.QueryxContext(ctx, \"\", args...)\n}\n\nfunc (q *qStmt) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) {\n\treturn q.Stmt.QueryContext(ctx, args...)\n}\n\nfunc (q *qStmt) QueryxContext(ctx context.Context, query string, args ...interface{}) (*Rows, error) {\n\tr, err := q.Stmt.QueryContext(ctx, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Rows{Rows: r, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}, err\n}\n\nfunc (q *qStmt) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *Row {\n\trows, err := q.Stmt.QueryContext(ctx, args...)\n\treturn &Row{rows: rows, err: err, unsafe: q.Stmt.unsafe, Mapper: q.Stmt.Mapper}\n}\n\nfunc (q *qStmt) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) {\n\treturn q.Stmt.ExecContext(ctx, args...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/jmoiron/sqlx/types/types.go",
    "content": "package types\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"database/sql/driver\"\n\t\"encoding/json\"\n\t\"errors\"\n\n\t\"io/ioutil\"\n)\n\n// GzippedText is a []byte which transparently gzips data being submitted to\n// a database and ungzips data being Scanned from a database.\ntype GzippedText []byte\n\n// Value implements the driver.Valuer interface, gzipping the raw value of\n// this GzippedText.\nfunc (g GzippedText) Value() (driver.Value, error) {\n\tb := make([]byte, 0, len(g))\n\tbuf := bytes.NewBuffer(b)\n\tw := gzip.NewWriter(buf)\n\tw.Write(g)\n\tw.Close()\n\treturn buf.Bytes(), nil\n\n}\n\n// Scan implements the sql.Scanner interface, ungzipping the value coming off\n// the wire and storing the raw result in the GzippedText.\nfunc (g *GzippedText) Scan(src interface{}) error {\n\tvar source []byte\n\tswitch src.(type) {\n\tcase string:\n\t\tsource = []byte(src.(string))\n\tcase []byte:\n\t\tsource = src.([]byte)\n\tdefault:\n\t\treturn errors.New(\"Incompatible type for GzippedText\")\n\t}\n\treader, err := gzip.NewReader(bytes.NewReader(source))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer reader.Close()\n\tb, err := ioutil.ReadAll(reader)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*g = GzippedText(b)\n\treturn nil\n}\n\n// JSONText is a json.RawMessage, which is a []byte underneath.\n// Value() validates the json format in the source, and returns an error if\n// the json is not valid.  Scan does no validation.  JSONText additionally\n// implements `Unmarshal`, which unmarshals the json within to an interface{}\ntype JSONText json.RawMessage\n\nvar emptyJSON = JSONText(\"{}\")\n\n// MarshalJSON returns the *j as the JSON encoding of j.\nfunc (j JSONText) MarshalJSON() ([]byte, error) {\n\tif len(j) == 0 {\n\t\treturn emptyJSON, nil\n\t}\n\treturn j, nil\n}\n\n// UnmarshalJSON sets *j to a copy of data\nfunc (j *JSONText) UnmarshalJSON(data []byte) error {\n\tif j == nil {\n\t\treturn errors.New(\"JSONText: UnmarshalJSON on nil pointer\")\n\t}\n\t*j = append((*j)[0:0], data...)\n\treturn nil\n}\n\n// Value returns j as a value.  This does a validating unmarshal into another\n// RawMessage.  If j is invalid json, it returns an error.\nfunc (j JSONText) Value() (driver.Value, error) {\n\tvar m json.RawMessage\n\tvar err = j.Unmarshal(&m)\n\tif err != nil {\n\t\treturn []byte{}, err\n\t}\n\treturn []byte(j), nil\n}\n\n// Scan stores the src in *j.  No validation is done.\nfunc (j *JSONText) Scan(src interface{}) error {\n\tvar source []byte\n\tswitch t := src.(type) {\n\tcase string:\n\t\tsource = []byte(t)\n\tcase []byte:\n\t\tif len(t) == 0 {\n\t\t\tsource = emptyJSON\n\t\t} else {\n\t\t\tsource = t\n\t\t}\n\tcase nil:\n\t\t*j = emptyJSON\n\tdefault:\n\t\treturn errors.New(\"Incompatible type for JSONText\")\n\t}\n\t*j = JSONText(append((*j)[0:0], source...))\n\treturn nil\n}\n\n// Unmarshal unmarshal's the json in j to v, as in json.Unmarshal.\nfunc (j *JSONText) Unmarshal(v interface{}) error {\n\tif len(*j) == 0 {\n\t\t*j = emptyJSON\n\t}\n\treturn json.Unmarshal([]byte(*j), v)\n}\n\n// String supports pretty printing for JSONText types.\nfunc (j JSONText) String() string {\n\treturn string(j)\n}\n\n// NullJSONText represents a JSONText that may be null.\n// NullJSONText implements the scanner interface so\n// it can be used as a scan destination, similar to NullString.\ntype NullJSONText struct {\n\tJSONText\n\tValid bool // Valid is true if JSONText is not NULL\n}\n\n// Scan implements the Scanner interface.\nfunc (n *NullJSONText) Scan(value interface{}) error {\n\tif value == nil {\n\t\tn.JSONText, n.Valid = emptyJSON, false\n\t\treturn nil\n\t}\n\tn.Valid = true\n\treturn n.JSONText.Scan(value)\n}\n\n// Value implements the driver Valuer interface.\nfunc (n NullJSONText) Value() (driver.Value, error) {\n\tif !n.Valid {\n\t\treturn nil, nil\n\t}\n\treturn n.JSONText.Value()\n}\n\n// BitBool is an implementation of a bool for the MySQL type BIT(1).\n// This type allows you to avoid wasting an entire byte for MySQL's boolean type TINYINT.\ntype BitBool bool\n\n// Value implements the driver.Valuer interface,\n// and turns the BitBool into a bitfield (BIT(1)) for MySQL storage.\nfunc (b BitBool) Value() (driver.Value, error) {\n\tif b {\n\t\treturn []byte{1}, nil\n\t}\n\treturn []byte{0}, nil\n}\n\n// Scan implements the sql.Scanner interface,\n// and turns the bitfield incoming from MySQL into a BitBool\nfunc (b *BitBool) Scan(src interface{}) error {\n\tv, ok := src.([]byte)\n\tif !ok {\n\t\treturn errors.New(\"bad []byte type assertion\")\n\t}\n\t*b = v[0] == 1\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/namsral/flag/extras.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\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strings\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// DefaultConfigFlagname defines the flag name of the optional config file\n// path. Used to lookup and parse the config file when a default is set and\n// available on disk.\nvar DefaultConfigFlagname = \"config\"\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/namsral/flag/flag.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/*\n\tPackage flag implements command-line flag parsing.\n\n\tUsage:\n\n\tDefine flags using flag.String(), Bool(), Int(), etc.\n\n\tThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\t\timport \"flag\"\n\t\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\tIf you like, you can bind the flag to a variable using the Var() functions.\n\t\tvar flagvar int\n\t\tfunc init() {\n\t\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t\t}\n\tOr you can create custom flags that satisfy the Value interface (with\n\tpointer receivers) and couple them to flag parsing by\n\t\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\n\tFor such flags, the default value is just the initial value of the variable.\n\n\tAfter all flags are defined, call\n\t\tflag.Parse()\n\tto parse the command line into the defined flags.\n\n\tFlags may then be used directly. If you're using the flags themselves,\n\tthey are all pointers; if you bind to variables, they're values.\n\t\tfmt.Println(\"ip has value \", *ip)\n\t\tfmt.Println(\"flagvar has value \", flagvar)\n\n\tAfter parsing, the arguments following the flags are available as the\n\tslice flag.Args() or individually as flag.Arg(i).\n\tThe arguments are indexed from 0 through flag.NArg()-1.\n\n\tCommand line flag syntax:\n\t\t-flag\n\t\t-flag=x\n\t\t-flag x  // non-boolean flags only\n\tOne or two minus signs may be used; they are equivalent.\n\tThe last form is not permitted for boolean flags because the\n\tmeaning of the command\n\t\tcmd -x *\n\twill change if there is a file called 0, false, etc.  You must\n\tuse the -flag=false form to turn off a boolean flag.\n\n\tFlag parsing stops just before the first non-flag argument\n\t(\"-\" is a non-flag argument) or after the terminator \"--\".\n\n\tInteger flags accept 1234, 0664, 0x1234 and may be negative.\n\tBoolean flags may be:\n\t\t1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False\n\tDuration flags accept any input valid for time.ParseDuration.\n\n\tThe default set of command-line flags is controlled by\n\ttop-level functions.  The FlagSet type allows one to define\n\tindependent sets of flags, such as to implement subcommands\n\tin a command-line interface. The methods of FlagSet are\n\tanalogous to the top-level functions for the command-line\n\tflag set.\n*/\npackage flag\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ErrHelp is the error returned if the -help or -h flag is invoked\n// but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\n//\n// Set is called once, in command line order, for each flag present.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how FlagSet.Parse behaves if the parse fails.\ntype ErrorHandling int\n\n// These constants cause FlagSet.Parse to behave as described if the parse fails.\nconst (\n\tContinueOnError ErrorHandling = iota // Return a descriptive error.\n\tExitOnError                          // Call os.Exit(2).\n\tPanicOnError                         // Call panic with a descriptive error.\n)\n\n// A FlagSet represents a set of defined flags. The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each. It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each. It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// isZeroValue guesses whether the string represents the zero\n// value for a flag. It is not accurate but in practice works OK.\nfunc isZeroValue(flag *Flag, value string) bool {\n\t// Build a zero value of the flag's Value type, and see if the\n\t// result of calling its String method equals the value passed in.\n\t// This works unless the Value type is itself an interface type.\n\ttyp := reflect.TypeOf(flag.Value)\n\tvar z reflect.Value\n\tif typ.Kind() == reflect.Ptr {\n\t\tz = reflect.New(typ.Elem())\n\t} else {\n\t\tz = reflect.Zero(typ)\n\t}\n\tif value == z.Interface().(Value).String() {\n\t\treturn true\n\t}\n\n\tswitch value {\n\tcase \"false\":\n\t\treturn true\n\tcase \"\":\n\t\treturn true\n\tcase \"0\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\t// No explicit name, so use type if we can find one.\n\tname = \"value\"\n\tswitch flag.Value.(type) {\n\tcase boolFlag:\n\t\tname = \"\"\n\tcase *durationValue:\n\t\tname = \"duration\"\n\tcase *float64Value:\n\t\tname = \"float\"\n\tcase *intValue, *int64Value:\n\t\tname = \"int\"\n\tcase *stringValue:\n\t\tname = \"string\"\n\tcase *uintValue, *uint64Value:\n\t\tname = \"uint\"\n\t}\n\treturn\n}\n\n// PrintDefaults prints to standard error the default values of all\n// defined command-line flags in the set. See the documentation for\n// the global function PrintDefaults for more information.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\ts := fmt.Sprintf(\"  -%s\", flag.Name) // Two spaces before -; see next two comments.\n\t\tname, usage := UnquoteUsage(flag)\n\t\tif len(name) > 0 {\n\t\t\ts += \" \" + name\n\t\t}\n\t\t// Boolean flags of one ASCII letter are so common we\n\t\t// treat them specially, putting their usage on the same line.\n\t\tif len(s) <= 4 { // space, space, '-', 'x'.\n\t\t\ts += \"\\t\"\n\t\t} else {\n\t\t\t// Four spaces before the tab triggers good alignment\n\t\t\t// for both 4- and 8-space tab stops.\n\t\t\ts += \"\\n    \\t\"\n\t\t}\n\t\ts += usage\n\t\tif !isZeroValue(flag, flag.DefValue) {\n\t\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t\t// put quotes on the value\n\t\t\t\ts += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\ts += fmt.Sprintf(\" (default %v)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(f.out(), s, \"\\n\")\n\t})\n}\n\n// PrintDefaults prints, to standard error unless configured otherwise,\n// a usage message showing the default settings of all defined\n// command-line flags.\n// For an integer valued flag x, the default output has the form\n//\t-x int\n//\t\tusage-message-for-x (default 7)\n// The usage message will appear on a separate line for anything but\n// a bool flag with a one-byte name. For bool flags, the type is\n// omitted and if the flag name is one byte the usage message appears\n// on the same line. The parenthetical default is omitted if the\n// default is the zero value for the type. The listed type, here int,\n// can be changed by placing a back-quoted name in the flag's usage\n// string; the first such item in the message is taken to be a parameter\n// name to show in the message and the back quotes are stripped from\n// the message when displayed. For instance, given\n//\tflag.String(\"I\", \"\", \"search `directory` for include files\")\n// the output will be\n//\t-I directory\n//\t\tsearch directory for include files.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// It is called when an error occurs while parsing flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set if one is specified,\n// or the appropriate default usage function otherwise.\nfunc (f *FlagSet) usage() {\n\tif f.Usage == nil {\n\t\tif f == CommandLine {\n\t\t\tUsage()\n\t\t} else {\n\t\t\tdefaultUsage(f)\n\t\t}\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// ignore go test flags\n\tif strings.HasPrefix(name, \"test.\") {\n\t\treturn false, nil\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := fv.Set(\"true\"); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean flag %s: %v\", name, err)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name. Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help or -h were set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tif err := f.ParseEnv(os.Environ()); err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t\treturn err\n\t}\n\n\t// Parse configuration from file\n\tvar cFile string\n\tif cf := f.formal[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cf := f.actual[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cFile != \"\" {\n\t\tif err := f.ParseFile(cFile); err != nil {\n\t\t\tswitch f.errorHandling {\n\t\t\tcase ContinueOnError:\n\t\t\t\treturn err\n\t\t\tcase ExitOnError:\n\t\t\t\tos.Exit(2)\n\t\t\tcase PanicOnError:\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed reports whether the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and so on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/LICENSE",
    "content": "Copyright (c) 2012 Alex Ogier. All rights reserved.\nCopyright (c) 2012 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": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/bool.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Type() string {\n\treturn \"bool\"\n}\n\nfunc (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\nfunc boolConv(sval string) (interface{}, error) {\n\treturn strconv.ParseBool(sval)\n}\n\n// GetBool return the bool value of a flag with the given name\nfunc (f *FlagSet) GetBool(name string) (bool, error) {\n\tval, err := f.getFlagType(name, \"bool\", boolConv)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn val.(bool), nil\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.BoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := f.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tBoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\treturn f.BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolP(name, shorthand string, value bool, usage string) *bool {\n\tb := CommandLine.BoolP(name, shorthand, value, usage)\n\treturn b\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/bool_slice.go",
    "content": "package pflag\n\nimport (\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- boolSlice Value\ntype boolSliceValue struct {\n\tvalue   *[]bool\n\tchanged bool\n}\n\nfunc newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue {\n\tbsv := new(boolSliceValue)\n\tbsv.value = p\n\t*bsv.value = val\n\treturn bsv\n}\n\n// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag.\n// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended.\nfunc (s *boolSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tboolStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse boolean values into slice\n\tout := make([]bool, 0, len(boolStrSlice))\n\tfor _, boolStr := range boolStrSlice {\n\t\tb, err := strconv.ParseBool(strings.TrimSpace(boolStr))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout = append(out, b)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *boolSliceValue) Type() string {\n\treturn \"boolSlice\"\n}\n\n// String defines a \"native\" format for this boolean slice flag value.\nfunc (s *boolSliceValue) String() string {\n\n\tboolStrSlice := make([]string, len(*s.value))\n\tfor i, b := range *s.value {\n\t\tboolStrSlice[i] = strconv.FormatBool(b)\n\t}\n\n\tout, _ := writeAsCSV(boolStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc boolSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []bool{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]bool, len(ss))\n\tfor i, t := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseBool(t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// GetBoolSlice returns the []bool value of a flag with the given name.\nfunc (f *FlagSet) GetBoolSlice(name string) ([]bool, error) {\n\tval, err := f.getFlagType(name, \"boolSlice\", boolSliceConv)\n\tif err != nil {\n\t\treturn []bool{}, err\n\t}\n\treturn val.([]bool), nil\n}\n\n// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSliceVar defines a []bool flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc BoolSlice(name string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, \"\", value, usage)\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/count.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- count Value\ntype countValue int\n\nfunc newCountValue(val int, p *int) *countValue {\n\t*p = val\n\treturn (*countValue)(p)\n}\n\nfunc (i *countValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t// -1 means that no specific value was passed, so increment\n\tif v == -1 {\n\t\t*i = countValue(*i + 1)\n\t} else {\n\t\t*i = countValue(v)\n\t}\n\treturn err\n}\n\nfunc (i *countValue) Type() string {\n\treturn \"count\"\n}\n\nfunc (i *countValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc countConv(sval string) (interface{}, error) {\n\ti, err := strconv.Atoi(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn i, nil\n}\n\n// GetCount return the int value of a flag with the given name\nfunc (f *FlagSet) GetCount(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"count\", countConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// CountVar defines a count flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\n// A count flag will add 1 to its value evey time it is found on the command line\nfunc (f *FlagSet) CountVar(p *int, name string, usage string) {\n\tf.CountVarP(p, name, \"\", usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {\n\tflag := f.VarPF(newCountValue(0, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"-1\"\n}\n\n// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set\nfunc CountVar(p *int, name string, usage string) {\n\tCommandLine.CountVar(p, name, usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc CountVarP(p *int, name, shorthand string, usage string) {\n\tCommandLine.CountVarP(p, name, shorthand, usage)\n}\n\n// Count defines a count flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\n// A count flag will add 1 to its value evey time it is found on the command line\nfunc (f *FlagSet) Count(name string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, \"\", usage)\n\treturn p\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc (f *FlagSet) CountP(name, shorthand string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, shorthand, usage)\n\treturn p\n}\n\n// Count like Count only the flag is placed on the CommandLine isntead of a given flag set\nfunc Count(name string, usage string) *int {\n\treturn CommandLine.CountP(name, \"\", usage)\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc CountP(name, shorthand string, usage string) *int {\n\treturn CommandLine.CountP(name, shorthand, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/duration.go",
    "content": "package pflag\n\nimport (\n\t\"time\"\n)\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Type() string {\n\treturn \"duration\"\n}\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\nfunc durationConv(sval string) (interface{}, error) {\n\treturn time.ParseDuration(sval)\n}\n\n// GetDuration return the duration value of a flag with the given name\nfunc (f *FlagSet) GetDuration(name string) (time.Duration, error) {\n\tval, err := f.getFlagType(name, \"duration\", durationConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(time.Duration), nil\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, \"\", value, usage)\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/flag.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/*\nPackage pflag is a drop-in replacement for Go's flag package, implementing\nPOSIX/GNU-style --flags.\n\npflag is compatible with the GNU extensions to the POSIX recommendations\nfor command-line options. See\nhttp://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html\n\nUsage:\n\npflag is a drop-in replacement of Go's native flag package. If you import\npflag under the name \"flag\" then all code should continue to function\nwith no changes.\n\n\timport flag \"github.com/spf13/pflag\"\n\nThere is one exception to this: if you directly instantiate the Flag struct\nthere is one more field \"Shorthand\" that you will need to set.\nMost code never instantiates this struct directly, and instead uses\nfunctions such as String(), BoolVar(), and Var(), and is therefore\nunaffected.\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\nIf you like, you can bind the flag to a variable using the Var() functions.\n\tvar flagvar int\n\tfunc init() {\n\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t}\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n\tflag.Parse()\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n\tfmt.Println(\"ip has value \", *ip)\n\tfmt.Println(\"flagvar has value \", flagvar)\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nThe pflag package also defines some new functions that are not in flag,\nthat give one-letter shorthands for flags. You can use these by appending\n'P' to the name of any function that defines a flag.\n\tvar ip = flag.IntP(\"flagname\", \"f\", 1234, \"help message\")\n\tvar flagvar bool\n\tfunc init() {\n\t\tflag.BoolVarP(\"boolname\", \"b\", true, \"help message\")\n\t}\n\tflag.VarP(&flagVar, \"varname\", \"v\", 1234, \"help message\")\nShorthand letters can be used with single dashes on the command line.\nBoolean shorthand flags can be combined with other shorthand flags.\n\nCommand line flag syntax:\n\t--flag    // boolean flags only\n\t--flag=x\n\nUnlike the flag package, a single dash before an option means something\ndifferent than a double dash. Single dashes signify a series of shorthand\nletters for flags. All but the last shorthand letter must be boolean flags.\n\t// boolean flags\n\t-f\n\t-abc\n\t// non-boolean flags\n\t-n 1234\n\t-Ifile\n\t// mixed\n\t-abcs \"hello\"\n\t-abcn1234\n\nFlag parsing stops after the terminator \"--\". Unlike the flag package,\nflags can be interspersed with arguments anywhere on the command line\nbefore this terminator.\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags (in their long form) accept 1, 0, t, f, true, false,\nTRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n*/\npackage pflag\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.\nvar ErrHelp = errors.New(\"pflag: help requested\")\n\n// ErrorHandling defines how to handle flag parsing errors.\ntype ErrorHandling int\n\nconst (\n\t// ContinueOnError will return an err from Parse() if an error is found\n\tContinueOnError ErrorHandling = iota\n\t// ExitOnError will call os.Exit(2) if an error is found when parsing\n\tExitOnError\n\t// PanicOnError will panic() if an error is found when parsing flags\n\tPanicOnError\n)\n\n// NormalizedName is a flag name that has been normalized according to rules\n// for the FlagSet (e.g. making '-' and '_' equivalent).\ntype NormalizedName string\n\n// A FlagSet represents a set of defined flags.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\t// SortFlags is used to indicate, if user wants to have sorted flags in\n\t// help/usage messages.\n\tSortFlags bool\n\n\tname              string\n\tparsed            bool\n\tactual            map[NormalizedName]*Flag\n\torderedActual     []*Flag\n\tsortedActual      []*Flag\n\tformal            map[NormalizedName]*Flag\n\torderedFormal     []*Flag\n\tsortedFormal      []*Flag\n\tshorthands        map[byte]*Flag\n\targs              []string // arguments after flags\n\targsLenAtDash     int      // len(args) when a '--' was located when parsing, or -1 if no --\n\terrorHandling     ErrorHandling\n\toutput            io.Writer // nil means stderr; use out() accessor\n\tinterspersed      bool      // allow interspersed option/non-option args\n\tnormalizeNameFunc func(f *FlagSet, name string) NormalizedName\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName                string              // name as it appears on command line\n\tShorthand           string              // one-letter abbreviated flag\n\tUsage               string              // help message\n\tValue               Value               // value as set\n\tDefValue            string              // default value (as text); for usage message\n\tChanged             bool                // If the user set the value (or if left to default)\n\tNoOptDefVal         string              // default value (as text); if the flag is on the command line without any options\n\tDeprecated          string              // If this flag is deprecated, this string is the new or now thing to use\n\tHidden              bool                // used by cobra.Command to allow flags to be hidden from help/usage text\n\tShorthandDeprecated string              // If the shorthand of this flag is deprecated, this string is the new or now thing to use\n\tAnnotations         map[string][]string // used by cobra.Command bash autocomple code\n}\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\ntype Value interface {\n\tString() string\n\tSet(string) error\n\tType() string\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[NormalizedName]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor k := range flags {\n\t\tlist[i] = string(k)\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[NormalizedName(name)]\n\t}\n\treturn result\n}\n\n// SetNormalizeFunc allows you to add a function which can translate flag names.\n// Flags added to the FlagSet will be translated and then when anything tries to\n// look up the flag that will also be translated. So it would be possible to create\n// a flag named \"getURL\" and have it translated to \"geturl\".  A user could then pass\n// \"--getUrl\" which may also be translated to \"geturl\" and everything will work.\nfunc (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) {\n\tf.normalizeNameFunc = n\n\tf.sortedFormal = f.sortedFormal[:0]\n\tfor k, v := range f.orderedFormal {\n\t\tdelete(f.formal, NormalizedName(v.Name))\n\t\tnname := f.normalizeFlagName(v.Name)\n\t\tv.Name = string(nname)\n\t\tf.formal[nname] = v\n\t\tf.orderedFormal[k] = v\n\t}\n}\n\n// GetNormalizeFunc returns the previously set NormalizeFunc of a function which\n// does no translation, if not set previously.\nfunc (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) NormalizedName {\n\tif f.normalizeNameFunc != nil {\n\t\treturn f.normalizeNameFunc\n\t}\n\treturn func(f *FlagSet, name string) NormalizedName { return NormalizedName(name) }\n}\n\nfunc (f *FlagSet) normalizeFlagName(name string) NormalizedName {\n\tn := f.GetNormalizeFunc()\n\treturn n(f, name)\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tif len(f.formal) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.formal) != len(f.sortedFormal) {\n\t\t\tf.sortedFormal = sortFlags(f.formal)\n\t\t}\n\t\tflags = f.sortedFormal\n\t} else {\n\t\tflags = f.orderedFormal\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// HasFlags returns a bool to indicate if the FlagSet has any flags definied.\nfunc (f *FlagSet) HasFlags() bool {\n\treturn len(f.formal) > 0\n}\n\n// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags\n// definied that are not hidden or deprecated.\nfunc (f *FlagSet) HasAvailableFlags() bool {\n\tfor _, flag := range f.formal {\n\t\tif !flag.Hidden && len(flag.Deprecated) == 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// VisitAll visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tif len(f.actual) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.actual) != len(f.sortedActual) {\n\t\t\tf.sortedActual = sortFlags(f.actual)\n\t\t}\n\t\tflags = f.sortedActual\n\t} else {\n\t\tflags = f.orderedActual\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.lookup(f.normalizeFlagName(name))\n}\n\n// lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) lookup(name NormalizedName) *Flag {\n\treturn f.formal[name]\n}\n\n// func to return a given type for a given flag name\nfunc (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\terr := fmt.Errorf(\"flag accessed but not defined: %s\", name)\n\t\treturn nil, err\n\t}\n\n\tif flag.Value.Type() != ftype {\n\t\terr := fmt.Errorf(\"trying to get %s value of flag of type %s\", ftype, flag.Value.Type())\n\t\treturn nil, err\n\t}\n\n\tsval := flag.Value.String()\n\tresult, err := convFunc(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result, nil\n}\n\n// ArgsLenAtDash will return the length of f.Args at the moment when a -- was\n// found during arg parsing. This allows your program to know which args were\n// before the -- and which came after.\nfunc (f *FlagSet) ArgsLenAtDash() int {\n\treturn f.argsLenAtDash\n}\n\n// MarkDeprecated indicated that a flag is deprecated in your program. It will\n// continue to function but will not show up in help or usage messages. Using\n// this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tif len(usageMessage) == 0 {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.Deprecated = usageMessage\n\treturn nil\n}\n\n// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your\n// program. It will continue to function but will not show up in help or usage\n// messages. Using this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tif len(usageMessage) == 0 {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.ShorthandDeprecated = usageMessage\n\treturn nil\n}\n\n// MarkHidden sets a flag to 'hidden' in your program. It will continue to\n// function but will not show up in help or usage messages.\nfunc (f *FlagSet) MarkHidden(name string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag %q does not exist\", name)\n\t}\n\tflag.Hidden = true\n\treturn nil\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.Lookup(name)\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[NormalizedName]*Flag)\n\t}\n\tf.actual[normalName] = flag\n\tf.orderedActual = append(f.orderedActual, flag)\n\tflag.Changed = true\n\tif len(flag.Deprecated) > 0 {\n\t\tfmt.Fprintf(os.Stderr, \"Flag --%s has been deprecated, %s\\n\", flag.Name, flag.Deprecated)\n\t}\n\treturn nil\n}\n\n// SetAnnotation allows one to set arbitrary annotations on a flag in the FlagSet.\n// This is sometimes used by spf13/cobra programs which want to generate additional\n// bash completion information.\nfunc (f *FlagSet) SetAnnotation(name, key string, values []string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\tif flag.Annotations == nil {\n\t\tflag.Annotations = map[string][]string{}\n\t}\n\tflag.Annotations[key] = values\n\treturn nil\n}\n\n// Changed returns true if the flag was explicitly set during Parse() and false\n// otherwise\nfunc (f *FlagSet) Changed(name string) bool {\n\tflag := f.Lookup(name)\n\t// If a flag doesn't exist, it wasn't changed....\n\tif flag == nil {\n\t\treturn false\n\t}\n\treturn flag.Changed\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// PrintDefaults prints, to standard error unless configured\n// otherwise, the default values of all defined flags in the set.\nfunc (f *FlagSet) PrintDefaults() {\n\tusages := f.FlagUsages()\n\tfmt.Fprint(f.out(), usages)\n}\n\n// defaultIsZeroValue returns true if the default value for this flag represents\n// a zero value.\nfunc (f *Flag) defaultIsZeroValue() bool {\n\tswitch f.Value.(type) {\n\tcase boolFlag:\n\t\treturn f.DefValue == \"false\"\n\tcase *durationValue:\n\t\t// Beginning in Go 1.7, duration zero values are \"0s\"\n\t\treturn f.DefValue == \"0\" || f.DefValue == \"0s\"\n\tcase *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value:\n\t\treturn f.DefValue == \"0\"\n\tcase *stringValue:\n\t\treturn f.DefValue == \"\"\n\tcase *ipValue, *ipMaskValue, *ipNetValue:\n\t\treturn f.DefValue == \"<nil>\"\n\tcase *intSliceValue, *stringSliceValue, *stringArrayValue:\n\t\treturn f.DefValue == \"[]\"\n\tdefault:\n\t\tswitch f.Value.String() {\n\t\tcase \"false\":\n\t\t\treturn true\n\t\tcase \"<nil>\":\n\t\t\treturn true\n\t\tcase \"\":\n\t\t\treturn true\n\t\tcase \"0\":\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\n\tname = flag.Value.Type()\n\tswitch name {\n\tcase \"bool\":\n\t\tname = \"\"\n\tcase \"float64\":\n\t\tname = \"float\"\n\tcase \"int64\":\n\t\tname = \"int\"\n\tcase \"uint64\":\n\t\tname = \"uint\"\n\t}\n\n\treturn\n}\n\n// Splits the string `s` on whitespace into an initial substring up to\n// `i` runes in length and the remainder. Will go `slop` over `i` if\n// that encompasses the entire string (which allows the caller to\n// avoid short orphan words on the final line).\nfunc wrapN(i, slop int, s string) (string, string) {\n\tif i+slop > len(s) {\n\t\treturn s, \"\"\n\t}\n\n\tw := strings.LastIndexAny(s[:i], \" \\t\")\n\tif w <= 0 {\n\t\treturn s, \"\"\n\t}\n\n\treturn s[:w], s[w+1:]\n}\n\n// Wraps the string `s` to a maximum width `w` with leading indent\n// `i`. The first line is not indented (this is assumed to be done by\n// caller). Pass `w` == 0 to do no wrapping\nfunc wrap(i, w int, s string) string {\n\tif w == 0 {\n\t\treturn s\n\t}\n\n\t// space between indent i and end of line width w into which\n\t// we should wrap the text.\n\twrap := w - i\n\n\tvar r, l string\n\n\t// Not enough space for sensible wrapping. Wrap as a block on\n\t// the next line instead.\n\tif wrap < 24 {\n\t\ti = 16\n\t\twrap = w - i\n\t\tr += \"\\n\" + strings.Repeat(\" \", i)\n\t}\n\t// If still not enough space then don't even try to wrap.\n\tif wrap < 24 {\n\t\treturn s\n\t}\n\n\t// Try to avoid short orphan words on the final line, by\n\t// allowing wrapN to go a bit over if that would fit in the\n\t// remainder of the line.\n\tslop := 5\n\twrap = wrap - slop\n\n\t// Handle first line, which is indented by the caller (or the\n\t// special case above)\n\tl, s = wrapN(wrap, slop, s)\n\tr = r + l\n\n\t// Now wrap the rest\n\tfor s != \"\" {\n\t\tvar t string\n\n\t\tt, s = wrapN(wrap, slop, s)\n\t\tr = r + \"\\n\" + strings.Repeat(\" \", i) + t\n\t}\n\n\treturn r\n\n}\n\n// FlagUsagesWrapped returns a string containing the usage information\n// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no\n// wrapping)\nfunc (f *FlagSet) FlagUsagesWrapped(cols int) string {\n\tx := new(bytes.Buffer)\n\n\tlines := make([]string, 0, len(f.formal))\n\n\tmaxlen := 0\n\tf.VisitAll(func(flag *Flag) {\n\t\tif len(flag.Deprecated) > 0 || flag.Hidden {\n\t\t\treturn\n\t\t}\n\n\t\tline := \"\"\n\t\tif len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 {\n\t\t\tline = fmt.Sprintf(\"  -%s, --%s\", flag.Shorthand, flag.Name)\n\t\t} else {\n\t\t\tline = fmt.Sprintf(\"      --%s\", flag.Name)\n\t\t}\n\n\t\tvarname, usage := UnquoteUsage(flag)\n\t\tif len(varname) > 0 {\n\t\t\tline += \" \" + varname\n\t\t}\n\t\tif len(flag.NoOptDefVal) > 0 {\n\t\t\tswitch flag.Value.Type() {\n\t\t\tcase \"string\":\n\t\t\t\tline += fmt.Sprintf(\"[=\\\"%s\\\"]\", flag.NoOptDefVal)\n\t\t\tcase \"bool\":\n\t\t\t\tif flag.NoOptDefVal != \"true\" {\n\t\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t}\n\t\t}\n\n\t\t// This special character will be replaced with spacing once the\n\t\t// correct alignment is calculated\n\t\tline += \"\\x00\"\n\t\tif len(line) > maxlen {\n\t\t\tmaxlen = len(line)\n\t\t}\n\n\t\tline += usage\n\t\tif !flag.defaultIsZeroValue() {\n\t\t\tif flag.Value.Type() == \"string\" {\n\t\t\t\tline += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\tline += fmt.Sprintf(\" (default %s)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\n\t\tlines = append(lines, line)\n\t})\n\n\tfor _, line := range lines {\n\t\tsidx := strings.Index(line, \"\\x00\")\n\t\tspacing := strings.Repeat(\" \", maxlen-sidx)\n\t\t// maxlen + 2 comes from + 1 for the \\x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx\n\t\tfmt.Fprintln(x, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))\n\t}\n\n\treturn x.String()\n}\n\n// FlagUsages returns a string containing the usage information for all flags in\n// the FlagSet\nfunc (f *FlagSet) FlagUsages() string {\n\treturn f.FlagUsagesWrapped(0)\n}\n\n// PrintDefaults prints to standard error the default values of all defined command-line flags.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\tf.VarP(value, name, \"\", usage)\n}\n\n// VarPF is like VarP, but returns the flag created\nfunc (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:      name,\n\t\tShorthand: shorthand,\n\t\tUsage:     usage,\n\t\tValue:     value,\n\t\tDefValue:  value.String(),\n\t}\n\tf.AddFlag(flag)\n\treturn flag\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) VarP(value Value, name, shorthand, usage string) {\n\tf.VarPF(value, name, shorthand, usage)\n}\n\n// AddFlag will add the flag to the FlagSet\nfunc (f *FlagSet) AddFlag(flag *Flag) {\n\t// Call normalizeFlagName function only once\n\tnormalizedFlagName := f.normalizeFlagName(flag.Name)\n\n\t_, alreadythere := f.formal[normalizedFlagName]\n\tif alreadythere {\n\t\tmsg := fmt.Sprintf(\"%s flag redefined: %s\", f.name, flag.Name)\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[NormalizedName]*Flag)\n\t}\n\n\tflag.Name = string(normalizedFlagName)\n\tf.formal[normalizedFlagName] = flag\n\tf.orderedFormal = append(f.orderedFormal, flag)\n\n\tif len(flag.Shorthand) == 0 {\n\t\treturn\n\t}\n\tif len(flag.Shorthand) > 1 {\n\t\tfmt.Fprintf(f.out(), \"%s shorthand more than ASCII character: %s\\n\", f.name, flag.Shorthand)\n\t\tpanic(\"shorthand is more than one character\")\n\t}\n\tif f.shorthands == nil {\n\t\tf.shorthands = make(map[byte]*Flag)\n\t}\n\tc := flag.Shorthand[0]\n\told, alreadythere := f.shorthands[c]\n\tif alreadythere {\n\t\tfmt.Fprintf(f.out(), \"%s shorthand reused: %q for %s already used for %s\\n\", f.name, c, flag.Name, old.Name)\n\t\tpanic(\"shorthand redefinition\")\n\t}\n\tf.shorthands[c] = flag\n}\n\n// AddFlagSet adds one FlagSet to another. If a flag is already present in f\n// the flag from newSet will be ignored\nfunc (f *FlagSet) AddFlagSet(newSet *FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(flag *Flag) {\n\t\tif f.Lookup(flag.Name) == nil {\n\t\t\tf.AddFlag(flag)\n\t\t}\n\t})\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.VarP(value, name, \"\", usage)\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc VarP(value Value, name, shorthand, usage string) {\n\tCommandLine.VarP(value, name, shorthand, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set, or the usage function if\n// the flag set is CommandLine.\nfunc (f *FlagSet) usage() {\n\tif f == CommandLine {\n\t\tUsage()\n\t} else if f.Usage == nil {\n\t\tdefaultUsage(f)\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\nfunc (f *FlagSet) setFlag(flag *Flag, value string, origArg string) error {\n\tif err := flag.Value.Set(value); err != nil {\n\t\treturn f.failf(\"invalid argument %q for %s: %v\", value, origArg, err)\n\t}\n\t// mark as visited for Visit()\n\tif f.actual == nil {\n\t\tf.actual = make(map[NormalizedName]*Flag)\n\t}\n\tf.actual[f.normalizeFlagName(flag.Name)] = flag\n\tf.orderedActual = append(f.orderedActual, flag)\n\tflag.Changed = true\n\tif len(flag.Deprecated) > 0 {\n\t\tfmt.Fprintf(os.Stderr, \"Flag --%s has been deprecated, %s\\n\", flag.Name, flag.Deprecated)\n\t}\n\tif len(flag.ShorthandDeprecated) > 0 && containsShorthand(origArg, flag.Shorthand) {\n\t\tfmt.Fprintf(os.Stderr, \"Flag shorthand -%s has been deprecated, %s\\n\", flag.Shorthand, flag.ShorthandDeprecated)\n\t}\n\treturn nil\n}\n\nfunc containsShorthand(arg, shorthand string) bool {\n\t// filter out flags --<flag_name>\n\tif strings.HasPrefix(arg, \"-\") {\n\t\treturn false\n\t}\n\targ = strings.SplitN(arg, \"=\", 2)[0]\n\treturn strings.Contains(arg, shorthand)\n}\n\nfunc (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tname := s[2:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\terr = f.failf(\"bad flag syntax: %s\", s)\n\t\treturn\n\t}\n\tsplit := strings.SplitN(name, \"=\", 2)\n\tname = split[0]\n\tflag, alreadythere := f.formal[f.normalizeFlagName(name)]\n\tif !alreadythere {\n\t\tif name == \"help\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn a, ErrHelp\n\t\t}\n\t\terr = f.failf(\"unknown flag: --%s\", name)\n\t\treturn\n\t}\n\tvar value string\n\tif len(split) == 2 {\n\t\t// '--flag=arg'\n\t\tvalue = split[1]\n\t} else if len(flag.NoOptDefVal) > 0 {\n\t\t// '--flag' (arg was optional)\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(a) > 0 {\n\t\t// '--flag arg'\n\t\tvalue = a[0]\n\t\ta = a[1:]\n\t} else {\n\t\t// '--flag' (arg was required)\n\t\terr = f.failf(\"flag needs an argument: %s\", s)\n\t\treturn\n\t}\n\terr = fn(flag, value, s)\n\treturn\n}\n\nfunc (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) {\n\tif strings.HasPrefix(shorthands, \"test.\") {\n\t\treturn\n\t}\n\toutArgs = args\n\toutShorts = shorthands[1:]\n\tc := shorthands[0]\n\n\tflag, alreadythere := f.shorthands[c]\n\tif !alreadythere {\n\t\tif c == 'h' { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\terr = ErrHelp\n\t\t\treturn\n\t\t}\n\t\t//TODO continue on error\n\t\terr = f.failf(\"unknown shorthand flag: %q in -%s\", c, shorthands)\n\t\treturn\n\t}\n\tvar value string\n\tif len(shorthands) > 2 && shorthands[1] == '=' {\n\t\tvalue = shorthands[2:]\n\t\toutShorts = \"\"\n\t} else if len(flag.NoOptDefVal) > 0 {\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(shorthands) > 1 {\n\t\tvalue = shorthands[1:]\n\t\toutShorts = \"\"\n\t} else if len(args) > 0 {\n\t\tvalue = args[0]\n\t\toutArgs = args[1:]\n\t} else {\n\t\terr = f.failf(\"flag needs an argument: %q in -%s\", c, shorthands)\n\t\treturn\n\t}\n\terr = fn(flag, value, shorthands)\n\treturn\n}\n\nfunc (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tshorthands := s[1:]\n\n\tfor len(shorthands) > 0 {\n\t\tshorthands, a, err = f.parseSingleShortArg(shorthands, args, fn)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {\n\tfor len(args) > 0 {\n\t\ts := args[0]\n\t\targs = args[1:]\n\t\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\t\tif !f.interspersed {\n\t\t\t\tf.args = append(f.args, s)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tf.args = append(f.args, s)\n\t\t\tcontinue\n\t\t}\n\n\t\tif s[1] == '-' {\n\t\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\t\tf.argsLenAtDash = len(f.args)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\targs, err = f.parseLongArg(s, args, fn)\n\t\t} else {\n\t\t\targs, err = f.parseShortArg(s, args, fn)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name.  Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help was set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = make([]string, 0, len(arguments))\n\n\tassign := func(flag *Flag, value, origArg string) error {\n\t\treturn f.setFlag(flag, value, origArg)\n\t}\n\n\terr := f.parseArgs(arguments, assign)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype parseFunc func(flag *Flag, value, origArg string) error\n\n// ParseAll parses flag definitions from the argument list, which should not\n// include the command name. The arguments for fn are flag and value. Must be\n// called after all flags in the FlagSet are defined and before flags are\n// accessed by the program. The return value will be ErrHelp if -help was set\n// but not defined.\nfunc (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error {\n\tf.parsed = true\n\tf.args = make([]string, 0, len(arguments))\n\n\tassign := func(flag *Flag, value, origArg string) error {\n\t\treturn fn(flag, value)\n\t}\n\n\terr := f.parseArgs(arguments, assign)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// ParseAll parses the command-line flags from os.Args[1:] and called fn for each.\n// The arguments for fn are flag and value. Must be called after all flags are\n// defined and before flags are accessed by the program.\nfunc ParseAll(fn func(flag *Flag, value string) error) {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.ParseAll(os.Args[1:], fn)\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc SetInterspersed(interspersed bool) {\n\tCommandLine.SetInterspersed(interspersed)\n}\n\n// Parsed returns true if the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name,\n// error handling property and SortFlags set to true.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t\targsLenAtDash: -1,\n\t\tinterspersed:  true,\n\t\tSortFlags:     true,\n\t}\n\treturn f\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc (f *FlagSet) SetInterspersed(interspersed bool) {\n\tf.interspersed = interspersed\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.errorHandling = errorHandling\n\tf.argsLenAtDash = -1\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/float32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float32 Value\ntype float32Value float32\n\nfunc newFloat32Value(val float32, p *float32) *float32Value {\n\t*p = val\n\treturn (*float32Value)(p)\n}\n\nfunc (f *float32Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 32)\n\t*f = float32Value(v)\n\treturn err\n}\n\nfunc (f *float32Value) Type() string {\n\treturn \"float32\"\n}\n\nfunc (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }\n\nfunc float32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseFloat(sval, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn float32(v), nil\n}\n\n// GetFloat32 return the float32 value of a flag with the given name\nfunc (f *FlagSet) GetFloat32(name string) (float32, error) {\n\tval, err := f.getFlagType(name, \"float32\", float32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float32), nil\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc Float32Var(p *float32, name string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc (f *FlagSet) Float32(name string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32P(name, shorthand string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc Float32(name string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, \"\", value, usage)\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32P(name, shorthand string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/float64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Type() string {\n\treturn \"float64\"\n}\n\nfunc (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }\n\nfunc float64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseFloat(sval, 64)\n}\n\n// GetFloat64 return the float64 value of a flag with the given name\nfunc (f *FlagSet) GetFloat64(name string) (float64, error) {\n\tval, err := f.getFlagType(name, \"float64\", float64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float64), nil\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64P(name, shorthand string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, \"\", value, usage)\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64P(name, shorthand string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/golangflag.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\npackage pflag\n\nimport (\n\tgoflag \"flag\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// flagValueWrapper implements pflag.Value around a flag.Value.  The main\n// difference here is the addition of the Type method that returns a string\n// name of the type.  As this is generally unknown, we approximate that with\n// reflection.\ntype flagValueWrapper struct {\n\tinner    goflag.Value\n\tflagType string\n}\n\n// We are just copying the boolFlag interface out of goflag as that is what\n// they use to decide if a flag should get \"true\" when no arg is given.\ntype goBoolFlag interface {\n\tgoflag.Value\n\tIsBoolFlag() bool\n}\n\nfunc wrapFlagValue(v goflag.Value) Value {\n\t// If the flag.Value happens to also be a pflag.Value, just use it directly.\n\tif pv, ok := v.(Value); ok {\n\t\treturn pv\n\t}\n\n\tpv := &flagValueWrapper{\n\t\tinner: v,\n\t}\n\n\tt := reflect.TypeOf(v)\n\tif t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\n\tpv.flagType = strings.TrimSuffix(t.Name(), \"Value\")\n\treturn pv\n}\n\nfunc (v *flagValueWrapper) String() string {\n\treturn v.inner.String()\n}\n\nfunc (v *flagValueWrapper) Set(s string) error {\n\treturn v.inner.Set(s)\n}\n\nfunc (v *flagValueWrapper) Type() string {\n\treturn v.flagType\n}\n\n// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag\n// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei\n// with both `-v` and `--v` in flags. If the golang flag was more than a single\n// character (ex: `verbose`) it will only be accessible via `--verbose`\nfunc PFlagFromGoFlag(goflag *goflag.Flag) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:  goflag.Name,\n\t\tUsage: goflag.Usage,\n\t\tValue: wrapFlagValue(goflag.Value),\n\t\t// Looks like golang flags don't set DefValue correctly  :-(\n\t\t//DefValue: goflag.DefValue,\n\t\tDefValue: goflag.Value.String(),\n\t}\n\t// Ex: if the golang flag was -v, allow both -v and --v to work\n\tif len(flag.Name) == 1 {\n\t\tflag.Shorthand = flag.Name\n\t}\n\tif fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() {\n\t\tflag.NoOptDefVal = \"true\"\n\t}\n\treturn flag\n}\n\n// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlag(goflag *goflag.Flag) {\n\tif f.Lookup(goflag.Name) != nil {\n\t\treturn\n\t}\n\tnewflag := PFlagFromGoFlag(goflag)\n\tf.AddFlag(newflag)\n}\n\n// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(goflag *goflag.Flag) {\n\t\tf.AddGoFlag(goflag)\n\t})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/int.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Type() string {\n\treturn \"int\"\n}\n\nfunc (i *intValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc intConv(sval string) (interface{}, error) {\n\treturn strconv.Atoi(sval)\n}\n\n// GetInt return the int value of a flag with the given name\nfunc (f *FlagSet) GetInt(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"int\", intConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntP(name, shorthand string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, \"\", value, usage)\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc IntP(name, shorthand string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/int32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int32 Value\ntype int32Value int32\n\nfunc newInt32Value(val int32, p *int32) *int32Value {\n\t*p = val\n\treturn (*int32Value)(p)\n}\n\nfunc (i *int32Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 32)\n\t*i = int32Value(v)\n\treturn err\n}\n\nfunc (i *int32Value) Type() string {\n\treturn \"int32\"\n}\n\nfunc (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(v), nil\n}\n\n// GetInt32 return the int32 value of a flag with the given name\nfunc (f *FlagSet) GetInt32(name string) (int32, error) {\n\tval, err := f.getFlagType(name, \"int32\", int32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int32), nil\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc Int32Var(p *int32, name string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc (f *FlagSet) Int32(name string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32P(name, shorthand string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc Int32(name string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, \"\", value, usage)\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32P(name, shorthand string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/int64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Type() string {\n\treturn \"int64\"\n}\n\nfunc (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseInt(sval, 0, 64)\n}\n\n// GetInt64 return the int64 value of a flag with the given name\nfunc (f *FlagSet) GetInt64(name string) (int64, error) {\n\tval, err := f.getFlagType(name, \"int64\", int64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int64), nil\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64P(name, shorthand string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, \"\", value, usage)\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64P(name, shorthand string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/int8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int8 Value\ntype int8Value int8\n\nfunc newInt8Value(val int8, p *int8) *int8Value {\n\t*p = val\n\treturn (*int8Value)(p)\n}\n\nfunc (i *int8Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 8)\n\t*i = int8Value(v)\n\treturn err\n}\n\nfunc (i *int8Value) Type() string {\n\treturn \"int8\"\n}\n\nfunc (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int8(v), nil\n}\n\n// GetInt8 return the int8 value of a flag with the given name\nfunc (f *FlagSet) GetInt8(name string) (int8, error) {\n\tval, err := f.getFlagType(name, \"int8\", int8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int8), nil\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc Int8Var(p *int8, name string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc (f *FlagSet) Int8(name string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8P(name, shorthand string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc Int8(name string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, \"\", value, usage)\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8P(name, shorthand string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/int_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- intSlice Value\ntype intSliceValue struct {\n\tvalue   *[]int\n\tchanged bool\n}\n\nfunc newIntSliceValue(val []int, p *[]int) *intSliceValue {\n\tisv := new(intSliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *intSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *intSliceValue) Type() string {\n\treturn \"intSlice\"\n}\n\nfunc (s *intSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc intSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []int{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetIntSlice return the []int value of a flag with the given name\nfunc (f *FlagSet) GetIntSlice(name string) ([]int, error) {\n\tval, err := f.getFlagType(name, \"intSlice\", intSliceConv)\n\tif err != nil {\n\t\treturn []int{}, err\n\t}\n\treturn val.([]int), nil\n}\n\n// IntSliceVar defines a intSlice flag with specified name, default value, and usage string.\n// The argument p points to a []int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSliceVar defines a int[] flag with specified name, default value, and usage string.\n// The argument p points to a int[] variable in which to store the value of the flag.\nfunc IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc IntSlice(name string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, \"\", value, usage)\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/ip.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- net.IP value\ntype ipValue net.IP\n\nfunc newIPValue(val net.IP, p *net.IP) *ipValue {\n\t*p = val\n\treturn (*ipValue)(p)\n}\n\nfunc (i *ipValue) String() string { return net.IP(*i).String() }\nfunc (i *ipValue) Set(s string) error {\n\tip := net.ParseIP(strings.TrimSpace(s))\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP: %q\", s)\n\t}\n\t*i = ipValue(ip)\n\treturn nil\n}\n\nfunc (i *ipValue) Type() string {\n\treturn \"ip\"\n}\n\nfunc ipConv(sval string) (interface{}, error) {\n\tip := net.ParseIP(sval)\n\tif ip != nil {\n\t\treturn ip, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n}\n\n// GetIP return the net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIP(name string) (net.IP, error) {\n\tval, err := f.getFlagType(name, \"ip\", ipConv)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IP), nil\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc IP(name string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, \"\", value, usage)\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/ip_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- ipSlice Value\ntype ipSliceValue struct {\n\tvalue   *[]net.IP\n\tchanged bool\n}\n\nfunc newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue {\n\tipsv := new(ipSliceValue)\n\tipsv.value = p\n\t*ipsv.value = val\n\treturn ipsv\n}\n\n// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag.\n// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended.\nfunc (s *ipSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tipStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse ip values into slice\n\tout := make([]net.IP, 0, len(ipStrSlice))\n\tfor _, ipStr := range ipStrSlice {\n\t\tip := net.ParseIP(strings.TrimSpace(ipStr))\n\t\tif ip == nil {\n\t\t\treturn fmt.Errorf(\"invalid string being converted to IP address: %s\", ipStr)\n\t\t}\n\t\tout = append(out, ip)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *ipSliceValue) Type() string {\n\treturn \"ipSlice\"\n}\n\n// String defines a \"native\" format for this net.IP slice flag value.\nfunc (s *ipSliceValue) String() string {\n\n\tipStrSlice := make([]string, len(*s.value))\n\tfor i, ip := range *s.value {\n\t\tipStrSlice[i] = ip.String()\n\t}\n\n\tout, _ := writeAsCSV(ipStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc ipSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Emtpy string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []net.IP{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]net.IP, len(ss))\n\tfor i, sval := range ss {\n\t\tip := net.ParseIP(strings.TrimSpace(sval))\n\t\tif ip == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n\t\t}\n\t\tout[i] = ip\n\t}\n\treturn out, nil\n}\n\n// GetIPSlice returns the []net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) {\n\tval, err := f.getFlagType(name, \"ipSlice\", ipSliceConv)\n\tif err != nil {\n\t\treturn []net.IP{}, err\n\t}\n\treturn val.([]net.IP), nil\n}\n\n// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of that flag.\nfunc (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of the flag.\nfunc IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, \"\", value, usage)\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/ipmask.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n)\n\n// -- net.IPMask value\ntype ipMaskValue net.IPMask\n\nfunc newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {\n\t*p = val\n\treturn (*ipMaskValue)(p)\n}\n\nfunc (i *ipMaskValue) String() string { return net.IPMask(*i).String() }\nfunc (i *ipMaskValue) Set(s string) error {\n\tip := ParseIPv4Mask(s)\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP mask: %q\", s)\n\t}\n\t*i = ipMaskValue(ip)\n\treturn nil\n}\n\nfunc (i *ipMaskValue) Type() string {\n\treturn \"ipMask\"\n}\n\n// ParseIPv4Mask written in IP form (e.g. 255.255.255.0).\n// This function should really belong to the net package.\nfunc ParseIPv4Mask(s string) net.IPMask {\n\tmask := net.ParseIP(s)\n\tif mask == nil {\n\t\tif len(s) != 8 {\n\t\t\treturn nil\n\t\t}\n\t\t// net.IPMask.String() actually outputs things like ffffff00\n\t\t// so write a horrible parser for that as well  :-(\n\t\tm := []int{}\n\t\tfor i := 0; i < 4; i++ {\n\t\t\tb := \"0x\" + s[2*i:2*i+2]\n\t\t\td, err := strconv.ParseInt(b, 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tm = append(m, int(d))\n\t\t}\n\t\ts := fmt.Sprintf(\"%d.%d.%d.%d\", m[0], m[1], m[2], m[3])\n\t\tmask = net.ParseIP(s)\n\t\tif mask == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])\n}\n\nfunc parseIPv4Mask(sval string) (interface{}, error) {\n\tmask := ParseIPv4Mask(sval)\n\tif mask == nil {\n\t\treturn nil, fmt.Errorf(\"unable to parse %s as net.IPMask\", sval)\n\t}\n\treturn mask, nil\n}\n\n// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name\nfunc (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {\n\tval, err := f.getFlagType(name, \"ipMask\", parseIPv4Mask)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IPMask), nil\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPMaskP is like IPMask, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, \"\", value, usage)\n}\n\n// IPMaskP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/ipnet.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// IPNet adapts net.IPNet for use as a flag.\ntype ipNetValue net.IPNet\n\nfunc (ipnet ipNetValue) String() string {\n\tn := net.IPNet(ipnet)\n\treturn n.String()\n}\n\nfunc (ipnet *ipNetValue) Set(value string) error {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(value))\n\tif err != nil {\n\t\treturn err\n\t}\n\t*ipnet = ipNetValue(*n)\n\treturn nil\n}\n\nfunc (*ipNetValue) Type() string {\n\treturn \"ipNet\"\n}\n\nfunc newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {\n\t*p = val\n\treturn (*ipNetValue)(p)\n}\n\nfunc ipNetConv(sval string) (interface{}, error) {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(sval))\n\tif err == nil {\n\t\treturn *n, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IPNet: %s\", sval)\n}\n\n// GetIPNet return the net.IPNet value of a flag with the given name\nfunc (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {\n\tval, err := f.getFlagType(name, \"ipNet\", ipNetConv)\n\tif err != nil {\n\t\treturn net.IPNet{}, err\n\t}\n\treturn val.(net.IPNet), nil\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, \"\", value, usage)\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/string.go",
    "content": "package pflag\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\nfunc (s *stringValue) Type() string {\n\treturn \"string\"\n}\n\nfunc (s *stringValue) String() string { return string(*s) }\n\nfunc stringConv(sval string) (interface{}, error) {\n\treturn sval, nil\n}\n\n// GetString return the string value of a flag with the given name\nfunc (f *FlagSet) GetString(name string) (string, error) {\n\tval, err := f.getFlagType(name, \"string\", stringConv)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn val.(string), nil\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringP(name, shorthand string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, \"\", value, usage)\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc StringP(name, shorthand string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/string_array.go",
    "content": "package pflag\n\n// -- stringArray Value\ntype stringArrayValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringArrayValue(val []string, p *[]string) *stringArrayValue {\n\tssv := new(stringArrayValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc (s *stringArrayValue) Set(val string) error {\n\tif !s.changed {\n\t\t*s.value = []string{val}\n\t\ts.changed = true\n\t} else {\n\t\t*s.value = append(*s.value, val)\n\t}\n\treturn nil\n}\n\nfunc (s *stringArrayValue) Type() string {\n\treturn \"stringArray\"\n}\n\nfunc (s *stringArrayValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc stringArrayConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a array with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringArray return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringArray(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringArray\", stringArrayConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringArray(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, \"\", value, usage)\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/string_slice.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"strings\"\n)\n\n// -- stringSlice Value\ntype stringSliceValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringSliceValue(val []string, p *[]string) *stringSliceValue {\n\tssv := new(stringSliceValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc readAsCSV(val string) ([]string, error) {\n\tif val == \"\" {\n\t\treturn []string{}, nil\n\t}\n\tstringReader := strings.NewReader(val)\n\tcsvReader := csv.NewReader(stringReader)\n\treturn csvReader.Read()\n}\n\nfunc writeAsCSV(vals []string) (string, error) {\n\tb := &bytes.Buffer{}\n\tw := csv.NewWriter(b)\n\terr := w.Write(vals)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tw.Flush()\n\treturn strings.TrimSuffix(b.String(), \"\\n\"), nil\n}\n\nfunc (s *stringSliceValue) Set(val string) error {\n\tv, err := readAsCSV(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !s.changed {\n\t\t*s.value = v\n\t} else {\n\t\t*s.value = append(*s.value, v...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringSliceValue) Type() string {\n\treturn \"stringSlice\"\n}\n\nfunc (s *stringSliceValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc stringSliceConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a slice with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringSlice return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringSlice(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringSlice\", stringSliceConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\nfunc StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\nfunc (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\nfunc StringSlice(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, \"\", value, usage)\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Type() string {\n\treturn \"uint\"\n}\n\nfunc (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uintConv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint(v), nil\n}\n\n// GetUint return the uint value of a flag with the given name\nfunc (f *FlagSet) GetUint(name string) (uint, error) {\n\tval, err := f.getFlagType(name, \"uint\", uintConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint), nil\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintP(name, shorthand string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, \"\", value, usage)\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc UintP(name, shorthand string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint16.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint16 value\ntype uint16Value uint16\n\nfunc newUint16Value(val uint16, p *uint16) *uint16Value {\n\t*p = val\n\treturn (*uint16Value)(p)\n}\n\nfunc (i *uint16Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 16)\n\t*i = uint16Value(v)\n\treturn err\n}\n\nfunc (i *uint16Value) Type() string {\n\treturn \"uint16\"\n}\n\nfunc (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint16Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint16(v), nil\n}\n\n// GetUint16 return the uint16 value of a flag with the given name\nfunc (f *FlagSet) GetUint16(name string) (uint16, error) {\n\tval, err := f.getFlagType(name, \"uint16\", uint16Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint16), nil\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint16(name string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, \"\", value, usage)\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint32 value\ntype uint32Value uint32\n\nfunc newUint32Value(val uint32, p *uint32) *uint32Value {\n\t*p = val\n\treturn (*uint32Value)(p)\n}\n\nfunc (i *uint32Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 32)\n\t*i = uint32Value(v)\n\treturn err\n}\n\nfunc (i *uint32Value) Type() string {\n\treturn \"uint32\"\n}\n\nfunc (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint32(v), nil\n}\n\n// GetUint32 return the uint32 value of a flag with the given name\nfunc (f *FlagSet) GetUint32(name string) (uint32, error) {\n\tval, err := f.getFlagType(name, \"uint32\", uint32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint32), nil\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32  variable in which to store the value of the flag.\nfunc Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc Uint32(name string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, \"\", value, usage)\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Type() string {\n\treturn \"uint64\"\n}\n\nfunc (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint64Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(v), nil\n}\n\n// GetUint64 return the uint64 value of a flag with the given name\nfunc (f *FlagSet) GetUint64(name string) (uint64, error) {\n\tval, err := f.getFlagType(name, \"uint64\", uint64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint64), nil\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, \"\", value, usage)\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint8 Value\ntype uint8Value uint8\n\nfunc newUint8Value(val uint8, p *uint8) *uint8Value {\n\t*p = val\n\treturn (*uint8Value)(p)\n}\n\nfunc (i *uint8Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 8)\n\t*i = uint8Value(v)\n\treturn err\n}\n\nfunc (i *uint8Value) Type() string {\n\treturn \"uint8\"\n}\n\nfunc (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint8(v), nil\n}\n\n// GetUint8 return the uint8 value of a flag with the given name\nfunc (f *FlagSet) GetUint8(name string) (uint8, error) {\n\tval, err := f.getFlagType(name, \"uint8\", uint8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint8), nil\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc Uint8(name string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, \"\", value, usage)\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/github.com/spf13/pflag/uint_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- uintSlice Value\ntype uintSliceValue struct {\n\tvalue   *[]uint\n\tchanged bool\n}\n\nfunc newUintSliceValue(val []uint, p *[]uint) *uintSliceValue {\n\tuisv := new(uintSliceValue)\n\tuisv.value = p\n\t*uisv.value = val\n\treturn uisv\n}\n\nfunc (s *uintSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *uintSliceValue) Type() string {\n\treturn \"uintSlice\"\n}\n\nfunc (s *uintSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc uintSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []uint{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\treturn out, nil\n}\n\n// GetUintSlice returns the []uint value of a flag with the given name.\nfunc (f *FlagSet) GetUintSlice(name string) ([]uint, error) {\n\tval, err := f.getFlagType(name, \"uintSlice\", uintSliceConv)\n\tif err != nil {\n\t\treturn []uint{}, err\n\t}\n\treturn val.([]uint), nil\n}\n\n// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string.\n// The argument p points to a []uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSliceVar defines a uint[] flag with specified name, default value, and usage string.\n// The argument p points to a uint[] variable in which to store the value of the flag.\nfunc UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc UintSlice(name string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, \"\", value, usage)\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/mysql/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/go-sql-driver/mysql\",\n\t\t\t\"repository\": \"https://github.com/go-sql-driver/mysql\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"9dee4ca50b83acdf57a35fb9e6fb4be640afa2f3\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/jmoiron/sqlx\",\n\t\t\t\"repository\": \"https://github.com/jmoiron/sqlx\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"3564e3a314b957a161fefa0e7aea85b4d741c94e\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"7fa59bdb55485001d702d9b6e15367cdf26bfde8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/spf13/pflag\",\n\t\t\t\"repository\": \"https://github.com/spf13/pflag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"2300d0f8576fe575f71aaa5b9bbe4e1b0dc2eb51\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis1.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n)\n\nfunc main() {\n\t// set up flags\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// set up redis service\n\tredis := &service.Redis{}\n\tredis.Flags(\"redis\", \"redis1:6379\", \"Redis DNS\", flags)\n\n\t// parse flags\n\tflags.Parse(os.Args[1:])\n\n\tfmt.Printf(\"[%.4fms] Starting\\n\", service.Now())\n\tfmt.Printf(\"[%.4fms] Sending PING\\n\", service.Now())\n\tpong, err := redis.Do(\"PING\")\n\tfmt.Printf(\"[%.4fms] Response %s, err %#v\\n\", service.Now(), pong, err)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis1.go.txt",
    "content": "[0.0000ms] Starting\n[0.0293ms] Sending PING\n[11.5352ms] Response PONG, err <nil>"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis2.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n)\n\nfunc main() {\n\t// set up flags\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// set up redis service\n\tredis := &service.Redis{}\n\tredis.Flags(\"redis\", \"redis1:6379\", \"Redis DNS\", flags)\n\n\t// parse flags\n\tflags.Parse(os.Args[1:])\n\n\tredis.Do(\"PING\")\n\tfmt.Printf(\"[%.4f] Starting\\n\", service.Now())\n\n\tsleep1, err := redis.Do(\"DEBUG\", \"SLEEP\", \"0.1\")\n\tfmt.Printf(\"[%.4f] End Sleep 100ms, result %s err %v\\n\",\n\t\tservice.Now(), sleep1, err)\n\n\tsleep2, err := redis.Do(\"DEBUG\", \"SLEEP\", \"0.2\")\n\tfmt.Printf(\"[%.4f] End Sleep 200ms, result %s err %v\\n\",\n\t\tservice.Now(), sleep2, err)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis2.go.txt",
    "content": "[0.0000] Starting\n[100.4219] End Sleep 100ms, result OK err <nil>\n[300.7002] End Sleep 200ms, result OK err <nil>"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis3.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"app/service\"\n)\n\nfunc main() {\n\t// set up flags\n\tflags := flag.NewFlagSet(\"default\", flag.ContinueOnError)\n\n\t// set up redis service\n\tredis := &service.Redis{}\n\tredis.Flags(\"redis1\", \"redis1:6379\", \"Redis DNS\", flags)\n\tredis.Flags(\"redis2\", \"redis2:6379\", \"Redis DNS\", flags)\n\tredis.Flags(\"redis3\", \"redis3:6379\", \"Redis DNS\", flags)\n\n\t// parse flags\n\tflags.Parse(os.Args[1:])\n\n\tfmt.Printf(\"[%.4f] Start\\n\", service.Now())\n\n\tsleep1_chan := make(chan string, 1)\n\tsleep2_chan := make(chan string, 1)\n\n\tgo func() {\n\t\tconn := redis.Get()\n\t\tdefer conn.Close()\n\n\t\tfmt.Printf(\"[%.4f] Run sleep 100ms\\n\", service.Now())\n\t\tsleep1, err := conn.Do(\"DEBUG\", \"SLEEP\", \"0.1\")\n\t\tif err != nil {\n\t\t\tsleep1 = \"ERROR\"\n\t\t}\n\t\tsleep1_chan <- sleep1.(string)\n\t}()\n\n\tgo func() {\n\t\tconn := redis.Get()\n\t\tdefer conn.Close()\n\n\t\tfmt.Printf(\"[%.4f] Run sleep 200ms\\n\", service.Now())\n\t\tsleep2, err := conn.Do(\"DEBUG\", \"SLEEP\", \"0.2\")\n\t\tif err != nil {\n\t\t\tsleep2 = \"ERROR\"\n\t\t}\n\t\tsleep2_chan <- sleep2.(string)\n\t}()\n\n\tvar result string\n\tresult = <-sleep1_chan\n\tfmt.Printf(\"[%.4f] End Sleep 100ms, result %s\\n\", service.Now(), result)\n\tresult = <-sleep2_chan\n\tfmt.Printf(\"[%.4f] End Sleep 200ms, result %s\\n\", service.Now(), result)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/redis3.go.txt",
    "content": "[0.0000] Start\n[25.3787] Run sleep 200ms\n[25.4285] Run sleep 100ms\n[125.6555] End Sleep 100ms, result OK\n[225.6809] End Sleep 200ms, result OK"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/run",
    "content": "#!/bin/bash\nif [ ! -d \"vendor\" ]; then\n\tgvt fetch \"github.com/garyburd/redigo/redis\"\nfi\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\techo \"##\" $FILE\n\tdocker run --net=party --rm -it -v $(pwd):/go/src/app -w /go/src/app golang:1.8-alpine go run $FILE | tee \"$FILE.txt\"\ndone\n\n# strip \\r\nsed -i 's/\\cM//g' *txt\n# strip trailing spaces/lines\nsed -i -e :a -e '/^\\n*$/{$d;N;};/\\n$/ba' *txt\n# strip off final newline\ntruncate -s -1 *txt\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/run_containers",
    "content": "#!/bin/bash\nNAMES=\"redis1 redis2 redis3\"\nDOCKERFILE=\"redis\"\nfor NAME in $NAMES; do\n\tdocker rm -f $NAME\n\tdocker run --restart=always -h $NAME --name $NAME --net=party -d $DOCKERFILE\ndone"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/service/now.go",
    "content": "package service\n\nimport \"time\"\n\nvar StartTime float64\n\n// return time in milliseconds (ms, us=ms/1000, ns=us/1000)\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/service/redis.go",
    "content": "package service\n\nimport (\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype Redis struct {\n\tpool *redis.Pool\n\tdsn []*string\n\tserverIndex int\n}\n\n// Interface for used flag functions\ntype redisFlags interface {\n\tString(name, value, usage string) *string\n}\n\n// Flags registers a new parameter in a compatible flags package\nfunc (r *Redis) Flags(name, value, usage string, flag redisFlags) {\n\tr.dsn = append(r.dsn, flag.String(name, value, usage))\n}\n\n// Get a single redis server name (based on flags registrations)\nfunc (r *Redis) getServerName() string {\n\tname := *r.dsn[r.serverIndex];\n\tr.serverIndex++\n\tif r.serverIndex >= len(r.dsn) {\n\t\tr.serverIndex = 0\n\t}\n\treturn name\n}\n\n// Returns a connection which needs to be closed\nfunc (r *Redis) Get() redis.Conn {\n\tif r.pool == nil {\n\t\tr.pool = &redis.Pool {\n\t\t\tMaxIdle: 3,\n\t\t\tIdleTimeout: 240 * time.Second,\n\t\t\tDial: func() (redis.Conn, error) {\n\t\t\t\treturn redis.Dial(\"tcp\", r.getServerName());\n\t\t\t},\n\t\t};\n\t}\n\treturn r.pool.Get()\n}\n\n// Execute a command against a temporary pool connection\nfunc (r *Redis) Do(commandName string, params ...interface{}) (interface{}, error) {\n\tconn := r.Get()\n\tdefer conn.Close()\n\treturn conn.Do(commandName, params...)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/internal/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"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/internal/commandinfo.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage internal // import \"github.com/garyburd/redigo/internal\"\n\nimport (\n\t\"strings\"\n)\n\nconst (\n\tWatchState = 1 << iota\n\tMultiState\n\tSubscribeState\n\tMonitorState\n)\n\ntype CommandInfo struct {\n\tSet, Clear int\n}\n\nvar commandInfos = map[string]CommandInfo{\n\t\"WATCH\":      {Set: WatchState},\n\t\"UNWATCH\":    {Clear: WatchState},\n\t\"MULTI\":      {Set: MultiState},\n\t\"EXEC\":       {Clear: WatchState | MultiState},\n\t\"DISCARD\":    {Clear: WatchState | MultiState},\n\t\"PSUBSCRIBE\": {Set: SubscribeState},\n\t\"SUBSCRIBE\":  {Set: SubscribeState},\n\t\"MONITOR\":    {Set: MonitorState},\n}\n\nfunc init() {\n\tfor n, ci := range commandInfos {\n\t\tcommandInfos[strings.ToLower(n)] = ci\n\t}\n}\n\nfunc LookupCommandInfo(commandName string) CommandInfo {\n\tif ci, ok := commandInfos[commandName]; ok {\n\t\treturn ci\n\t}\n\treturn commandInfos[strings.ToUpper(commandName)]\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/internal/redistest/testdb.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redistest contains utilities for writing Redigo tests.\npackage redistest\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype testConn struct {\n\tredis.Conn\n}\n\nfunc (t testConn) Close() error {\n\t_, err := t.Conn.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\treturn nil\n\t}\n\t_, err = t.Conn.Do(\"FLUSHDB\")\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.Conn.Close()\n}\n\n// Dial dials the local Redis server and selects database 9. To prevent\n// stomping on real data, DialTestDB fails if database 9 contains data. The\n// returned connection flushes database 9 on close.\nfunc Dial() (redis.Conn, error) {\n\tc, err := redis.DialTimeout(\"tcp\", \":6379\", 0, 1*time.Second, 1*time.Second)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t_, err = c.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tn, err := redis.Int(c.Do(\"DBSIZE\"))\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tif n != 0 {\n\t\tc.Close()\n\t\treturn nil, errors.New(\"database #9 is not empty, test can not continue\")\n\t}\n\n\treturn testConn{c}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/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"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/conn.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// conn is the low-level implementation of Conn\ntype conn struct {\n\n\t// Shared\n\tmu      sync.Mutex\n\tpending int\n\terr     error\n\tconn    net.Conn\n\n\t// Read\n\treadTimeout time.Duration\n\tbr          *bufio.Reader\n\n\t// Write\n\twriteTimeout time.Duration\n\tbw           *bufio.Writer\n\n\t// Scratch space for formatting argument length.\n\t// '*' or '$', length, \"\\r\\n\"\n\tlenScratch [32]byte\n\n\t// Scratch space for formatting integers and floats.\n\tnumScratch [40]byte\n}\n\n// DialTimeout acts like Dial but takes timeouts for establishing the\n// connection to the server, writing a command and reading a reply.\n//\n// Deprecated: Use Dial with options instead.\nfunc DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) {\n\treturn Dial(network, address,\n\t\tDialConnectTimeout(connectTimeout),\n\t\tDialReadTimeout(readTimeout),\n\t\tDialWriteTimeout(writeTimeout))\n}\n\n// DialOption specifies an option for dialing a Redis server.\ntype DialOption struct {\n\tf func(*dialOptions)\n}\n\ntype dialOptions struct {\n\treadTimeout  time.Duration\n\twriteTimeout time.Duration\n\tdial         func(network, addr string) (net.Conn, error)\n\tdb           int\n\tpassword     string\n\tdialTLS      bool\n\tskipVerify   bool\n\ttlsConfig    *tls.Config\n}\n\n// DialReadTimeout specifies the timeout for reading a single command reply.\nfunc DialReadTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.readTimeout = d\n\t}}\n}\n\n// DialWriteTimeout specifies the timeout for writing a single command.\nfunc DialWriteTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.writeTimeout = d\n\t}}\n}\n\n// DialConnectTimeout specifies the timeout for connecting to the Redis server.\nfunc DialConnectTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdialer := net.Dialer{Timeout: d}\n\t\tdo.dial = dialer.Dial\n\t}}\n}\n\n// DialNetDial specifies a custom dial function for creating TCP\n// connections. If this option is left out, then net.Dial is\n// used. DialNetDial overrides DialConnectTimeout.\nfunc DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.dial = dial\n\t}}\n}\n\n// DialDatabase specifies the database to select when dialing a connection.\nfunc DialDatabase(db int) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.db = db\n\t}}\n}\n\n// DialPassword specifies the password to use when connecting to\n// the Redis server.\nfunc DialPassword(password string) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.password = password\n\t}}\n}\n\n// DialTLSConfig specifies the config to use when a TLS connection is dialed.\n// Has no effect when not dialing a TLS connection.\nfunc DialTLSConfig(c *tls.Config) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.tlsConfig = c\n\t}}\n}\n\n// DialTLSSkipVerify to disable server name verification when connecting\n// over TLS. Has no effect when not dialing a TLS connection.\nfunc DialTLSSkipVerify(skip bool) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.skipVerify = skip\n\t}}\n}\n\n// Dial connects to the Redis server at the given network and\n// address using the specified options.\nfunc Dial(network, address string, options ...DialOption) (Conn, error) {\n\tdo := dialOptions{\n\t\tdial: net.Dial,\n\t}\n\tfor _, option := range options {\n\t\toption.f(&do)\n\t}\n\n\tnetConn, err := do.dial(network, address)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif do.dialTLS {\n\t\ttlsConfig := cloneTLSClientConfig(do.tlsConfig, do.skipVerify)\n\t\tif tlsConfig.ServerName == \"\" {\n\t\t\thost, _, err := net.SplitHostPort(address)\n\t\t\tif err != nil {\n\t\t\t\tnetConn.Close()\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttlsConfig.ServerName = host\n\t\t}\n\n\t\ttlsConn := tls.Client(netConn, tlsConfig)\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tnetConn = tlsConn\n\t}\n\n\tc := &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  do.readTimeout,\n\t\twriteTimeout: do.writeTimeout,\n\t}\n\n\tif do.password != \"\" {\n\t\tif _, err := c.Do(\"AUTH\", do.password); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif do.db != 0 {\n\t\tif _, err := c.Do(\"SELECT\", do.db); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\nfunc dialTLS(do *dialOptions) {\n\tdo.dialTLS = true\n}\n\nvar pathDBRegexp = regexp.MustCompile(`/(\\d*)\\z`)\n\n// DialURL connects to a Redis server at the given URL using the Redis\n// URI scheme. URLs should follow the draft IANA specification for the\n// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis).\nfunc DialURL(rawurl string, options ...DialOption) (Conn, error) {\n\tu, err := url.Parse(rawurl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif u.Scheme != \"redis\" && u.Scheme != \"rediss\" {\n\t\treturn nil, fmt.Errorf(\"invalid redis URL scheme: %s\", u.Scheme)\n\t}\n\n\t// As per the IANA draft spec, the host defaults to localhost and\n\t// the port defaults to 6379.\n\thost, port, err := net.SplitHostPort(u.Host)\n\tif err != nil {\n\t\t// assume port is missing\n\t\thost = u.Host\n\t\tport = \"6379\"\n\t}\n\tif host == \"\" {\n\t\thost = \"localhost\"\n\t}\n\taddress := net.JoinHostPort(host, port)\n\n\tif u.User != nil {\n\t\tpassword, isSet := u.User.Password()\n\t\tif isSet {\n\t\t\toptions = append(options, DialPassword(password))\n\t\t}\n\t}\n\n\tmatch := pathDBRegexp.FindStringSubmatch(u.Path)\n\tif len(match) == 2 {\n\t\tdb := 0\n\t\tif len(match[1]) > 0 {\n\t\t\tdb, err = strconv.Atoi(match[1])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t\t\t}\n\t\t}\n\t\tif db != 0 {\n\t\t\toptions = append(options, DialDatabase(db))\n\t\t}\n\t} else if u.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t}\n\n\tif u.Scheme == \"rediss\" {\n\t\toptions = append([]DialOption{{dialTLS}}, options...)\n\t}\n\n\treturn Dial(\"tcp\", address, options...)\n}\n\n// NewConn returns a new Redigo connection for the given net connection.\nfunc NewConn(netConn net.Conn, readTimeout, writeTimeout time.Duration) Conn {\n\treturn &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  readTimeout,\n\t\twriteTimeout: writeTimeout,\n\t}\n}\n\nfunc (c *conn) Close() error {\n\tc.mu.Lock()\n\terr := c.err\n\tif c.err == nil {\n\t\tc.err = errors.New(\"redigo: closed\")\n\t\terr = c.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) fatal(err error) error {\n\tc.mu.Lock()\n\tif c.err == nil {\n\t\tc.err = err\n\t\t// Close connection to force errors on subsequent calls and to unblock\n\t\t// other reader or writer.\n\t\tc.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) Err() error {\n\tc.mu.Lock()\n\terr := c.err\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) writeLen(prefix byte, n int) error {\n\tc.lenScratch[len(c.lenScratch)-1] = '\\n'\n\tc.lenScratch[len(c.lenScratch)-2] = '\\r'\n\ti := len(c.lenScratch) - 3\n\tfor {\n\t\tc.lenScratch[i] = byte('0' + n%10)\n\t\ti -= 1\n\t\tn = n / 10\n\t\tif n == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tc.lenScratch[i] = prefix\n\t_, err := c.bw.Write(c.lenScratch[i:])\n\treturn err\n}\n\nfunc (c *conn) writeString(s string) error {\n\tc.writeLen('$', len(s))\n\tc.bw.WriteString(s)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeBytes(p []byte) error {\n\tc.writeLen('$', len(p))\n\tc.bw.Write(p)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeInt64(n int64) error {\n\treturn c.writeBytes(strconv.AppendInt(c.numScratch[:0], n, 10))\n}\n\nfunc (c *conn) writeFloat64(n float64) error {\n\treturn c.writeBytes(strconv.AppendFloat(c.numScratch[:0], n, 'g', -1, 64))\n}\n\nfunc (c *conn) writeCommand(cmd string, args []interface{}) (err error) {\n\tc.writeLen('*', 1+len(args))\n\terr = c.writeString(cmd)\n\tfor _, arg := range args {\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch arg := arg.(type) {\n\t\tcase string:\n\t\t\terr = c.writeString(arg)\n\t\tcase []byte:\n\t\t\terr = c.writeBytes(arg)\n\t\tcase int:\n\t\t\terr = c.writeInt64(int64(arg))\n\t\tcase int64:\n\t\t\terr = c.writeInt64(arg)\n\t\tcase float64:\n\t\t\terr = c.writeFloat64(arg)\n\t\tcase bool:\n\t\t\tif arg {\n\t\t\t\terr = c.writeString(\"1\")\n\t\t\t} else {\n\t\t\t\terr = c.writeString(\"0\")\n\t\t\t}\n\t\tcase nil:\n\t\t\terr = c.writeString(\"\")\n\t\tdefault:\n\t\t\tvar buf bytes.Buffer\n\t\t\tfmt.Fprint(&buf, arg)\n\t\t\terr = c.writeBytes(buf.Bytes())\n\t\t}\n\t}\n\treturn err\n}\n\ntype protocolError string\n\nfunc (pe protocolError) Error() string {\n\treturn fmt.Sprintf(\"redigo: %s (possible server error or unsupported concurrent read by application)\", string(pe))\n}\n\nfunc (c *conn) readLine() ([]byte, error) {\n\tp, err := c.br.ReadSlice('\\n')\n\tif err == bufio.ErrBufferFull {\n\t\treturn nil, protocolError(\"long response line\")\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ti := len(p) - 2\n\tif i < 0 || p[i] != '\\r' {\n\t\treturn nil, protocolError(\"bad response line terminator\")\n\t}\n\treturn p[:i], nil\n}\n\n// parseLen parses bulk string and array lengths.\nfunc parseLen(p []byte) (int, error) {\n\tif len(p) == 0 {\n\t\treturn -1, protocolError(\"malformed length\")\n\t}\n\n\tif p[0] == '-' && len(p) == 2 && p[1] == '1' {\n\t\t// handle $-1 and $-1 null replies.\n\t\treturn -1, nil\n\t}\n\n\tvar n int\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn -1, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int(b - '0')\n\t}\n\n\treturn n, nil\n}\n\n// parseInt parses an integer reply.\nfunc parseInt(p []byte) (interface{}, error) {\n\tif len(p) == 0 {\n\t\treturn 0, protocolError(\"malformed integer\")\n\t}\n\n\tvar negate bool\n\tif p[0] == '-' {\n\t\tnegate = true\n\t\tp = p[1:]\n\t\tif len(p) == 0 {\n\t\t\treturn 0, protocolError(\"malformed integer\")\n\t\t}\n\t}\n\n\tvar n int64\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn 0, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int64(b - '0')\n\t}\n\n\tif negate {\n\t\tn = -n\n\t}\n\treturn n, nil\n}\n\nvar (\n\tokReply   interface{} = \"OK\"\n\tpongReply interface{} = \"PONG\"\n)\n\nfunc (c *conn) readReply() (interface{}, error) {\n\tline, err := c.readLine()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(line) == 0 {\n\t\treturn nil, protocolError(\"short response line\")\n\t}\n\tswitch line[0] {\n\tcase '+':\n\t\tswitch {\n\t\tcase len(line) == 3 && line[1] == 'O' && line[2] == 'K':\n\t\t\t// Avoid allocation for frequent \"+OK\" response.\n\t\t\treturn okReply, nil\n\t\tcase len(line) == 5 && line[1] == 'P' && line[2] == 'O' && line[3] == 'N' && line[4] == 'G':\n\t\t\t// Avoid allocation in PING command benchmarks :)\n\t\t\treturn pongReply, nil\n\t\tdefault:\n\t\t\treturn string(line[1:]), nil\n\t\t}\n\tcase '-':\n\t\treturn Error(string(line[1:])), nil\n\tcase ':':\n\t\treturn parseInt(line[1:])\n\tcase '$':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp := make([]byte, n)\n\t\t_, err = io.ReadFull(c.br, p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif line, err := c.readLine(); err != nil {\n\t\t\treturn nil, err\n\t\t} else if len(line) != 0 {\n\t\t\treturn nil, protocolError(\"bad bulk string format\")\n\t\t}\n\t\treturn p, nil\n\tcase '*':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr := make([]interface{}, n)\n\t\tfor i := range r {\n\t\t\tr[i], err = c.readReply()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn r, nil\n\t}\n\treturn nil, protocolError(\"unexpected response line\")\n}\n\nfunc (c *conn) Send(cmd string, args ...interface{}) error {\n\tc.mu.Lock()\n\tc.pending += 1\n\tc.mu.Unlock()\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.writeCommand(cmd, args); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Flush() error {\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Receive() (reply interface{}, err error) {\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\tif reply, err = c.readReply(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\t// When using pub/sub, the number of receives can be greater than the\n\t// number of sends. To enable normal use of the connection after\n\t// unsubscribing from all channels, we do not decrement pending to a\n\t// negative value.\n\t//\n\t// The pending field is decremented after the reply is read to handle the\n\t// case where Receive is called before Send.\n\tc.mu.Lock()\n\tif c.pending > 0 {\n\t\tc.pending -= 1\n\t}\n\tc.mu.Unlock()\n\tif err, ok := reply.(Error); ok {\n\t\treturn nil, err\n\t}\n\treturn\n}\n\nfunc (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) {\n\tc.mu.Lock()\n\tpending := c.pending\n\tc.pending = 0\n\tc.mu.Unlock()\n\n\tif cmd == \"\" && pending == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\n\tif cmd != \"\" {\n\t\tif err := c.writeCommand(cmd, args); err != nil {\n\t\t\treturn nil, c.fatal(err)\n\t\t}\n\t}\n\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\n\tif cmd == \"\" {\n\t\treply := make([]interface{}, pending)\n\t\tfor i := range reply {\n\t\t\tr, e := c.readReply()\n\t\t\tif e != nil {\n\t\t\t\treturn nil, c.fatal(e)\n\t\t\t}\n\t\t\treply[i] = r\n\t\t}\n\t\treturn reply, nil\n\t}\n\n\tvar err error\n\tvar reply interface{}\n\tfor i := 0; i <= pending; i++ {\n\t\tvar e error\n\t\tif reply, e = c.readReply(); e != nil {\n\t\t\treturn nil, c.fatal(e)\n\t\t}\n\t\tif e, ok := reply.(Error); ok && err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\treturn reply, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/doc.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redis is a client for the Redis database.\n//\n// The Redigo FAQ (https://github.com/garyburd/redigo/wiki/FAQ) contains more\n// documentation about this package.\n//\n// Connections\n//\n// The Conn interface is the primary interface for working with Redis.\n// Applications create connections by calling the Dial, DialWithTimeout or\n// NewConn functions. In the future, functions will be added for creating\n// sharded and other types of connections.\n//\n// The application must call the connection Close method when the application\n// is done with the connection.\n//\n// Executing Commands\n//\n// The Conn interface has a generic method for executing Redis commands:\n//\n//  Do(commandName string, args ...interface{}) (reply interface{}, err error)\n//\n// The Redis command reference (http://redis.io/commands) lists the available\n// commands. An example of using the Redis APPEND command is:\n//\n//  n, err := conn.Do(\"APPEND\", \"key\", \"value\")\n//\n// The Do method converts command arguments to binary strings for transmission\n// to the server as follows:\n//\n//  Go Type                 Conversion\n//  []byte                  Sent as is\n//  string                  Sent as is\n//  int, int64              strconv.FormatInt(v)\n//  float64                 strconv.FormatFloat(v, 'g', -1, 64)\n//  bool                    true -> \"1\", false -> \"0\"\n//  nil                     \"\"\n//  all other types         fmt.Print(v)\n//\n// Redis command reply types are represented using the following Go types:\n//\n//  Redis type              Go type\n//  error                   redis.Error\n//  integer                 int64\n//  simple string           string\n//  bulk string             []byte or nil if value not present.\n//  array                   []interface{} or nil if value not present.\n//\n// Use type assertions or the reply helper functions to convert from\n// interface{} to the specific Go type for the command result.\n//\n// Pipelining\n//\n// Connections support pipelining using the Send, Flush and Receive methods.\n//\n//  Send(commandName string, args ...interface{}) error\n//  Flush() error\n//  Receive() (reply interface{}, err error)\n//\n// Send writes the command to the connection's output buffer. Flush flushes the\n// connection's output buffer to the server. Receive reads a single reply from\n// the server. The following example shows a simple pipeline.\n//\n//  c.Send(\"SET\", \"foo\", \"bar\")\n//  c.Send(\"GET\", \"foo\")\n//  c.Flush()\n//  c.Receive() // reply from SET\n//  v, err = c.Receive() // reply from GET\n//\n// The Do method combines the functionality of the Send, Flush and Receive\n// methods. The Do method starts by writing the command and flushing the output\n// buffer. Next, the Do method receives all pending replies including the reply\n// for the command just sent by Do. If any of the received replies is an error,\n// then Do returns the error. If there are no errors, then Do returns the last\n// reply. If the command argument to the Do method is \"\", then the Do method\n// will flush the output buffer and receive pending replies without sending a\n// command.\n//\n// Use the Send and Do methods to implement pipelined transactions.\n//\n//  c.Send(\"MULTI\")\n//  c.Send(\"INCR\", \"foo\")\n//  c.Send(\"INCR\", \"bar\")\n//  r, err := c.Do(\"EXEC\")\n//  fmt.Println(r) // prints [1, 1]\n//\n// Concurrency\n//\n// Connections support one concurrent caller to the Receive method and one\n// concurrent caller to the Send and Flush methods. No other concurrency is\n// supported including concurrent calls to the Do method.\n//\n// For full concurrent access to Redis, use the thread-safe Pool to get, use\n// and release a connection from within a goroutine. Connections returned from\n// a Pool have the concurrency restrictions described in the previous\n// paragraph.\n//\n// Publish and Subscribe\n//\n// Use the Send, Flush and Receive methods to implement Pub/Sub subscribers.\n//\n//  c.Send(\"SUBSCRIBE\", \"example\")\n//  c.Flush()\n//  for {\n//      reply, err := c.Receive()\n//      if err != nil {\n//          return err\n//      }\n//      // process pushed message\n//  }\n//\n// The PubSubConn type wraps a Conn with convenience methods for implementing\n// subscribers. The Subscribe, PSubscribe, Unsubscribe and PUnsubscribe methods\n// send and flush a subscription management command. The receive method\n// converts a pushed message to convenient types for use in a type switch.\n//\n//  psc := redis.PubSubConn{Conn: c}\n//  psc.Subscribe(\"example\")\n//  for {\n//      switch v := psc.Receive().(type) {\n//      case redis.Message:\n//          fmt.Printf(\"%s: message: %s\\n\", v.Channel, v.Data)\n//      case redis.Subscription:\n//          fmt.Printf(\"%s: %s %d\\n\", v.Channel, v.Kind, v.Count)\n//      case error:\n//          return v\n//      }\n//  }\n//\n// Reply Helpers\n//\n// The Bool, Int, Bytes, String, Strings and Values functions convert a reply\n// to a value of a specific type. To allow convenient wrapping of calls to the\n// connection Do and Receive methods, the functions take a second argument of\n// type error.  If the error is non-nil, then the helper function returns the\n// error. If the error is nil, the function converts the reply to the specified\n// type:\n//\n//  exists, err := redis.Bool(c.Do(\"EXISTS\", \"foo\"))\n//  if err != nil {\n//      // handle error return from c.Do or type conversion error.\n//  }\n//\n// The Scan function converts elements of a array reply to Go types:\n//\n//  var value1 int\n//  var value2 string\n//  reply, err := redis.Values(c.Do(\"MGET\", \"key1\", \"key2\"))\n//  if err != nil {\n//      // handle error\n//  }\n//   if _, err := redis.Scan(reply, &value1, &value2); err != nil {\n//      // handle error\n//  }\n//\n// Errors\n//\n// Connection methods return error replies from the server as type redis.Error.\n//\n// Call the connection Err() method to determine if the connection encountered\n// non-recoverable error such as a network error or protocol parsing error. If\n// Err() returns a non-nil value, then the connection is not usable and should\n// be closed.\npackage redis // import \"github.com/garyburd/redigo/redis\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/go17.go",
    "content": "// +build go1.7\n\npackage redis\n\nimport \"crypto/tls\"\n\n// similar cloneTLSClientConfig in the stdlib, but also honor skipVerify for the nil case\nfunc cloneTLSClientConfig(cfg *tls.Config, skipVerify bool) *tls.Config {\n\tif cfg == nil {\n\t\treturn &tls.Config{InsecureSkipVerify: skipVerify}\n\t}\n\treturn &tls.Config{\n\t\tRand:                        cfg.Rand,\n\t\tTime:                        cfg.Time,\n\t\tCertificates:                cfg.Certificates,\n\t\tNameToCertificate:           cfg.NameToCertificate,\n\t\tGetCertificate:              cfg.GetCertificate,\n\t\tRootCAs:                     cfg.RootCAs,\n\t\tNextProtos:                  cfg.NextProtos,\n\t\tServerName:                  cfg.ServerName,\n\t\tClientAuth:                  cfg.ClientAuth,\n\t\tClientCAs:                   cfg.ClientCAs,\n\t\tInsecureSkipVerify:          cfg.InsecureSkipVerify,\n\t\tCipherSuites:                cfg.CipherSuites,\n\t\tPreferServerCipherSuites:    cfg.PreferServerCipherSuites,\n\t\tClientSessionCache:          cfg.ClientSessionCache,\n\t\tMinVersion:                  cfg.MinVersion,\n\t\tMaxVersion:                  cfg.MaxVersion,\n\t\tCurvePreferences:            cfg.CurvePreferences,\n\t\tDynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled,\n\t\tRenegotiation:               cfg.Renegotiation,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/log.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n)\n\n// NewLoggingConn returns a logging wrapper around a connection.\nfunc NewLoggingConn(conn Conn, logger *log.Logger, prefix string) Conn {\n\tif prefix != \"\" {\n\t\tprefix = prefix + \".\"\n\t}\n\treturn &loggingConn{conn, logger, prefix}\n}\n\ntype loggingConn struct {\n\tConn\n\tlogger *log.Logger\n\tprefix string\n}\n\nfunc (c *loggingConn) Close() error {\n\terr := c.Conn.Close()\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%sClose() -> (%v)\", c.prefix, err)\n\tc.logger.Output(2, buf.String())\n\treturn err\n}\n\nfunc (c *loggingConn) printValue(buf *bytes.Buffer, v interface{}) {\n\tconst chop = 32\n\tswitch v := v.(type) {\n\tcase []byte:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase string:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase []interface{}:\n\t\tif len(v) == 0 {\n\t\t\tbuf.WriteString(\"[]\")\n\t\t} else {\n\t\t\tsep := \"[\"\n\t\t\tfin := \"]\"\n\t\t\tif len(v) > chop {\n\t\t\t\tv = v[:chop]\n\t\t\t\tfin = \"...]\"\n\t\t\t}\n\t\t\tfor _, vv := range v {\n\t\t\t\tbuf.WriteString(sep)\n\t\t\t\tc.printValue(buf, vv)\n\t\t\t\tsep = \", \"\n\t\t\t}\n\t\t\tbuf.WriteString(fin)\n\t\t}\n\tdefault:\n\t\tfmt.Fprint(buf, v)\n\t}\n}\n\nfunc (c *loggingConn) print(method, commandName string, args []interface{}, reply interface{}, err error) {\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%s%s(\", c.prefix, method)\n\tif method != \"Receive\" {\n\t\tbuf.WriteString(commandName)\n\t\tfor _, arg := range args {\n\t\t\tbuf.WriteString(\", \")\n\t\t\tc.printValue(&buf, arg)\n\t\t}\n\t}\n\tbuf.WriteString(\") -> (\")\n\tif method != \"Send\" {\n\t\tc.printValue(&buf, reply)\n\t\tbuf.WriteString(\", \")\n\t}\n\tfmt.Fprintf(&buf, \"%v)\", err)\n\tc.logger.Output(3, buf.String())\n}\n\nfunc (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, error) {\n\treply, err := c.Conn.Do(commandName, args...)\n\tc.print(\"Do\", commandName, args, reply, err)\n\treturn reply, err\n}\n\nfunc (c *loggingConn) Send(commandName string, args ...interface{}) error {\n\terr := c.Conn.Send(commandName, args...)\n\tc.print(\"Send\", commandName, args, nil, err)\n\treturn err\n}\n\nfunc (c *loggingConn) Receive() (interface{}, error) {\n\treply, err := c.Conn.Receive()\n\tc.print(\"Receive\", \"\", nil, reply, err)\n\treturn reply, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/pool.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"container/list\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/internal\"\n)\n\nvar nowFunc = time.Now // for testing\n\n// ErrPoolExhausted is returned from a pool connection method (Do, Send,\n// Receive, Flush, Err) when the maximum number of database connections in the\n// pool has been reached.\nvar ErrPoolExhausted = errors.New(\"redigo: connection pool exhausted\")\n\nvar (\n\terrPoolClosed = errors.New(\"redigo: connection pool closed\")\n\terrConnClosed = errors.New(\"redigo: connection closed\")\n)\n\n// Pool maintains a pool of connections. The application calls the Get method\n// to get a connection from the pool and the connection's Close method to\n// return the connection's resources to the pool.\n//\n// The following example shows how to use a pool in a web application. The\n// application creates a pool at application startup and makes it available to\n// request handlers using a package level variable. The pool configuration used\n// here is an example, not a recommendation.\n//\n//  func newPool(addr string) *redis.Pool {\n//    return &redis.Pool{\n//      MaxIdle: 3,\n//      IdleTimeout: 240 * time.Second,\n//      Dial: func () (redis.Conn, error) { return redis.Dial(\"tcp\", addr) },\n//    }\n//  }\n//\n//  var (\n//    pool *redis.Pool\n//    redisServer = flag.String(\"redisServer\", \":6379\", \"\")\n//  )\n//\n//  func main() {\n//    flag.Parse()\n//    pool = newPool(*redisServer)\n//    ...\n//  }\n//\n// A request handler gets a connection from the pool and closes the connection\n// when the handler is done:\n//\n//  func serveHome(w http.ResponseWriter, r *http.Request) {\n//      conn := pool.Get()\n//      defer conn.Close()\n//      ...\n//  }\n//\n// Use the Dial function to authenticate connections with the AUTH command or\n// select a database with the SELECT command:\n//\n//  pool := &redis.Pool{\n//    // Other pool configuration not shown in this example.\n//    Dial: func () (redis.Conn, error) {\n//      c, err := redis.Dial(\"tcp\", server)\n//      if err != nil {\n//        return nil, err\n//      }\n//      if _, err := c.Do(\"AUTH\", password); err != nil {\n//        c.Close()\n//        return nil, err\n//      }\n//      if _, err := c.Do(\"SELECT\", db); err != nil {\n//        c.Close()\n//        return nil, err\n//      }\n//      return c, nil\n//    }\n//  }\n//\n// Use the TestOnBorrow function to check the health of an idle connection\n// before the connection is returned to the application. This example PINGs\n// connections that have been idle more than a minute:\n//\n//  pool := &redis.Pool{\n//    // Other pool configuration not shown in this example.\n//    TestOnBorrow: func(c redis.Conn, t time.Time) error {\n//      if time.Since(t) < time.Minute {\n//        return nil\n//      }\n//      _, err := c.Do(\"PING\")\n//      return err\n//    },\n//  }\n//\ntype Pool struct {\n\n\t// Dial is an application supplied function for creating and configuring a\n\t// connection.\n\t//\n\t// The connection returned from Dial must not be in a special state\n\t// (subscribed to pubsub channel, transaction started, ...).\n\tDial func() (Conn, error)\n\n\t// TestOnBorrow is an optional application supplied function for checking\n\t// the health of an idle connection before the connection is used again by\n\t// the application. Argument t is the time that the connection was returned\n\t// to the pool. If the function returns an error, then the connection is\n\t// closed.\n\tTestOnBorrow func(c Conn, t time.Time) error\n\n\t// Maximum number of idle connections in the pool.\n\tMaxIdle int\n\n\t// Maximum number of connections allocated by the pool at a given time.\n\t// When zero, there is no limit on the number of connections in the pool.\n\tMaxActive int\n\n\t// Close connections after remaining idle for this duration. If the value\n\t// is zero, then idle connections are not closed. Applications should set\n\t// the timeout to a value less than the server's timeout.\n\tIdleTimeout time.Duration\n\n\t// If Wait is true and the pool is at the MaxActive limit, then Get() waits\n\t// for a connection to be returned to the pool before returning.\n\tWait bool\n\n\t// mu protects fields defined below.\n\tmu     sync.Mutex\n\tcond   *sync.Cond\n\tclosed bool\n\tactive int\n\n\t// Stack of idleConn with most recently used at the front.\n\tidle list.List\n}\n\ntype idleConn struct {\n\tc Conn\n\tt time.Time\n}\n\n// NewPool creates a new pool.\n//\n// Deprecated: Initialize the Pool directory as shown in the example.\nfunc NewPool(newFn func() (Conn, error), maxIdle int) *Pool {\n\treturn &Pool{Dial: newFn, MaxIdle: maxIdle}\n}\n\n// Get gets a connection. The application must close the returned connection.\n// This method always returns a valid connection so that applications can defer\n// error handling to the first use of the connection. If there is an error\n// getting an underlying connection, then the connection Err, Do, Send, Flush\n// and Receive methods return that error.\nfunc (p *Pool) Get() Conn {\n\tc, err := p.get()\n\tif err != nil {\n\t\treturn errorConnection{err}\n\t}\n\treturn &pooledConnection{p: p, c: c}\n}\n\n// ActiveCount returns the number of active connections in the pool.\nfunc (p *Pool) ActiveCount() int {\n\tp.mu.Lock()\n\tactive := p.active\n\tp.mu.Unlock()\n\treturn active\n}\n\n// Close releases the resources used by the pool.\nfunc (p *Pool) Close() error {\n\tp.mu.Lock()\n\tidle := p.idle\n\tp.idle.Init()\n\tp.closed = true\n\tp.active -= idle.Len()\n\tif p.cond != nil {\n\t\tp.cond.Broadcast()\n\t}\n\tp.mu.Unlock()\n\tfor e := idle.Front(); e != nil; e = e.Next() {\n\t\te.Value.(idleConn).c.Close()\n\t}\n\treturn nil\n}\n\n// release decrements the active count and signals waiters. The caller must\n// hold p.mu during the call.\nfunc (p *Pool) release() {\n\tp.active -= 1\n\tif p.cond != nil {\n\t\tp.cond.Signal()\n\t}\n}\n\n// get prunes stale connections and returns a connection from the idle list or\n// creates a new connection.\nfunc (p *Pool) get() (Conn, error) {\n\tp.mu.Lock()\n\n\t// Prune stale connections.\n\n\tif timeout := p.IdleTimeout; timeout > 0 {\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Back()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tif ic.t.Add(timeout).After(nowFunc()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.idle.Remove(e)\n\t\t\tp.release()\n\t\t\tp.mu.Unlock()\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t}\n\t}\n\n\tfor {\n\n\t\t// Get idle connection.\n\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Front()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tp.idle.Remove(e)\n\t\t\ttest := p.TestOnBorrow\n\t\t\tp.mu.Unlock()\n\t\t\tif test == nil || test(ic.c, ic.t) == nil {\n\t\t\t\treturn ic.c, nil\n\t\t\t}\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t\tp.release()\n\t\t}\n\n\t\t// Check for pool closed before dialing a new connection.\n\n\t\tif p.closed {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, errors.New(\"redigo: get on closed pool\")\n\t\t}\n\n\t\t// Dial new connection if under limit.\n\n\t\tif p.MaxActive == 0 || p.active < p.MaxActive {\n\t\t\tdial := p.Dial\n\t\t\tp.active += 1\n\t\t\tp.mu.Unlock()\n\t\t\tc, err := dial()\n\t\t\tif err != nil {\n\t\t\t\tp.mu.Lock()\n\t\t\t\tp.release()\n\t\t\t\tp.mu.Unlock()\n\t\t\t\tc = nil\n\t\t\t}\n\t\t\treturn c, err\n\t\t}\n\n\t\tif !p.Wait {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, ErrPoolExhausted\n\t\t}\n\n\t\tif p.cond == nil {\n\t\t\tp.cond = sync.NewCond(&p.mu)\n\t\t}\n\t\tp.cond.Wait()\n\t}\n}\n\nfunc (p *Pool) put(c Conn, forceClose bool) error {\n\terr := c.Err()\n\tp.mu.Lock()\n\tif !p.closed && err == nil && !forceClose {\n\t\tp.idle.PushFront(idleConn{t: nowFunc(), c: c})\n\t\tif p.idle.Len() > p.MaxIdle {\n\t\t\tc = p.idle.Remove(p.idle.Back()).(idleConn).c\n\t\t} else {\n\t\t\tc = nil\n\t\t}\n\t}\n\n\tif c == nil {\n\t\tif p.cond != nil {\n\t\t\tp.cond.Signal()\n\t\t}\n\t\tp.mu.Unlock()\n\t\treturn nil\n\t}\n\n\tp.release()\n\tp.mu.Unlock()\n\treturn c.Close()\n}\n\ntype pooledConnection struct {\n\tp     *Pool\n\tc     Conn\n\tstate int\n}\n\nvar (\n\tsentinel     []byte\n\tsentinelOnce sync.Once\n)\n\nfunc initSentinel() {\n\tp := make([]byte, 64)\n\tif _, err := rand.Read(p); err == nil {\n\t\tsentinel = p\n\t} else {\n\t\th := sha1.New()\n\t\tio.WriteString(h, \"Oops, rand failed. Use time instead.\")\n\t\tio.WriteString(h, strconv.FormatInt(time.Now().UnixNano(), 10))\n\t\tsentinel = h.Sum(nil)\n\t}\n}\n\nfunc (pc *pooledConnection) Close() error {\n\tc := pc.c\n\tif _, ok := c.(errorConnection); ok {\n\t\treturn nil\n\t}\n\tpc.c = errorConnection{errConnClosed}\n\n\tif pc.state&internal.MultiState != 0 {\n\t\tc.Send(\"DISCARD\")\n\t\tpc.state &^= (internal.MultiState | internal.WatchState)\n\t} else if pc.state&internal.WatchState != 0 {\n\t\tc.Send(\"UNWATCH\")\n\t\tpc.state &^= internal.WatchState\n\t}\n\tif pc.state&internal.SubscribeState != 0 {\n\t\tc.Send(\"UNSUBSCRIBE\")\n\t\tc.Send(\"PUNSUBSCRIBE\")\n\t\t// To detect the end of the message stream, ask the server to echo\n\t\t// a sentinel value and read until we see that value.\n\t\tsentinelOnce.Do(initSentinel)\n\t\tc.Send(\"ECHO\", sentinel)\n\t\tc.Flush()\n\t\tfor {\n\t\t\tp, err := c.Receive()\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif p, ok := p.([]byte); ok && bytes.Equal(p, sentinel) {\n\t\t\t\tpc.state &^= internal.SubscribeState\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tc.Do(\"\")\n\tpc.p.put(c, pc.state != 0)\n\treturn nil\n}\n\nfunc (pc *pooledConnection) Err() error {\n\treturn pc.c.Err()\n}\n\nfunc (pc *pooledConnection) Do(commandName string, args ...interface{}) (reply interface{}, err error) {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Do(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Send(commandName string, args ...interface{}) error {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Send(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Flush() error {\n\treturn pc.c.Flush()\n}\n\nfunc (pc *pooledConnection) Receive() (reply interface{}, err error) {\n\treturn pc.c.Receive()\n}\n\ntype errorConnection struct{ err error }\n\nfunc (ec errorConnection) Do(string, ...interface{}) (interface{}, error) { return nil, ec.err }\nfunc (ec errorConnection) Send(string, ...interface{}) error              { return ec.err }\nfunc (ec errorConnection) Err() error                                     { return ec.err }\nfunc (ec errorConnection) Close() error                                   { return ec.err }\nfunc (ec errorConnection) Flush() error                                   { return ec.err }\nfunc (ec errorConnection) Receive() (interface{}, error)                  { return nil, ec.err }\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/pre_go17.go",
    "content": "// +build !go1.7\n\npackage redis\n\nimport \"crypto/tls\"\n\n// similar cloneTLSClientConfig in the stdlib, but also honor skipVerify for the nil case\nfunc cloneTLSClientConfig(cfg *tls.Config, skipVerify bool) *tls.Config {\n\tif cfg == nil {\n\t\treturn &tls.Config{InsecureSkipVerify: skipVerify}\n\t}\n\treturn &tls.Config{\n\t\tRand:                     cfg.Rand,\n\t\tTime:                     cfg.Time,\n\t\tCertificates:             cfg.Certificates,\n\t\tNameToCertificate:        cfg.NameToCertificate,\n\t\tGetCertificate:           cfg.GetCertificate,\n\t\tRootCAs:                  cfg.RootCAs,\n\t\tNextProtos:               cfg.NextProtos,\n\t\tServerName:               cfg.ServerName,\n\t\tClientAuth:               cfg.ClientAuth,\n\t\tClientCAs:                cfg.ClientCAs,\n\t\tInsecureSkipVerify:       cfg.InsecureSkipVerify,\n\t\tCipherSuites:             cfg.CipherSuites,\n\t\tPreferServerCipherSuites: cfg.PreferServerCipherSuites,\n\t\tClientSessionCache:       cfg.ClientSessionCache,\n\t\tMinVersion:               cfg.MinVersion,\n\t\tMaxVersion:               cfg.MaxVersion,\n\t\tCurvePreferences:         cfg.CurvePreferences,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/pubsub.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport \"errors\"\n\n// Subscription represents a subscribe or unsubscribe notification.\ntype Subscription struct {\n\n\t// Kind is \"subscribe\", \"unsubscribe\", \"psubscribe\" or \"punsubscribe\"\n\tKind string\n\n\t// The channel that was changed.\n\tChannel string\n\n\t// The current number of subscriptions for connection.\n\tCount int\n}\n\n// Message represents a message notification.\ntype Message struct {\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// PMessage represents a pmessage notification.\ntype PMessage struct {\n\n\t// The matched pattern.\n\tPattern string\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// Pong represents a pubsub pong notification.\ntype Pong struct {\n\tData string\n}\n\n// PubSubConn wraps a Conn with convenience methods for subscribers.\ntype PubSubConn struct {\n\tConn Conn\n}\n\n// Close closes the connection.\nfunc (c PubSubConn) Close() error {\n\treturn c.Conn.Close()\n}\n\n// Subscribe subscribes the connection to the specified channels.\nfunc (c PubSubConn) Subscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"SUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PSubscribe subscribes the connection to the given patterns.\nfunc (c PubSubConn) PSubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Unsubscribe unsubscribes the connection from the given channels, or from all\n// of them if none is given.\nfunc (c PubSubConn) Unsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"UNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PUnsubscribe unsubscribes the connection from the given patterns, or from all\n// of them if none is given.\nfunc (c PubSubConn) PUnsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PUNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Ping sends a PING to the server with the specified data.\nfunc (c PubSubConn) Ping(data string) error {\n\tc.Conn.Send(\"PING\", data)\n\treturn c.Conn.Flush()\n}\n\n// Receive returns a pushed message as a Subscription, Message, PMessage, Pong\n// or error. The return value is intended to be used directly in a type switch\n// as illustrated in the PubSubConn example.\nfunc (c PubSubConn) Receive() interface{} {\n\treply, err := Values(c.Conn.Receive())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar kind string\n\treply, err = Scan(reply, &kind)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch kind {\n\tcase \"message\":\n\t\tvar m Message\n\t\tif _, err := Scan(reply, &m.Channel, &m.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn m\n\tcase \"pmessage\":\n\t\tvar pm PMessage\n\t\tif _, err := Scan(reply, &pm.Pattern, &pm.Channel, &pm.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn pm\n\tcase \"subscribe\", \"psubscribe\", \"unsubscribe\", \"punsubscribe\":\n\t\ts := Subscription{Kind: kind}\n\t\tif _, err := Scan(reply, &s.Channel, &s.Count); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn s\n\tcase \"pong\":\n\t\tvar p Pong\n\t\tif _, err := Scan(reply, &p.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn p\n\t}\n\treturn errors.New(\"redigo: unknown pubsub notification\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/redis.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\n// Error represents an error returned in a command reply.\ntype Error string\n\nfunc (err Error) Error() string { return string(err) }\n\n// Conn represents a connection to a Redis server.\ntype Conn interface {\n\t// Close closes the connection.\n\tClose() error\n\n\t// Err returns a non-nil value when the connection is not usable.\n\tErr() error\n\n\t// Do sends a command to the server and returns the received reply.\n\tDo(commandName string, args ...interface{}) (reply interface{}, err error)\n\n\t// Send writes the command to the client's output buffer.\n\tSend(commandName string, args ...interface{}) error\n\n\t// Flush flushes the output buffer to the Redis server.\n\tFlush() error\n\n\t// Receive receives a single reply from the Redis server\n\tReceive() (reply interface{}, err error)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/reply.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// ErrNil indicates that a reply value is nil.\nvar ErrNil = errors.New(\"redigo: nil returned\")\n\n// Int is a helper that converts a command reply to an integer. If err is not\n// equal to nil, then Int returns 0, err. Otherwise, Int converts the\n// reply to an int as follows:\n//\n//  Reply type    Result\n//  integer       int(reply), nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int(reply interface{}, err error) (int, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tx := int(reply)\n\t\tif int64(x) != reply {\n\t\t\treturn 0, strconv.ErrRange\n\t\t}\n\t\treturn x, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 0)\n\t\treturn int(n), err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int, got type %T\", reply)\n}\n\n// Int64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int64(reply interface{}, err error) (int64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int64, got type %T\", reply)\n}\n\nvar errNegativeInt = errors.New(\"redigo: unexpected value for Uint64\")\n\n// Uint64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Uint64(reply interface{}, err error) (uint64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tif reply < 0 {\n\t\t\treturn 0, errNegativeInt\n\t\t}\n\t\treturn uint64(reply), nil\n\tcase []byte:\n\t\tn, err := strconv.ParseUint(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Uint64, got type %T\", reply)\n}\n\n// Float64 is a helper that converts a command reply to 64 bit float. If err is\n// not equal to nil, then Float64 returns 0, err. Otherwise, Float64 converts\n// the reply to an int as follows:\n//\n//  Reply type    Result\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Float64(reply interface{}, err error) (float64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\tn, err := strconv.ParseFloat(string(reply), 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Float64, got type %T\", reply)\n}\n\n// String is a helper that converts a command reply to a string. If err is not\n// equal to nil, then String returns \"\", err. Otherwise String converts the\n// reply to a string as follows:\n//\n//  Reply type      Result\n//  bulk string     string(reply), nil\n//  simple string   reply, nil\n//  nil             \"\",  ErrNil\n//  other           \"\",  error\nfunc String(reply interface{}, err error) (string, error) {\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn string(reply), nil\n\tcase string:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn \"\", ErrNil\n\tcase Error:\n\t\treturn \"\", reply\n\t}\n\treturn \"\", fmt.Errorf(\"redigo: unexpected type for String, got type %T\", reply)\n}\n\n// Bytes is a helper that converts a command reply to a slice of bytes. If err\n// is not equal to nil, then Bytes returns nil, err. Otherwise Bytes converts\n// the reply to a slice of bytes as follows:\n//\n//  Reply type      Result\n//  bulk string     reply, nil\n//  simple string   []byte(reply), nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Bytes(reply interface{}, err error) ([]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn reply, nil\n\tcase string:\n\t\treturn []byte(reply), nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Bytes, got type %T\", reply)\n}\n\n// Bool is a helper that converts a command reply to a boolean. If err is not\n// equal to nil, then Bool returns false, err. Otherwise Bool converts the\n// reply to boolean as follows:\n//\n//  Reply type      Result\n//  integer         value != 0, nil\n//  bulk string     strconv.ParseBool(reply)\n//  nil             false, ErrNil\n//  other           false, error\nfunc Bool(reply interface{}, err error) (bool, error) {\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply != 0, nil\n\tcase []byte:\n\t\treturn strconv.ParseBool(string(reply))\n\tcase nil:\n\t\treturn false, ErrNil\n\tcase Error:\n\t\treturn false, reply\n\t}\n\treturn false, fmt.Errorf(\"redigo: unexpected type for Bool, got type %T\", reply)\n}\n\n// MultiBulk is a helper that converts an array command reply to a []interface{}.\n//\n// Deprecated: Use Values instead.\nfunc MultiBulk(reply interface{}, err error) ([]interface{}, error) { return Values(reply, err) }\n\n// Values is a helper that converts an array command reply to a []interface{}.\n// If err is not equal to nil, then Values returns nil, err. Otherwise, Values\n// converts the reply as follows:\n//\n//  Reply type      Result\n//  array           reply, nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Values(reply interface{}, err error) ([]interface{}, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Values, got type %T\", reply)\n}\n\n// Strings is a helper that converts an array command reply to a []string. If\n// err is not equal to nil, then Strings returns nil, err. Nil array items are\n// converted to \"\" in the output slice. Strings returns an error if an array\n// item is not a bulk string or nil.\nfunc Strings(reply interface{}, err error) ([]string, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([]string, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for Strings, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = string(p)\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Strings, got type %T\", reply)\n}\n\n// ByteSlices is a helper that converts an array command reply to a [][]byte.\n// If err is not equal to nil, then ByteSlices returns nil, err. Nil array\n// items are stay nil. ByteSlices returns an error if an array item is not a\n// bulk string or nil.\nfunc ByteSlices(reply interface{}, err error) ([][]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([][]byte, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for ByteSlices, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = p\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for ByteSlices, got type %T\", reply)\n}\n\n// Ints is a helper that converts an array command reply to a []int. If\n// err is not equal to nil, then Ints returns nil, err.\nfunc Ints(reply interface{}, err error) ([]int, error) {\n\tvar ints []int\n\tvalues, err := Values(reply, err)\n\tif err != nil {\n\t\treturn ints, err\n\t}\n\tif err := ScanSlice(values, &ints); err != nil {\n\t\treturn ints, err\n\t}\n\treturn ints, nil\n}\n\n// StringMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]string. The HGETALL and CONFIG GET commands return replies in this format.\n// Requires an even number of values in result.\nfunc StringMap(result interface{}, err error) (map[string]string, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: StringMap expects even number of values result\")\n\t}\n\tm := make(map[string]string, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, okKey := values[i].([]byte)\n\t\tvalue, okValue := values[i+1].([]byte)\n\t\tif !okKey || !okValue {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tm[string(key)] = string(value)\n\t}\n\treturn m, nil\n}\n\n// IntMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc IntMap(result interface{}, err error) (map[string]int, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: IntMap expects even number of values result\")\n\t}\n\tm := make(map[string]int, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n\n// Int64Map is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int64. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc Int64Map(result interface{}, err error) (map[string]int64, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: Int64Map expects even number of values result\")\n\t}\n\tm := make(map[string]int64, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int64(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n\n// Positions is a helper that converts an array of positions (lat, long)\n// into a [][2]float64. The GEOPOS command returns replies in this format.\nfunc Positions(result interface{}, err error) ([]*[2]float64, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpositions := make([]*[2]float64, len(values))\n\tfor i := range values {\n\t\tif values[i] == nil {\n\t\t\tcontinue\n\t\t}\n\t\tp, ok := values[i].([]interface{})\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for interface slice, got type %T\", values[i])\n\t\t}\n\t\tif len(p) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected number of values for a member position, got %d\", len(p))\n\t\t}\n\t\tlat, err := Float64(p[0], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlong, err := Float64(p[1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpositions[i] = &[2]float64{lat, long}\n\t}\n\treturn positions, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/scan.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nfunc ensureLen(d reflect.Value, n int) {\n\tif n > d.Cap() {\n\t\td.Set(reflect.MakeSlice(d.Type(), n, n))\n\t} else {\n\t\td.SetLen(n)\n\t}\n}\n\nfunc cannotConvert(d reflect.Value, s interface{}) error {\n\tvar sname string\n\tswitch s.(type) {\n\tcase string:\n\t\tsname = \"Redis simple string\"\n\tcase Error:\n\t\tsname = \"Redis error\"\n\tcase int64:\n\t\tsname = \"Redis integer\"\n\tcase []byte:\n\t\tsname = \"Redis bulk string\"\n\tcase []interface{}:\n\t\tsname = \"Redis array\"\n\tdefault:\n\t\tsname = reflect.TypeOf(s).String()\n\t}\n\treturn fmt.Errorf(\"cannot convert from %s to %s\", sname, d.Type())\n}\n\nfunc convertAssignBulkString(d reflect.Value, s []byte) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tvar x float64\n\t\tx, err = strconv.ParseFloat(string(s), d.Type().Bits())\n\t\td.SetFloat(x)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tvar x int64\n\t\tx, err = strconv.ParseInt(string(s), 10, d.Type().Bits())\n\t\td.SetInt(x)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tvar x uint64\n\t\tx, err = strconv.ParseUint(string(s), 10, d.Type().Bits())\n\t\td.SetUint(x)\n\tcase reflect.Bool:\n\t\tvar x bool\n\t\tx, err = strconv.ParseBool(string(s))\n\t\td.SetBool(x)\n\tcase reflect.String:\n\t\td.SetString(string(s))\n\tcase reflect.Slice:\n\t\tif d.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\terr = cannotConvert(d, s)\n\t\t} else {\n\t\t\td.SetBytes(s)\n\t\t}\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignInt(d reflect.Value, s int64) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\td.SetInt(s)\n\t\tif d.Int() != s {\n\t\t\terr = strconv.ErrRange\n\t\t\td.SetInt(0)\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tif s < 0 {\n\t\t\terr = strconv.ErrRange\n\t\t} else {\n\t\t\tx := uint64(s)\n\t\t\td.SetUint(x)\n\t\t\tif d.Uint() != x {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\td.SetUint(0)\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\td.SetBool(s != 0)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignValue(d reflect.Value, s interface{}) (err error) {\n\tswitch s := s.(type) {\n\tcase []byte:\n\t\terr = convertAssignBulkString(d, s)\n\tcase int64:\n\t\terr = convertAssignInt(d, s)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn err\n}\n\nfunc convertAssignArray(d reflect.Value, s []interface{}) error {\n\tif d.Type().Kind() != reflect.Slice {\n\t\treturn cannotConvert(d, s)\n\t}\n\tensureLen(d, len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tif err := convertAssignValue(d.Index(i), s[i]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc convertAssign(d interface{}, s interface{}) (err error) {\n\t// Handle the most common destination types using type switches and\n\t// fall back to reflection for all other types.\n\tswitch s := s.(type) {\n\tcase nil:\n\t\t// ingore\n\tcase []byte:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tcase *int:\n\t\t\t*d, err = strconv.Atoi(string(s))\n\t\tcase *bool:\n\t\t\t*d, err = strconv.ParseBool(string(s))\n\t\tcase *[]byte:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignBulkString(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase int64:\n\t\tswitch d := d.(type) {\n\t\tcase *int:\n\t\t\tx := int(s)\n\t\t\tif int64(x) != s {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\t*d = x\n\t\tcase *bool:\n\t\t\t*d = s != 0\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignInt(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase string:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tdefault:\n\t\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t\t}\n\tcase []interface{}:\n\t\tswitch d := d.(type) {\n\t\tcase *[]interface{}:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignArray(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase Error:\n\t\terr = s\n\tdefault:\n\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t}\n\treturn\n}\n\n// Scan copies from src to the values pointed at by dest.\n//\n// The values pointed at by dest must be an integer, float, boolean, string,\n// []byte, interface{} or slices of these types. Scan uses the standard strconv\n// package to convert bulk strings to numeric and boolean types.\n//\n// If a dest value is nil, then the corresponding src value is skipped.\n//\n// If a src element is nil, then the corresponding dest value is not modified.\n//\n// To enable easy use of Scan in a loop, Scan returns the slice of src\n// following the copied values.\nfunc Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) {\n\tif len(src) < len(dest) {\n\t\treturn nil, errors.New(\"redigo.Scan: array short\")\n\t}\n\tvar err error\n\tfor i, d := range dest {\n\t\terr = convertAssign(d, src[i])\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"redigo.Scan: cannot assign to dest %d: %v\", i, err)\n\t\t\tbreak\n\t\t}\n\t}\n\treturn src[len(dest):], err\n}\n\ntype fieldSpec struct {\n\tname      string\n\tindex     []int\n\tomitEmpty bool\n}\n\ntype structSpec struct {\n\tm map[string]*fieldSpec\n\tl []*fieldSpec\n}\n\nfunc (ss *structSpec) fieldSpec(name []byte) *fieldSpec {\n\treturn ss.m[string(name)]\n}\n\nfunc compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *structSpec) {\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tswitch {\n\t\tcase f.PkgPath != \"\" && !f.Anonymous:\n\t\t\t// Ignore unexported fields.\n\t\tcase f.Anonymous:\n\t\t\t// TODO: Handle pointers. Requires change to decoder and\n\t\t\t// protection against infinite recursion.\n\t\t\tif f.Type.Kind() == reflect.Struct {\n\t\t\t\tcompileStructSpec(f.Type, depth, append(index, i), ss)\n\t\t\t}\n\t\tdefault:\n\t\t\tfs := &fieldSpec{name: f.Name}\n\t\t\ttag := f.Tag.Get(\"redis\")\n\t\t\tp := strings.Split(tag, \",\")\n\t\t\tif len(p) > 0 {\n\t\t\t\tif p[0] == \"-\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif len(p[0]) > 0 {\n\t\t\t\t\tfs.name = p[0]\n\t\t\t\t}\n\t\t\t\tfor _, s := range p[1:] {\n\t\t\t\t\tswitch s {\n\t\t\t\t\tcase \"omitempty\":\n\t\t\t\t\t\tfs.omitEmpty = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tpanic(fmt.Errorf(\"redigo: unknown field tag %s for type %s\", s, t.Name()))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\td, found := depth[fs.name]\n\t\t\tif !found {\n\t\t\t\td = 1 << 30\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase len(index) == d:\n\t\t\t\t// At same depth, remove from result.\n\t\t\t\tdelete(ss.m, fs.name)\n\t\t\t\tj := 0\n\t\t\t\tfor i := 0; i < len(ss.l); i++ {\n\t\t\t\t\tif fs.name != ss.l[i].name {\n\t\t\t\t\t\tss.l[j] = ss.l[i]\n\t\t\t\t\t\tj += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tss.l = ss.l[:j]\n\t\t\tcase len(index) < d:\n\t\t\t\tfs.index = make([]int, len(index)+1)\n\t\t\t\tcopy(fs.index, index)\n\t\t\t\tfs.index[len(index)] = i\n\t\t\t\tdepth[fs.name] = len(index)\n\t\t\t\tss.m[fs.name] = fs\n\t\t\t\tss.l = append(ss.l, fs)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar (\n\tstructSpecMutex  sync.RWMutex\n\tstructSpecCache  = make(map[reflect.Type]*structSpec)\n\tdefaultFieldSpec = &fieldSpec{}\n)\n\nfunc structSpecForType(t reflect.Type) *structSpec {\n\n\tstructSpecMutex.RLock()\n\tss, found := structSpecCache[t]\n\tstructSpecMutex.RUnlock()\n\tif found {\n\t\treturn ss\n\t}\n\n\tstructSpecMutex.Lock()\n\tdefer structSpecMutex.Unlock()\n\tss, found = structSpecCache[t]\n\tif found {\n\t\treturn ss\n\t}\n\n\tss = &structSpec{m: make(map[string]*fieldSpec)}\n\tcompileStructSpec(t, make(map[string]int), nil, ss)\n\tstructSpecCache[t] = ss\n\treturn ss\n}\n\nvar errScanStructValue = errors.New(\"redigo.ScanStruct: value must be non-nil pointer to a struct\")\n\n// ScanStruct scans alternating names and values from src to a struct. The\n// HGETALL and CONFIG GET commands return replies in this format.\n//\n// ScanStruct uses exported field names to match values in the response. Use\n// 'redis' field tag to override the name:\n//\n//      Field int `redis:\"myName\"`\n//\n// Fields with the tag redis:\"-\" are ignored.\n//\n// Integer, float, boolean, string and []byte fields are supported. Scan uses the\n// standard strconv package to convert bulk string values to numeric and\n// boolean types.\n//\n// If a src element is nil, then the corresponding field is not modified.\nfunc ScanStruct(src []interface{}, dest interface{}) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanStructValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Struct {\n\t\treturn errScanStructValue\n\t}\n\tss := structSpecForType(d.Type())\n\n\tif len(src)%2 != 0 {\n\t\treturn errors.New(\"redigo.ScanStruct: number of values not a multiple of 2\")\n\t}\n\n\tfor i := 0; i < len(src); i += 2 {\n\t\ts := src[i+1]\n\t\tif s == nil {\n\t\t\tcontinue\n\t\t}\n\t\tname, ok := src[i].([]byte)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: key %d not a bulk string value\", i)\n\t\t}\n\t\tfs := ss.fieldSpec(name)\n\t\tif fs == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: cannot assign field %s: %v\", fs.name, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nvar (\n\terrScanSliceValue = errors.New(\"redigo.ScanSlice: dest must be non-nil pointer to a struct\")\n)\n\n// ScanSlice scans src to the slice pointed to by dest. The elements the dest\n// slice must be integer, float, boolean, string, struct or pointer to struct\n// values.\n//\n// Struct fields must be integer, float, boolean or string values. All struct\n// fields are used unless a subset is specified using fieldNames.\nfunc ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanSliceValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Slice {\n\t\treturn errScanSliceValue\n\t}\n\n\tisPtr := false\n\tt := d.Type().Elem()\n\tif t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {\n\t\tisPtr = true\n\t\tt = t.Elem()\n\t}\n\n\tif t.Kind() != reflect.Struct {\n\t\tensureLen(d, len(src))\n\t\tfor i, s := range src {\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.Index(i), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d: %v\", i, err)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tss := structSpecForType(t)\n\tfss := ss.l\n\tif len(fieldNames) > 0 {\n\t\tfss = make([]*fieldSpec, len(fieldNames))\n\t\tfor i, name := range fieldNames {\n\t\t\tfss[i] = ss.m[name]\n\t\t\tif fss[i] == nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: ScanSlice bad field name %s\", name)\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(fss) == 0 {\n\t\treturn errors.New(\"redigo.ScanSlice: no struct fields\")\n\t}\n\n\tn := len(src) / len(fss)\n\tif n*len(fss) != len(src) {\n\t\treturn errors.New(\"redigo.ScanSlice: length not a multiple of struct field count\")\n\t}\n\n\tensureLen(d, n)\n\tfor i := 0; i < n; i++ {\n\t\td := d.Index(i)\n\t\tif isPtr {\n\t\t\tif d.IsNil() {\n\t\t\t\td.Set(reflect.New(t))\n\t\t\t}\n\t\t\td = d.Elem()\n\t\t}\n\t\tfor j, fs := range fss {\n\t\t\ts := src[i*len(fss)+j]\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d to field %s: %v\", i*len(fss)+j, fs.name, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Args is a helper for constructing command arguments from structured values.\ntype Args []interface{}\n\n// Add returns the result of appending value to args.\nfunc (args Args) Add(value ...interface{}) Args {\n\treturn append(args, value...)\n}\n\n// AddFlat returns the result of appending the flattened value of v to args.\n//\n// Maps are flattened by appending the alternating keys and map values to args.\n//\n// Slices are flattened by appending the slice elements to args.\n//\n// Structs are flattened by appending the alternating names and values of\n// exported fields to args. If v is a nil struct pointer, then nothing is\n// appended. The 'redis' field tag overrides struct field names. See ScanStruct\n// for more information on the use of the 'redis' field tag.\n//\n// Other types are appended to args as is.\nfunc (args Args) AddFlat(v interface{}) Args {\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Struct:\n\t\targs = flattenStruct(args, rv)\n\tcase reflect.Slice:\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\targs = append(args, rv.Index(i).Interface())\n\t\t}\n\tcase reflect.Map:\n\t\tfor _, k := range rv.MapKeys() {\n\t\t\targs = append(args, k.Interface(), rv.MapIndex(k).Interface())\n\t\t}\n\tcase reflect.Ptr:\n\t\tif rv.Type().Elem().Kind() == reflect.Struct {\n\t\t\tif !rv.IsNil() {\n\t\t\t\targs = flattenStruct(args, rv.Elem())\n\t\t\t}\n\t\t} else {\n\t\t\targs = append(args, v)\n\t\t}\n\tdefault:\n\t\targs = append(args, v)\n\t}\n\treturn args\n}\n\nfunc flattenStruct(args Args, v reflect.Value) Args {\n\tss := structSpecForType(v.Type())\n\tfor _, fs := range ss.l {\n\t\tfv := v.FieldByIndex(fs.index)\n\t\tif fs.omitEmpty {\n\t\t\tvar empty = false\n\t\t\tswitch fv.Kind() {\n\t\t\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\t\t\tempty = fv.Len() == 0\n\t\t\tcase reflect.Bool:\n\t\t\t\tempty = !fv.Bool()\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tempty = fv.Int() == 0\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\tempty = fv.Uint() == 0\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\tempty = fv.Float() == 0\n\t\t\tcase reflect.Interface, reflect.Ptr:\n\t\t\t\tempty = fv.IsNil()\n\t\t\t}\n\t\t\tif empty {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\targs = append(args, fs.name, fv.Interface())\n\t}\n\treturn args\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/github.com/garyburd/redigo/redis/script.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"strings\"\n)\n\n// Script encapsulates the source, hash and key count for a Lua script. See\n// http://redis.io/commands/eval for information on scripts in Redis.\ntype Script struct {\n\tkeyCount int\n\tsrc      string\n\thash     string\n}\n\n// NewScript returns a new script object. If keyCount is greater than or equal\n// to zero, then the count is automatically inserted in the EVAL command\n// argument list. If keyCount is less than zero, then the application supplies\n// the count as the first value in the keysAndArgs argument to the Do, Send and\n// SendHash methods.\nfunc NewScript(keyCount int, src string) *Script {\n\th := sha1.New()\n\tio.WriteString(h, src)\n\treturn &Script{keyCount, src, hex.EncodeToString(h.Sum(nil))}\n}\n\nfunc (s *Script) args(spec string, keysAndArgs []interface{}) []interface{} {\n\tvar args []interface{}\n\tif s.keyCount < 0 {\n\t\targs = make([]interface{}, 1+len(keysAndArgs))\n\t\targs[0] = spec\n\t\tcopy(args[1:], keysAndArgs)\n\t} else {\n\t\targs = make([]interface{}, 2+len(keysAndArgs))\n\t\targs[0] = spec\n\t\targs[1] = s.keyCount\n\t\tcopy(args[2:], keysAndArgs)\n\t}\n\treturn args\n}\n\n// Do evaluates the script. Under the covers, Do optimistically evaluates the\n// script using the EVALSHA command. If the command fails because the script is\n// not loaded, then Do evaluates the script using the EVAL command (thus\n// causing the script to load).\nfunc (s *Script) Do(c Conn, keysAndArgs ...interface{}) (interface{}, error) {\n\tv, err := c.Do(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n\tif e, ok := err.(Error); ok && strings.HasPrefix(string(e), \"NOSCRIPT \") {\n\t\tv, err = c.Do(\"EVAL\", s.args(s.src, keysAndArgs)...)\n\t}\n\treturn v, err\n}\n\n// SendHash evaluates the script without waiting for the reply. The script is\n// evaluated with the EVALSHA command. The application must ensure that the\n// script is loaded by a previous call to Send, Do or Load methods.\nfunc (s *Script) SendHash(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n}\n\n// Send evaluates the script without waiting for the reply.\nfunc (s *Script) Send(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVAL\", s.args(s.src, keysAndArgs)...)\n}\n\n// Load loads the script without evaluating it.\nfunc (s *Script) Load(c Conn) error {\n\t_, err := c.Do(\"SCRIPT\", \"LOAD\", s.src)\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter4/redis/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/garyburd/redigo/internal\",\n\t\t\t\"repository\": \"https://github.com/garyburd/redigo\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"ac91d6ff49bd0d278a90201de77a4f8ad9628e25\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"internal\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/garyburd/redigo/redis\",\n\t\t\t\"repository\": \"https://github.com/garyburd/redigo\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"ac91d6ff49bd0d278a90201de77a4f8ad9628e25\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"path\": \"/redis\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter7/.gitignore",
    "content": "/build"
  },
  {
    "path": "12fa-docker-golang/chapter7/Dockerfile",
    "content": "FROM alpine:3.5\n\nRUN apk add --no-cache curl\n\nADD build/ /app/\n\nENV PORT=3000\n\nHEALTHCHECK --interval=60s --timeout=60s CMD curl -f http://localhost:$PORT/api/health || exit 1\n\nWORKDIR /app\n\nENTRYPOINT [\"/app/gotwitter\"]"
  },
  {
    "path": "12fa-docker-golang/chapter7/README.md",
    "content": "The code here demonstrates a few principles of modern API/Go/Web development:\n\n1. APIs are provided by Go,\n2. Go does the port binding (web server),\n3. Front-end is done in Vue.js (fully static files),\n4. APP uses redis (attached resources),\n5. Config comes from the environment\n\nThis is a sample included in the book [12 Factor Applications with Docker and Go](https://leanpub.com/12fa-docker-golang).\n\nThe whole thing is just cool, small, nice, sexy, sweet. As the author, I am biased.\n\nRuns in docker with `./run`.\n\n![Screenshot](../images/twitter-app.png)"
  },
  {
    "path": "12fa-docker-golang/chapter7/api/health.go",
    "content": "package api\n\nimport \"net/http\"\nimport \"app/services\"\n\n// Health check API\ntype Health struct {\n}\n\n// Register Health check API endpoints\nfunc (t Health) Register() {\n\thttp.HandleFunc(\"/api/health\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse := \"OK\"\n\t\tservices.Respond(w, response, nil)\n\t})\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/api/twitter.go",
    "content": "package api\n\nimport \"time\"\nimport \"net/http\"\nimport \"encoding/json\"\nimport \"app/services\"\nimport \"github.com/garyburd/redigo/redis\"\n\n// Twitter post message API\ntype Twitter struct {\n}\n\n// TwitterMessage - Structure of a post\ntype TwitterMessage struct {\n\tMessage string\n\tTime    time.Time\n}\n\n// Register Twitter API endpoints\nfunc (t *Twitter) Register() {\n\thttp.HandleFunc(\"/api/twitter/list\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse, err := t.List()\n\t\tservices.Respond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/api/twitter/add\", func(w http.ResponseWriter, r *http.Request) {\n\t\tmessage := t.Message(r.FormValue(\"message\"))\n\t\tresponse := \"OK\"\n\t\terr := t.Store(message)\n\t\tservices.Respond(w, response, err)\n\t})\n}\n\n// Message creates a new TwitterMessage\nfunc (t *Twitter) Message(message string) *TwitterMessage {\n\treturn &TwitterMessage{message, time.Now()}\n}\n\n// List TwitterMessages for pagination\nfunc (t *Twitter) List() ([]*TwitterMessage, error) {\n\tresults := make([]*TwitterMessage, 0)\n\n\tconn, err := services.GetRedis()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmessages, err := redis.Strings(conn.Do(\"LRANGE\", \"twitter\", 0, 4))\n\tfor _, message := range messages {\n\t\tmessageJSON := &TwitterMessage{}\n\t\terr = json.Unmarshal([]byte(message), messageJSON)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tresults = append(results, messageJSON)\n\t}\n\treturn results, nil\n}\n\n// Store a new TwitterMessage\nfunc (t *Twitter) Store(message *TwitterMessage) error {\n\tconn, err := services.GetRedis()\n\tif err != nil {\n\t\treturn err\n\t}\n\tmessageJSON, _ := json.MarshalIndent(message, \"\", \"\\t\")\n\t_, err = conn.Do(\"LPUSH\", \"twitter\", string(messageJSON[:]))\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/build.sh",
    "content": "#!/bin/bash\ncd $(dirname $(readlink -f $0))\nrm -rf build\nmkdir -p build/public_html\nrsync -a public_html/ build/public_html/\necho \"Building app\"\ndocker run --net=party --rm -it -v `pwd`:/go/src/app -w /go/src/app golang:1.8-alpine go build -o build/gotwitter main.go\nrsync -a build/ ../chapter8/app/\necho \"Building docker container\"\ndocker build --rm --no-cache=true -t titpetric/gotwitter .\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/build_static.sh",
    "content": "#!/bin/bash\ncd $(dirname $(readlink -f $0))\nrm -rf build\nmkdir -p build/public_html\nrsync -a public_html/ build/public_html/\necho \"Building app\"\ndocker run --net=party -e CGO_ENABLED=0 --rm -it -v `pwd`:/go/src/app -w /go/src/app golang:1.8-alpine go build -o build/gotwitter -x --ldflags='-extldflags \"-static\"' main.go\nrsync -a build/ ../chapter8/app/\nexit\necho \"Building docker container\"\ndocker build --rm --no-cache=true -t titpetric/gotwitter .\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\n\t\"app/api\"\n\t\"app/services\"\n\n\t\"github.com/namsral/flag\"\n)\n\nfunc main() {\n\t// set up flags\n\tvar (\n\t\tport            = flag.Int(\"port\", 3000, \"Listen port for server\")\n\t\tnodeAppInstance = flag.Int(\"node-app-instance\", 0, \"PM2 application instance\")\n\t\tredis           = flag.String(\"redis\", \"redis:6379\", \"Redis address (host:port)\")\n\t)\n\tflag.Parse()\n\n\t// set up config\n\tr := services.NewRedis(services.RedisAddress(*redis))\n\tr.Save()\n\n\t// set up a basic healthcheck\n\thealth := api.Health{}\n\thealth.Register()\n\n\t// set up twitter api\n\tapiTwitter := api.Twitter{}\n\tapiTwitter.Register()\n\n\t// serve static assets\n\thttp.Handle(\"/\", http.FileServer(http.Dir(\"./public_html\")))\n\n\t// start up http server\n\tlog.Printf(\"Ready and listening on port %d + %d\\n\", *port, *nodeAppInstance)\n\tif err := http.ListenAndServe(fmt.Sprintf(\":%d\", *port+*nodeAppInstance), nil); err != nil {\n\t\tpanic(err)\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/public_html/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n\t<meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n\n\t<title>Fake Twitter Example</title>\n\n\t<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css\" integrity=\"sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi\" crossorigin=\"anonymous\">\n</head>\n<body>\n\n<div id=\"app\" class=\"container\" style=\"max-width: 600px;\">\n\n\t<table class=\"table\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th>\n\t\t\t\t<div class=\"input-group\">\n\t\t\t\t\t<input type=\"text\" name=\"message_text\" class=\"message-text-input form-control\" placeholder=\"What's happening?\" @keyup.enter=\"postMessage\"/>\n\t\t\t\t\t<div class=\"input-group-btn\">\n\t\t\t\t\t\t<button class=\"btn btn-warning\" v-on:click=\"postMessage\">Post Tweet</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</th>\n\t\t</tr>\n\t</thead>\n\t<tbody class=\"row-hover\">\n\t<tr v-for=\"(message, index) in messages\" :class=\"{ 'row-2': true, 'odd': ((index%2) === 0), 'even': ((index%2) === 1) }\" role=\"row\">\n\t\t<td>\n\t\t\t<div class=\"card\">\n\t\t\t\t<div class=\"card-block\">\n\t\t\t\t{{ message.Message }}\n\t\t\t\t<br/><small>{{ message.Time | moment(\"dddd, MMMM Do YYYY, h:mm:ss a\") }}</small>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</td>\n\t</tr>\n\t</table>\n</div>\n\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js\"></script>\n\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.0.3/vue-resource.js\"></script>\n\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js\"></script>\n<script>\n\t// f**k my life hack?\n\tvar module={}; var require = function(name) { if (name == \"moment\") { return moment; } };\n</script>\n<script src=\"https://cdn.rawgit.com/brockpetrie/vue-moment/c23f2e7a/vue-moment.js\"></script>\n<script>\n\tVue.use(module.exports);\n</script>\n\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js\" integrity=\"sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8\" crossorigin=\"anonymous\"></script>\n<script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js\" integrity=\"sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK\" crossorigin=\"anonymous\"></script>\n\n<script src=\"index.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "12fa-docker-golang/chapter7/public_html/index.js",
    "content": "var api = new Vue({\n\tel: '#app',\n\tdata: function() {\n\t\treturn {\n\t\t\tmessages: [],\n\t\t\terror: false\n\t\t}\n\t},\n\tmethods: {\n\t\trefreshMessages: function() {\n\t\t\tvar self = this;\n\t\t\tjQuery.get(\"/api/twitter/list\", function(data) {\n\t\t\t\tself.messages = data;\n\t\t\t})\n\t\t\t.fail(function() {\n\t\t\t\tself.error = \"API request failed: /api/twitter/list\";\n\t\t\t});\n\t\t},\n\t\tpostMessage: function() {\n\t\t\tvar self = this;\n\t\t\tvar message = $(\".message-text-input\");\n\t\t\tjQuery.post(\"/api/twitter/add\", {\n\t\t\t\tmessage: message.val()\n\t\t\t})\n\t\t\t.fail(function() {\n\t\t\t\tself.error = \"API request failed: /api/twitter/add\";\n\t\t\t})\n\t\t\t.done(function() {\n\t\t\t\tself.refreshMessages();\n\t\t\t\tmessage.val('');\n\t\t\t});\n\t\t}\n\t},\n\tmounted: function () {\n\t\tthis.refreshMessages();\n\t}\n});\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/run",
    "content": "#!/bin/bash\ndocker run --net=party --rm -it -p 8080:3000 -v `pwd`:/go/src/app -w /go/src/app golang:1.8-alpine go run main.go\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/run_docker",
    "content": "#!/bin/bash\nNAME=\"gotwitter\"\nDOCKER_IMAGE=\"titpetric/gotwitter\"\ndocker rm -f $NAME\ndocker run --net=party -e PORT=2000 --name=$NAME -d -p 8080:2000 $DOCKER_IMAGE\nPREVSTATE=\"\"\nwhile true; do\n\tSTATE=$(docker inspect $NAME | jq -r '.[].State.Health.Status')\n\tif [[ $STATE == $PREVSTATE ]]; then\n\t\techo -n \".\"\n\telse\n\t\tif [ ! -z $PREVSTATE ]; then\n\t\t\techo\n\t\tfi\n\t\tPREVSTATE=$STATE\n\t\techo -n \"State: $STATE \"\n\tfi\n\tif [[ $STATE == \"healthy\" ]]; then\n\t\techo\n\t\texit 0\n\tfi\n\tsleep 1\ndone"
  },
  {
    "path": "12fa-docker-golang/chapter7/run_errcheck",
    "content": "#!/bin/bash\nDOCKER_IMAGE=\"titpetric/golang:errcheck\"\ndocker run -e GOPATH=/go --net=party --rm=true -it -v `pwd`:/go/src/app $DOCKER_IMAGE errcheck ./... | grep -v vendor/\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/run_golint",
    "content": "#!/bin/bash\nDOCKER_IMAGE=\"titpetric/golang:golint\"\ndocker run -e GOPATH=/go --net=party --rm=true -it -v `pwd`:/go/src/app $DOCKER_IMAGE golint ./... | grep -v vendor/\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/services/redis.go",
    "content": "package services\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\n// Redis connection struct\ntype Redis struct {\n\tconn                                      redis.Conn\n\taddress                                   string\n\tconnectTimeout, readTimeout, writeTimeout time.Duration\n}\n\ntype RedisOption func(*Redis)\n\n// RedisAddress - specify hostname of redis server (including port)\nfunc RedisAddress(address string) RedisOption {\n\treturn func(do *Redis) {\n\t\tdo.address = address\n\t}\n}\n\n// RedisConnectTimeout - set connection timeout for the Redis client\nfunc RedisConnectTimeout(timeout time.Duration) RedisOption {\n\treturn func(do *Redis) {\n\t\tdo.connectTimeout = timeout\n\t}\n}\n\n// RedisReadTimeout - set a read timeout for a Redis operation\nfunc RedisReadTimeout(timeout time.Duration) RedisOption {\n\treturn func(do *Redis) {\n\t\tdo.readTimeout = timeout\n\t}\n}\n\n// RedisWriteTimeout - set a write timeout for a Redis operation\nfunc RedisWriteTimeout(timeout time.Duration) RedisOption {\n\treturn func(do *Redis) {\n\t\tdo.writeTimeout = timeout\n\t}\n}\n\n// NewRedis creates a new redis connection\nfunc NewRedis(options ...RedisOption) *Redis {\n\tredis := &Redis{\n\t\taddress:        \"redis:6379\",\n\t\tconnectTimeout: time.Second,\n\t\treadTimeout:    time.Second,\n\t\twriteTimeout:   time.Second,\n\t}\n\tfor _, option := range options {\n\t\toption(redis)\n\t}\n\treturn redis\n}\n\nvar (\n\tredisConnections = make(map[string]*Redis, 0)\n)\n\n// Save redis connection for reuse\nfunc (t *Redis) Save(names ...string) {\n\tconnection := \"default\"\n\tfor _, name := range names {\n\t\tconnection = name\n\t}\n\tredisConnections[connection] = t\n}\n\n// GetRedis retrieves a saves redis connection for reuse\nfunc GetRedis(names ...string) (redis.Conn, error) {\n\tvar err error\n\tconnection := \"default\"\n\tfor _, name := range names {\n\t\tconnection = name\n\t}\n\tr, ok := redisConnections[connection]\n\tif !ok {\n\t\tr = NewRedis()\n\t\tr.Save(connection)\n\t}\n\tif r.conn == nil {\n\t\tconnectTimeout := redis.DialConnectTimeout(r.connectTimeout)\n\t\treadTimeout := redis.DialReadTimeout(r.readTimeout)\n\t\twriteTimeout := redis.DialWriteTimeout(r.writeTimeout)\n\t\tr.conn, err = redis.Dial(\"tcp\", r.address, connectTimeout, readTimeout, writeTimeout)\n\t}\n\treturn r.conn, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/services/respond.go",
    "content": "package services\n\nimport \"fmt\"\nimport \"net/http\"\nimport \"encoding/json\"\n\nfunc respondWithError(w http.ResponseWriter, err interface{}) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tresponse := struct {\n\t\tError string `json:\"error\"`\n\t}{}\n\tresponse.Error = fmt.Sprintf(\"%s\", err)\n\tresponseJSON, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(responseJSON[:]))\n}\n\nfunc respondWith(w http.ResponseWriter, response interface{}) {\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tresponseJSON, err := json.MarshalIndent(response, \"\", \"\\t\")\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\tfmt.Fprintf(w, string(responseJSON[:]))\n}\n\n// Respond with JSON payload including formatted error response\nfunc Respond(w http.ResponseWriter, response interface{}, err interface{}) {\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\trespondWith(w, response)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/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"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/internal/commandinfo.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage internal // import \"github.com/garyburd/redigo/internal\"\n\nimport (\n\t\"strings\"\n)\n\nconst (\n\tWatchState = 1 << iota\n\tMultiState\n\tSubscribeState\n\tMonitorState\n)\n\ntype CommandInfo struct {\n\tSet, Clear int\n}\n\nvar commandInfos = map[string]CommandInfo{\n\t\"WATCH\":      {Set: WatchState},\n\t\"UNWATCH\":    {Clear: WatchState},\n\t\"MULTI\":      {Set: MultiState},\n\t\"EXEC\":       {Clear: WatchState | MultiState},\n\t\"DISCARD\":    {Clear: WatchState | MultiState},\n\t\"PSUBSCRIBE\": {Set: SubscribeState},\n\t\"SUBSCRIBE\":  {Set: SubscribeState},\n\t\"MONITOR\":    {Set: MonitorState},\n}\n\nfunc init() {\n\tfor n, ci := range commandInfos {\n\t\tcommandInfos[strings.ToLower(n)] = ci\n\t}\n}\n\nfunc LookupCommandInfo(commandName string) CommandInfo {\n\tif ci, ok := commandInfos[commandName]; ok {\n\t\treturn ci\n\t}\n\treturn commandInfos[strings.ToUpper(commandName)]\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/internal/redistest/testdb.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redistest contains utilities for writing Redigo tests.\npackage redistest\n\nimport (\n\t\"errors\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/redis\"\n)\n\ntype testConn struct {\n\tredis.Conn\n}\n\nfunc (t testConn) Close() error {\n\t_, err := t.Conn.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\treturn nil\n\t}\n\t_, err = t.Conn.Do(\"FLUSHDB\")\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.Conn.Close()\n}\n\n// Dial dials the local Redis server and selects database 9. To prevent\n// stomping on real data, DialTestDB fails if database 9 contains data. The\n// returned connection flushes database 9 on close.\nfunc Dial() (redis.Conn, error) {\n\tc, err := redis.DialTimeout(\"tcp\", \":6379\", 0, 1*time.Second, 1*time.Second)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t_, err = c.Do(\"SELECT\", \"9\")\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tn, err := redis.Int(c.Do(\"DBSIZE\"))\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\tif n != 0 {\n\t\tc.Close()\n\t\treturn nil, errors.New(\"database #9 is not empty, test can not continue\")\n\t}\n\n\treturn testConn{c}, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/conn.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// conn is the low-level implementation of Conn\ntype conn struct {\n\n\t// Shared\n\tmu      sync.Mutex\n\tpending int\n\terr     error\n\tconn    net.Conn\n\n\t// Read\n\treadTimeout time.Duration\n\tbr          *bufio.Reader\n\n\t// Write\n\twriteTimeout time.Duration\n\tbw           *bufio.Writer\n\n\t// Scratch space for formatting argument length.\n\t// '*' or '$', length, \"\\r\\n\"\n\tlenScratch [32]byte\n\n\t// Scratch space for formatting integers and floats.\n\tnumScratch [40]byte\n}\n\n// DialTimeout acts like Dial but takes timeouts for establishing the\n// connection to the server, writing a command and reading a reply.\n//\n// Deprecated: Use Dial with options instead.\nfunc DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) {\n\treturn Dial(network, address,\n\t\tDialConnectTimeout(connectTimeout),\n\t\tDialReadTimeout(readTimeout),\n\t\tDialWriteTimeout(writeTimeout))\n}\n\n// DialOption specifies an option for dialing a Redis server.\ntype DialOption struct {\n\tf func(*dialOptions)\n}\n\ntype dialOptions struct {\n\treadTimeout  time.Duration\n\twriteTimeout time.Duration\n\tdial         func(network, addr string) (net.Conn, error)\n\tdb           int\n\tpassword     string\n\tdialTLS      bool\n\tskipVerify   bool\n\ttlsConfig    *tls.Config\n}\n\n// DialReadTimeout specifies the timeout for reading a single command reply.\nfunc DialReadTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.readTimeout = d\n\t}}\n}\n\n// DialWriteTimeout specifies the timeout for writing a single command.\nfunc DialWriteTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.writeTimeout = d\n\t}}\n}\n\n// DialConnectTimeout specifies the timeout for connecting to the Redis server.\nfunc DialConnectTimeout(d time.Duration) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdialer := net.Dialer{Timeout: d}\n\t\tdo.dial = dialer.Dial\n\t}}\n}\n\n// DialNetDial specifies a custom dial function for creating TCP\n// connections. If this option is left out, then net.Dial is\n// used. DialNetDial overrides DialConnectTimeout.\nfunc DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.dial = dial\n\t}}\n}\n\n// DialDatabase specifies the database to select when dialing a connection.\nfunc DialDatabase(db int) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.db = db\n\t}}\n}\n\n// DialPassword specifies the password to use when connecting to\n// the Redis server.\nfunc DialPassword(password string) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.password = password\n\t}}\n}\n\n// DialTLSConfig specifies the config to use when a TLS connection is dialed.\n//  Has no effect when not dialing a TLS connection.\nfunc DialTLSConfig(c *tls.Config) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.tlsConfig = c\n\t}}\n}\n\n// DialTLSSkipVerify to disable server name verification when connecting\n// over TLS. Has no effect when not dialing a TLS connection.\nfunc DialTLSSkipVerify(skip bool) DialOption {\n\treturn DialOption{func(do *dialOptions) {\n\t\tdo.skipVerify = skip\n\t}}\n}\n\n// Dial connects to the Redis server at the given network and\n// address using the specified options.\nfunc Dial(network, address string, options ...DialOption) (Conn, error) {\n\tdo := dialOptions{\n\t\tdial: net.Dial,\n\t}\n\tfor _, option := range options {\n\t\toption.f(&do)\n\t}\n\n\tnetConn, err := do.dial(network, address)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif do.dialTLS {\n\t\ttlsConfig := cloneTLSClientConfig(do.tlsConfig, do.skipVerify)\n\t\tif tlsConfig.ServerName == \"\" {\n\t\t\thost, _, err := net.SplitHostPort(address)\n\t\t\tif err != nil {\n\t\t\t\tnetConn.Close()\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttlsConfig.ServerName = host\n\t\t}\n\n\t\ttlsConn := tls.Client(netConn, tlsConfig)\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tnetConn = tlsConn\n\t}\n\n\tc := &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  do.readTimeout,\n\t\twriteTimeout: do.writeTimeout,\n\t}\n\n\tif do.password != \"\" {\n\t\tif _, err := c.Do(\"AUTH\", do.password); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif do.db != 0 {\n\t\tif _, err := c.Do(\"SELECT\", do.db); err != nil {\n\t\t\tnetConn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\nfunc dialTLS(do *dialOptions) {\n\tdo.dialTLS = true\n}\n\nvar pathDBRegexp = regexp.MustCompile(`/(\\d*)\\z`)\n\n// DialURL connects to a Redis server at the given URL using the Redis\n// URI scheme. URLs should follow the draft IANA specification for the\n// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis).\nfunc DialURL(rawurl string, options ...DialOption) (Conn, error) {\n\tu, err := url.Parse(rawurl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif u.Scheme != \"redis\" && u.Scheme != \"rediss\" {\n\t\treturn nil, fmt.Errorf(\"invalid redis URL scheme: %s\", u.Scheme)\n\t}\n\n\t// As per the IANA draft spec, the host defaults to localhost and\n\t// the port defaults to 6379.\n\thost, port, err := net.SplitHostPort(u.Host)\n\tif err != nil {\n\t\t// assume port is missing\n\t\thost = u.Host\n\t\tport = \"6379\"\n\t}\n\tif host == \"\" {\n\t\thost = \"localhost\"\n\t}\n\taddress := net.JoinHostPort(host, port)\n\n\tif u.User != nil {\n\t\tpassword, isSet := u.User.Password()\n\t\tif isSet {\n\t\t\toptions = append(options, DialPassword(password))\n\t\t}\n\t}\n\n\tmatch := pathDBRegexp.FindStringSubmatch(u.Path)\n\tif len(match) == 2 {\n\t\tdb := 0\n\t\tif len(match[1]) > 0 {\n\t\t\tdb, err = strconv.Atoi(match[1])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t\t\t}\n\t\t}\n\t\tif db != 0 {\n\t\t\toptions = append(options, DialDatabase(db))\n\t\t}\n\t} else if u.Path != \"\" {\n\t\treturn nil, fmt.Errorf(\"invalid database: %s\", u.Path[1:])\n\t}\n\n\tif u.Scheme == \"rediss\" {\n\t\toptions = append([]DialOption{{dialTLS}}, options...)\n\t}\n\n\treturn Dial(\"tcp\", address, options...)\n}\n\n// NewConn returns a new Redigo connection for the given net connection.\nfunc NewConn(netConn net.Conn, readTimeout, writeTimeout time.Duration) Conn {\n\treturn &conn{\n\t\tconn:         netConn,\n\t\tbw:           bufio.NewWriter(netConn),\n\t\tbr:           bufio.NewReader(netConn),\n\t\treadTimeout:  readTimeout,\n\t\twriteTimeout: writeTimeout,\n\t}\n}\n\nfunc (c *conn) Close() error {\n\tc.mu.Lock()\n\terr := c.err\n\tif c.err == nil {\n\t\tc.err = errors.New(\"redigo: closed\")\n\t\terr = c.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) fatal(err error) error {\n\tc.mu.Lock()\n\tif c.err == nil {\n\t\tc.err = err\n\t\t// Close connection to force errors on subsequent calls and to unblock\n\t\t// other reader or writer.\n\t\tc.conn.Close()\n\t}\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) Err() error {\n\tc.mu.Lock()\n\terr := c.err\n\tc.mu.Unlock()\n\treturn err\n}\n\nfunc (c *conn) writeLen(prefix byte, n int) error {\n\tc.lenScratch[len(c.lenScratch)-1] = '\\n'\n\tc.lenScratch[len(c.lenScratch)-2] = '\\r'\n\ti := len(c.lenScratch) - 3\n\tfor {\n\t\tc.lenScratch[i] = byte('0' + n%10)\n\t\ti -= 1\n\t\tn = n / 10\n\t\tif n == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tc.lenScratch[i] = prefix\n\t_, err := c.bw.Write(c.lenScratch[i:])\n\treturn err\n}\n\nfunc (c *conn) writeString(s string) error {\n\tc.writeLen('$', len(s))\n\tc.bw.WriteString(s)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeBytes(p []byte) error {\n\tc.writeLen('$', len(p))\n\tc.bw.Write(p)\n\t_, err := c.bw.WriteString(\"\\r\\n\")\n\treturn err\n}\n\nfunc (c *conn) writeInt64(n int64) error {\n\treturn c.writeBytes(strconv.AppendInt(c.numScratch[:0], n, 10))\n}\n\nfunc (c *conn) writeFloat64(n float64) error {\n\treturn c.writeBytes(strconv.AppendFloat(c.numScratch[:0], n, 'g', -1, 64))\n}\n\nfunc (c *conn) writeCommand(cmd string, args []interface{}) (err error) {\n\tc.writeLen('*', 1+len(args))\n\terr = c.writeString(cmd)\n\tfor _, arg := range args {\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch arg := arg.(type) {\n\t\tcase string:\n\t\t\terr = c.writeString(arg)\n\t\tcase []byte:\n\t\t\terr = c.writeBytes(arg)\n\t\tcase int:\n\t\t\terr = c.writeInt64(int64(arg))\n\t\tcase int64:\n\t\t\terr = c.writeInt64(arg)\n\t\tcase float64:\n\t\t\terr = c.writeFloat64(arg)\n\t\tcase bool:\n\t\t\tif arg {\n\t\t\t\terr = c.writeString(\"1\")\n\t\t\t} else {\n\t\t\t\terr = c.writeString(\"0\")\n\t\t\t}\n\t\tcase nil:\n\t\t\terr = c.writeString(\"\")\n\t\tdefault:\n\t\t\tvar buf bytes.Buffer\n\t\t\tfmt.Fprint(&buf, arg)\n\t\t\terr = c.writeBytes(buf.Bytes())\n\t\t}\n\t}\n\treturn err\n}\n\ntype protocolError string\n\nfunc (pe protocolError) Error() string {\n\treturn fmt.Sprintf(\"redigo: %s (possible server error or unsupported concurrent read by application)\", string(pe))\n}\n\nfunc (c *conn) readLine() ([]byte, error) {\n\tp, err := c.br.ReadSlice('\\n')\n\tif err == bufio.ErrBufferFull {\n\t\treturn nil, protocolError(\"long response line\")\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ti := len(p) - 2\n\tif i < 0 || p[i] != '\\r' {\n\t\treturn nil, protocolError(\"bad response line terminator\")\n\t}\n\treturn p[:i], nil\n}\n\n// parseLen parses bulk string and array lengths.\nfunc parseLen(p []byte) (int, error) {\n\tif len(p) == 0 {\n\t\treturn -1, protocolError(\"malformed length\")\n\t}\n\n\tif p[0] == '-' && len(p) == 2 && p[1] == '1' {\n\t\t// handle $-1 and $-1 null replies.\n\t\treturn -1, nil\n\t}\n\n\tvar n int\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn -1, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int(b - '0')\n\t}\n\n\treturn n, nil\n}\n\n// parseInt parses an integer reply.\nfunc parseInt(p []byte) (interface{}, error) {\n\tif len(p) == 0 {\n\t\treturn 0, protocolError(\"malformed integer\")\n\t}\n\n\tvar negate bool\n\tif p[0] == '-' {\n\t\tnegate = true\n\t\tp = p[1:]\n\t\tif len(p) == 0 {\n\t\t\treturn 0, protocolError(\"malformed integer\")\n\t\t}\n\t}\n\n\tvar n int64\n\tfor _, b := range p {\n\t\tn *= 10\n\t\tif b < '0' || b > '9' {\n\t\t\treturn 0, protocolError(\"illegal bytes in length\")\n\t\t}\n\t\tn += int64(b - '0')\n\t}\n\n\tif negate {\n\t\tn = -n\n\t}\n\treturn n, nil\n}\n\nvar (\n\tokReply   interface{} = \"OK\"\n\tpongReply interface{} = \"PONG\"\n)\n\nfunc (c *conn) readReply() (interface{}, error) {\n\tline, err := c.readLine()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(line) == 0 {\n\t\treturn nil, protocolError(\"short response line\")\n\t}\n\tswitch line[0] {\n\tcase '+':\n\t\tswitch {\n\t\tcase len(line) == 3 && line[1] == 'O' && line[2] == 'K':\n\t\t\t// Avoid allocation for frequent \"+OK\" response.\n\t\t\treturn okReply, nil\n\t\tcase len(line) == 5 && line[1] == 'P' && line[2] == 'O' && line[3] == 'N' && line[4] == 'G':\n\t\t\t// Avoid allocation in PING command benchmarks :)\n\t\t\treturn pongReply, nil\n\t\tdefault:\n\t\t\treturn string(line[1:]), nil\n\t\t}\n\tcase '-':\n\t\treturn Error(string(line[1:])), nil\n\tcase ':':\n\t\treturn parseInt(line[1:])\n\tcase '$':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp := make([]byte, n)\n\t\t_, err = io.ReadFull(c.br, p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif line, err := c.readLine(); err != nil {\n\t\t\treturn nil, err\n\t\t} else if len(line) != 0 {\n\t\t\treturn nil, protocolError(\"bad bulk string format\")\n\t\t}\n\t\treturn p, nil\n\tcase '*':\n\t\tn, err := parseLen(line[1:])\n\t\tif n < 0 || err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr := make([]interface{}, n)\n\t\tfor i := range r {\n\t\t\tr[i], err = c.readReply()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn r, nil\n\t}\n\treturn nil, protocolError(\"unexpected response line\")\n}\n\nfunc (c *conn) Send(cmd string, args ...interface{}) error {\n\tc.mu.Lock()\n\tc.pending += 1\n\tc.mu.Unlock()\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.writeCommand(cmd, args); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Flush() error {\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn c.fatal(err)\n\t}\n\treturn nil\n}\n\nfunc (c *conn) Receive() (reply interface{}, err error) {\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\tif reply, err = c.readReply(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\t// When using pub/sub, the number of receives can be greater than the\n\t// number of sends. To enable normal use of the connection after\n\t// unsubscribing from all channels, we do not decrement pending to a\n\t// negative value.\n\t//\n\t// The pending field is decremented after the reply is read to handle the\n\t// case where Receive is called before Send.\n\tc.mu.Lock()\n\tif c.pending > 0 {\n\t\tc.pending -= 1\n\t}\n\tc.mu.Unlock()\n\tif err, ok := reply.(Error); ok {\n\t\treturn nil, err\n\t}\n\treturn\n}\n\nfunc (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) {\n\tc.mu.Lock()\n\tpending := c.pending\n\tc.pending = 0\n\tc.mu.Unlock()\n\n\tif cmd == \"\" && pending == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif c.writeTimeout != 0 {\n\t\tc.conn.SetWriteDeadline(time.Now().Add(c.writeTimeout))\n\t}\n\n\tif cmd != \"\" {\n\t\tif err := c.writeCommand(cmd, args); err != nil {\n\t\t\treturn nil, c.fatal(err)\n\t\t}\n\t}\n\n\tif err := c.bw.Flush(); err != nil {\n\t\treturn nil, c.fatal(err)\n\t}\n\n\tif c.readTimeout != 0 {\n\t\tc.conn.SetReadDeadline(time.Now().Add(c.readTimeout))\n\t}\n\n\tif cmd == \"\" {\n\t\treply := make([]interface{}, pending)\n\t\tfor i := range reply {\n\t\t\tr, e := c.readReply()\n\t\t\tif e != nil {\n\t\t\t\treturn nil, c.fatal(e)\n\t\t\t}\n\t\t\treply[i] = r\n\t\t}\n\t\treturn reply, nil\n\t}\n\n\tvar err error\n\tvar reply interface{}\n\tfor i := 0; i <= pending; i++ {\n\t\tvar e error\n\t\tif reply, e = c.readReply(); e != nil {\n\t\t\treturn nil, c.fatal(e)\n\t\t}\n\t\tif e, ok := reply.(Error); ok && err == nil {\n\t\t\terr = e\n\t\t}\n\t}\n\treturn reply, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/doc.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redis is a client for the Redis database.\n//\n// The Redigo FAQ (https://github.com/garyburd/redigo/wiki/FAQ) contains more\n// documentation about this package.\n//\n// Connections\n//\n// The Conn interface is the primary interface for working with Redis.\n// Applications create connections by calling the Dial, DialWithTimeout or\n// NewConn functions. In the future, functions will be added for creating\n// sharded and other types of connections.\n//\n// The application must call the connection Close method when the application\n// is done with the connection.\n//\n// Executing Commands\n//\n// The Conn interface has a generic method for executing Redis commands:\n//\n//  Do(commandName string, args ...interface{}) (reply interface{}, err error)\n//\n// The Redis command reference (http://redis.io/commands) lists the available\n// commands. An example of using the Redis APPEND command is:\n//\n//  n, err := conn.Do(\"APPEND\", \"key\", \"value\")\n//\n// The Do method converts command arguments to binary strings for transmission\n// to the server as follows:\n//\n//  Go Type                 Conversion\n//  []byte                  Sent as is\n//  string                  Sent as is\n//  int, int64              strconv.FormatInt(v)\n//  float64                 strconv.FormatFloat(v, 'g', -1, 64)\n//  bool                    true -> \"1\", false -> \"0\"\n//  nil                     \"\"\n//  all other types         fmt.Print(v)\n//\n// Redis command reply types are represented using the following Go types:\n//\n//  Redis type              Go type\n//  error                   redis.Error\n//  integer                 int64\n//  simple string           string\n//  bulk string             []byte or nil if value not present.\n//  array                   []interface{} or nil if value not present.\n//\n// Use type assertions or the reply helper functions to convert from\n// interface{} to the specific Go type for the command result.\n//\n// Pipelining\n//\n// Connections support pipelining using the Send, Flush and Receive methods.\n//\n//  Send(commandName string, args ...interface{}) error\n//  Flush() error\n//  Receive() (reply interface{}, err error)\n//\n// Send writes the command to the connection's output buffer. Flush flushes the\n// connection's output buffer to the server. Receive reads a single reply from\n// the server. The following example shows a simple pipeline.\n//\n//  c.Send(\"SET\", \"foo\", \"bar\")\n//  c.Send(\"GET\", \"foo\")\n//  c.Flush()\n//  c.Receive() // reply from SET\n//  v, err = c.Receive() // reply from GET\n//\n// The Do method combines the functionality of the Send, Flush and Receive\n// methods. The Do method starts by writing the command and flushing the output\n// buffer. Next, the Do method receives all pending replies including the reply\n// for the command just sent by Do. If any of the received replies is an error,\n// then Do returns the error. If there are no errors, then Do returns the last\n// reply. If the command argument to the Do method is \"\", then the Do method\n// will flush the output buffer and receive pending replies without sending a\n// command.\n//\n// Use the Send and Do methods to implement pipelined transactions.\n//\n//  c.Send(\"MULTI\")\n//  c.Send(\"INCR\", \"foo\")\n//  c.Send(\"INCR\", \"bar\")\n//  r, err := c.Do(\"EXEC\")\n//  fmt.Println(r) // prints [1, 1]\n//\n// Concurrency\n//\n// Connections support one concurrent caller to the Receive method and one\n// concurrent caller to the Send and Flush methods. No other concurrency is\n// supported including concurrent calls to the Do method.\n//\n// For full concurrent access to Redis, use the thread-safe Pool to get, use\n// and release a connection from within a goroutine. Connections returned from\n// a Pool have the concurrency restrictions described in the previous\n// paragraph.\n//\n// Publish and Subscribe\n//\n// Use the Send, Flush and Receive methods to implement Pub/Sub subscribers.\n//\n//  c.Send(\"SUBSCRIBE\", \"example\")\n//  c.Flush()\n//  for {\n//      reply, err := c.Receive()\n//      if err != nil {\n//          return err\n//      }\n//      // process pushed message\n//  }\n//\n// The PubSubConn type wraps a Conn with convenience methods for implementing\n// subscribers. The Subscribe, PSubscribe, Unsubscribe and PUnsubscribe methods\n// send and flush a subscription management command. The receive method\n// converts a pushed message to convenient types for use in a type switch.\n//\n//  psc := redis.PubSubConn{Conn: c}\n//  psc.Subscribe(\"example\")\n//  for {\n//      switch v := psc.Receive().(type) {\n//      case redis.Message:\n//          fmt.Printf(\"%s: message: %s\\n\", v.Channel, v.Data)\n//      case redis.Subscription:\n//          fmt.Printf(\"%s: %s %d\\n\", v.Channel, v.Kind, v.Count)\n//      case error:\n//          return v\n//      }\n//  }\n//\n// Reply Helpers\n//\n// The Bool, Int, Bytes, String, Strings and Values functions convert a reply\n// to a value of a specific type. To allow convenient wrapping of calls to the\n// connection Do and Receive methods, the functions take a second argument of\n// type error.  If the error is non-nil, then the helper function returns the\n// error. If the error is nil, the function converts the reply to the specified\n// type:\n//\n//  exists, err := redis.Bool(c.Do(\"EXISTS\", \"foo\"))\n//  if err != nil {\n//      // handle error return from c.Do or type conversion error.\n//  }\n//\n// The Scan function converts elements of a array reply to Go types:\n//\n//  var value1 int\n//  var value2 string\n//  reply, err := redis.Values(c.Do(\"MGET\", \"key1\", \"key2\"))\n//  if err != nil {\n//      // handle error\n//  }\n//   if _, err := redis.Scan(reply, &value1, &value2); err != nil {\n//      // handle error\n//  }\n//\n// Errors\n//\n// Connection methods return error replies from the server as type redis.Error.\n//\n// Call the connection Err() method to determine if the connection encountered\n// non-recoverable error such as a network error or protocol parsing error. If\n// Err() returns a non-nil value, then the connection is not usable and should\n// be closed.\npackage redis // import \"github.com/garyburd/redigo/redis\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/go17.go",
    "content": "// +build go1.7\n\npackage redis\n\nimport \"crypto/tls\"\n\n// similar cloneTLSClientConfig in the stdlib, but also honor skipVerify for the nil case\nfunc cloneTLSClientConfig(cfg *tls.Config, skipVerify bool) *tls.Config {\n\tif cfg == nil {\n\t\treturn &tls.Config{InsecureSkipVerify: skipVerify}\n\t}\n\treturn &tls.Config{\n\t\tRand:                        cfg.Rand,\n\t\tTime:                        cfg.Time,\n\t\tCertificates:                cfg.Certificates,\n\t\tNameToCertificate:           cfg.NameToCertificate,\n\t\tGetCertificate:              cfg.GetCertificate,\n\t\tRootCAs:                     cfg.RootCAs,\n\t\tNextProtos:                  cfg.NextProtos,\n\t\tServerName:                  cfg.ServerName,\n\t\tClientAuth:                  cfg.ClientAuth,\n\t\tClientCAs:                   cfg.ClientCAs,\n\t\tInsecureSkipVerify:          cfg.InsecureSkipVerify,\n\t\tCipherSuites:                cfg.CipherSuites,\n\t\tPreferServerCipherSuites:    cfg.PreferServerCipherSuites,\n\t\tClientSessionCache:          cfg.ClientSessionCache,\n\t\tMinVersion:                  cfg.MinVersion,\n\t\tMaxVersion:                  cfg.MaxVersion,\n\t\tCurvePreferences:            cfg.CurvePreferences,\n\t\tDynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled,\n\t\tRenegotiation:               cfg.Renegotiation,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/log.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n)\n\n// NewLoggingConn returns a logging wrapper around a connection.\nfunc NewLoggingConn(conn Conn, logger *log.Logger, prefix string) Conn {\n\tif prefix != \"\" {\n\t\tprefix = prefix + \".\"\n\t}\n\treturn &loggingConn{conn, logger, prefix}\n}\n\ntype loggingConn struct {\n\tConn\n\tlogger *log.Logger\n\tprefix string\n}\n\nfunc (c *loggingConn) Close() error {\n\terr := c.Conn.Close()\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%sClose() -> (%v)\", c.prefix, err)\n\tc.logger.Output(2, buf.String())\n\treturn err\n}\n\nfunc (c *loggingConn) printValue(buf *bytes.Buffer, v interface{}) {\n\tconst chop = 32\n\tswitch v := v.(type) {\n\tcase []byte:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase string:\n\t\tif len(v) > chop {\n\t\t\tfmt.Fprintf(buf, \"%q...\", v[:chop])\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%q\", v)\n\t\t}\n\tcase []interface{}:\n\t\tif len(v) == 0 {\n\t\t\tbuf.WriteString(\"[]\")\n\t\t} else {\n\t\t\tsep := \"[\"\n\t\t\tfin := \"]\"\n\t\t\tif len(v) > chop {\n\t\t\t\tv = v[:chop]\n\t\t\t\tfin = \"...]\"\n\t\t\t}\n\t\t\tfor _, vv := range v {\n\t\t\t\tbuf.WriteString(sep)\n\t\t\t\tc.printValue(buf, vv)\n\t\t\t\tsep = \", \"\n\t\t\t}\n\t\t\tbuf.WriteString(fin)\n\t\t}\n\tdefault:\n\t\tfmt.Fprint(buf, v)\n\t}\n}\n\nfunc (c *loggingConn) print(method, commandName string, args []interface{}, reply interface{}, err error) {\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"%s%s(\", c.prefix, method)\n\tif method != \"Receive\" {\n\t\tbuf.WriteString(commandName)\n\t\tfor _, arg := range args {\n\t\t\tbuf.WriteString(\", \")\n\t\t\tc.printValue(&buf, arg)\n\t\t}\n\t}\n\tbuf.WriteString(\") -> (\")\n\tif method != \"Send\" {\n\t\tc.printValue(&buf, reply)\n\t\tbuf.WriteString(\", \")\n\t}\n\tfmt.Fprintf(&buf, \"%v)\", err)\n\tc.logger.Output(3, buf.String())\n}\n\nfunc (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, error) {\n\treply, err := c.Conn.Do(commandName, args...)\n\tc.print(\"Do\", commandName, args, reply, err)\n\treturn reply, err\n}\n\nfunc (c *loggingConn) Send(commandName string, args ...interface{}) error {\n\terr := c.Conn.Send(commandName, args...)\n\tc.print(\"Send\", commandName, args, nil, err)\n\treturn err\n}\n\nfunc (c *loggingConn) Receive() (interface{}, error) {\n\treply, err := c.Conn.Receive()\n\tc.print(\"Receive\", \"\", nil, reply, err)\n\treturn reply, err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/pool.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"bytes\"\n\t\"container/list\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/garyburd/redigo/internal\"\n)\n\nvar nowFunc = time.Now // for testing\n\n// ErrPoolExhausted is returned from a pool connection method (Do, Send,\n// Receive, Flush, Err) when the maximum number of database connections in the\n// pool has been reached.\nvar ErrPoolExhausted = errors.New(\"redigo: connection pool exhausted\")\n\nvar (\n\terrPoolClosed = errors.New(\"redigo: connection pool closed\")\n\terrConnClosed = errors.New(\"redigo: connection closed\")\n)\n\n// Pool maintains a pool of connections. The application calls the Get method\n// to get a connection from the pool and the connection's Close method to\n// return the connection's resources to the pool.\n//\n// The following example shows how to use a pool in a web application. The\n// application creates a pool at application startup and makes it available to\n// request handlers using a package level variable. The pool configuration used\n// here is an example, not a recommendation.\n//\n//  func newPool(addr string) *redis.Pool {\n//    return &redis.Pool{\n//      MaxIdle: 3,\n//      IdleTimeout: 240 * time.Second,\n//      Dial: func () (redis.Conn, error) { return redis.Dial(\"tcp\", addr) },\n//    }\n//  }\n//\n//  var (\n//    pool *redis.Pool\n//    redisServer = flag.String(\"redisServer\", \":6379\", \"\")\n//  )\n//\n//  func main() {\n//    flag.Parse()\n//    pool = newPool(*redisServer)\n//    ...\n//  }\n//\n// A request handler gets a connection from the pool and closes the connection\n// when the handler is done:\n//\n//  func serveHome(w http.ResponseWriter, r *http.Request) {\n//      conn := pool.Get()\n//      defer conn.Close()\n//      ...\n//  }\n//\n// Use the Dial function to authenticate connections with the AUTH command or\n// select a database with the SELECT command:\n//\n//  pool := &redis.Pool{\n//    // Other pool configuration not shown in this example.\n//    Dial: func () (redis.Conn, error) {\n//      c, err := redis.Dial(\"tcp\", server)\n//      if err != nil {\n//        return nil, err\n//      }\n//      if _, err := c.Do(\"AUTH\", password); err != nil {\n//        c.Close()\n//        return nil, err\n//      }\n//      if _, err := c.Do(\"SELECT\", db); err != nil {\n//        c.Close()\n//        return nil, err\n//      }\n//      return c, nil\n//    }\n//  }\n//\n// Use the TestOnBorrow function to check the health of an idle connection\n// before the connection is returned to the application. This example PINGs\n// connections that have been idle more than a minute:\n//\n//  pool := &redis.Pool{\n//    // Other pool configuration not shown in this example.\n//    TestOnBorrow: func(c redis.Conn, t time.Time) error {\n//      if time.Since(t) < time.Minute {\n//        return nil\n//      }\n//      _, err := c.Do(\"PING\")\n//      return err\n//    },\n//  }\n//\ntype Pool struct {\n\n\t// Dial is an application supplied function for creating and configuring a\n\t// connection.\n\t//\n\t// The connection returned from Dial must not be in a special state\n\t// (subscribed to pubsub channel, transaction started, ...).\n\tDial func() (Conn, error)\n\n\t// TestOnBorrow is an optional application supplied function for checking\n\t// the health of an idle connection before the connection is used again by\n\t// the application. Argument t is the time that the connection was returned\n\t// to the pool. If the function returns an error, then the connection is\n\t// closed.\n\tTestOnBorrow func(c Conn, t time.Time) error\n\n\t// Maximum number of idle connections in the pool.\n\tMaxIdle int\n\n\t// Maximum number of connections allocated by the pool at a given time.\n\t// When zero, there is no limit on the number of connections in the pool.\n\tMaxActive int\n\n\t// Close connections after remaining idle for this duration. If the value\n\t// is zero, then idle connections are not closed. Applications should set\n\t// the timeout to a value less than the server's timeout.\n\tIdleTimeout time.Duration\n\n\t// If Wait is true and the pool is at the MaxActive limit, then Get() waits\n\t// for a connection to be returned to the pool before returning.\n\tWait bool\n\n\t// mu protects fields defined below.\n\tmu     sync.Mutex\n\tcond   *sync.Cond\n\tclosed bool\n\tactive int\n\n\t// Stack of idleConn with most recently used at the front.\n\tidle list.List\n}\n\ntype idleConn struct {\n\tc Conn\n\tt time.Time\n}\n\n// NewPool creates a new pool.\n//\n// Deprecated: Initialize the Pool directory as shown in the example.\nfunc NewPool(newFn func() (Conn, error), maxIdle int) *Pool {\n\treturn &Pool{Dial: newFn, MaxIdle: maxIdle}\n}\n\n// Get gets a connection. The application must close the returned connection.\n// This method always returns a valid connection so that applications can defer\n// error handling to the first use of the connection. If there is an error\n// getting an underlying connection, then the connection Err, Do, Send, Flush\n// and Receive methods return that error.\nfunc (p *Pool) Get() Conn {\n\tc, err := p.get()\n\tif err != nil {\n\t\treturn errorConnection{err}\n\t}\n\treturn &pooledConnection{p: p, c: c}\n}\n\n// ActiveCount returns the number of active connections in the pool.\nfunc (p *Pool) ActiveCount() int {\n\tp.mu.Lock()\n\tactive := p.active\n\tp.mu.Unlock()\n\treturn active\n}\n\n// Close releases the resources used by the pool.\nfunc (p *Pool) Close() error {\n\tp.mu.Lock()\n\tidle := p.idle\n\tp.idle.Init()\n\tp.closed = true\n\tp.active -= idle.Len()\n\tif p.cond != nil {\n\t\tp.cond.Broadcast()\n\t}\n\tp.mu.Unlock()\n\tfor e := idle.Front(); e != nil; e = e.Next() {\n\t\te.Value.(idleConn).c.Close()\n\t}\n\treturn nil\n}\n\n// release decrements the active count and signals waiters. The caller must\n// hold p.mu during the call.\nfunc (p *Pool) release() {\n\tp.active -= 1\n\tif p.cond != nil {\n\t\tp.cond.Signal()\n\t}\n}\n\n// get prunes stale connections and returns a connection from the idle list or\n// creates a new connection.\nfunc (p *Pool) get() (Conn, error) {\n\tp.mu.Lock()\n\n\t// Prune stale connections.\n\n\tif timeout := p.IdleTimeout; timeout > 0 {\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Back()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tif ic.t.Add(timeout).After(nowFunc()) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.idle.Remove(e)\n\t\t\tp.release()\n\t\t\tp.mu.Unlock()\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t}\n\t}\n\n\tfor {\n\n\t\t// Get idle connection.\n\n\t\tfor i, n := 0, p.idle.Len(); i < n; i++ {\n\t\t\te := p.idle.Front()\n\t\t\tif e == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tic := e.Value.(idleConn)\n\t\t\tp.idle.Remove(e)\n\t\t\ttest := p.TestOnBorrow\n\t\t\tp.mu.Unlock()\n\t\t\tif test == nil || test(ic.c, ic.t) == nil {\n\t\t\t\treturn ic.c, nil\n\t\t\t}\n\t\t\tic.c.Close()\n\t\t\tp.mu.Lock()\n\t\t\tp.release()\n\t\t}\n\n\t\t// Check for pool closed before dialing a new connection.\n\n\t\tif p.closed {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, errors.New(\"redigo: get on closed pool\")\n\t\t}\n\n\t\t// Dial new connection if under limit.\n\n\t\tif p.MaxActive == 0 || p.active < p.MaxActive {\n\t\t\tdial := p.Dial\n\t\t\tp.active += 1\n\t\t\tp.mu.Unlock()\n\t\t\tc, err := dial()\n\t\t\tif err != nil {\n\t\t\t\tp.mu.Lock()\n\t\t\t\tp.release()\n\t\t\t\tp.mu.Unlock()\n\t\t\t\tc = nil\n\t\t\t}\n\t\t\treturn c, err\n\t\t}\n\n\t\tif !p.Wait {\n\t\t\tp.mu.Unlock()\n\t\t\treturn nil, ErrPoolExhausted\n\t\t}\n\n\t\tif p.cond == nil {\n\t\t\tp.cond = sync.NewCond(&p.mu)\n\t\t}\n\t\tp.cond.Wait()\n\t}\n}\n\nfunc (p *Pool) put(c Conn, forceClose bool) error {\n\terr := c.Err()\n\tp.mu.Lock()\n\tif !p.closed && err == nil && !forceClose {\n\t\tp.idle.PushFront(idleConn{t: nowFunc(), c: c})\n\t\tif p.idle.Len() > p.MaxIdle {\n\t\t\tc = p.idle.Remove(p.idle.Back()).(idleConn).c\n\t\t} else {\n\t\t\tc = nil\n\t\t}\n\t}\n\n\tif c == nil {\n\t\tif p.cond != nil {\n\t\t\tp.cond.Signal()\n\t\t}\n\t\tp.mu.Unlock()\n\t\treturn nil\n\t}\n\n\tp.release()\n\tp.mu.Unlock()\n\treturn c.Close()\n}\n\ntype pooledConnection struct {\n\tp     *Pool\n\tc     Conn\n\tstate int\n}\n\nvar (\n\tsentinel     []byte\n\tsentinelOnce sync.Once\n)\n\nfunc initSentinel() {\n\tp := make([]byte, 64)\n\tif _, err := rand.Read(p); err == nil {\n\t\tsentinel = p\n\t} else {\n\t\th := sha1.New()\n\t\tio.WriteString(h, \"Oops, rand failed. Use time instead.\")\n\t\tio.WriteString(h, strconv.FormatInt(time.Now().UnixNano(), 10))\n\t\tsentinel = h.Sum(nil)\n\t}\n}\n\nfunc (pc *pooledConnection) Close() error {\n\tc := pc.c\n\tif _, ok := c.(errorConnection); ok {\n\t\treturn nil\n\t}\n\tpc.c = errorConnection{errConnClosed}\n\n\tif pc.state&internal.MultiState != 0 {\n\t\tc.Send(\"DISCARD\")\n\t\tpc.state &^= (internal.MultiState | internal.WatchState)\n\t} else if pc.state&internal.WatchState != 0 {\n\t\tc.Send(\"UNWATCH\")\n\t\tpc.state &^= internal.WatchState\n\t}\n\tif pc.state&internal.SubscribeState != 0 {\n\t\tc.Send(\"UNSUBSCRIBE\")\n\t\tc.Send(\"PUNSUBSCRIBE\")\n\t\t// To detect the end of the message stream, ask the server to echo\n\t\t// a sentinel value and read until we see that value.\n\t\tsentinelOnce.Do(initSentinel)\n\t\tc.Send(\"ECHO\", sentinel)\n\t\tc.Flush()\n\t\tfor {\n\t\t\tp, err := c.Receive()\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif p, ok := p.([]byte); ok && bytes.Equal(p, sentinel) {\n\t\t\t\tpc.state &^= internal.SubscribeState\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tc.Do(\"\")\n\tpc.p.put(c, pc.state != 0)\n\treturn nil\n}\n\nfunc (pc *pooledConnection) Err() error {\n\treturn pc.c.Err()\n}\n\nfunc (pc *pooledConnection) Do(commandName string, args ...interface{}) (reply interface{}, err error) {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Do(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Send(commandName string, args ...interface{}) error {\n\tci := internal.LookupCommandInfo(commandName)\n\tpc.state = (pc.state | ci.Set) &^ ci.Clear\n\treturn pc.c.Send(commandName, args...)\n}\n\nfunc (pc *pooledConnection) Flush() error {\n\treturn pc.c.Flush()\n}\n\nfunc (pc *pooledConnection) Receive() (reply interface{}, err error) {\n\treturn pc.c.Receive()\n}\n\ntype errorConnection struct{ err error }\n\nfunc (ec errorConnection) Do(string, ...interface{}) (interface{}, error) { return nil, ec.err }\nfunc (ec errorConnection) Send(string, ...interface{}) error              { return ec.err }\nfunc (ec errorConnection) Err() error                                     { return ec.err }\nfunc (ec errorConnection) Close() error                                   { return ec.err }\nfunc (ec errorConnection) Flush() error                                   { return ec.err }\nfunc (ec errorConnection) Receive() (interface{}, error)                  { return nil, ec.err }\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/pre_go17.go",
    "content": "// +build !go1.7\n\npackage redis\n\nimport \"crypto/tls\"\n\n// similar cloneTLSClientConfig in the stdlib, but also honor skipVerify for the nil case\nfunc cloneTLSClientConfig(cfg *tls.Config, skipVerify bool) *tls.Config {\n\tif cfg == nil {\n\t\treturn &tls.Config{InsecureSkipVerify: skipVerify}\n\t}\n\treturn &tls.Config{\n\t\tRand:                     cfg.Rand,\n\t\tTime:                     cfg.Time,\n\t\tCertificates:             cfg.Certificates,\n\t\tNameToCertificate:        cfg.NameToCertificate,\n\t\tGetCertificate:           cfg.GetCertificate,\n\t\tRootCAs:                  cfg.RootCAs,\n\t\tNextProtos:               cfg.NextProtos,\n\t\tServerName:               cfg.ServerName,\n\t\tClientAuth:               cfg.ClientAuth,\n\t\tClientCAs:                cfg.ClientCAs,\n\t\tInsecureSkipVerify:       cfg.InsecureSkipVerify,\n\t\tCipherSuites:             cfg.CipherSuites,\n\t\tPreferServerCipherSuites: cfg.PreferServerCipherSuites,\n\t\tClientSessionCache:       cfg.ClientSessionCache,\n\t\tMinVersion:               cfg.MinVersion,\n\t\tMaxVersion:               cfg.MaxVersion,\n\t\tCurvePreferences:         cfg.CurvePreferences,\n\t}\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/pubsub.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport \"errors\"\n\n// Subscription represents a subscribe or unsubscribe notification.\ntype Subscription struct {\n\n\t// Kind is \"subscribe\", \"unsubscribe\", \"psubscribe\" or \"punsubscribe\"\n\tKind string\n\n\t// The channel that was changed.\n\tChannel string\n\n\t// The current number of subscriptions for connection.\n\tCount int\n}\n\n// Message represents a message notification.\ntype Message struct {\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// PMessage represents a pmessage notification.\ntype PMessage struct {\n\n\t// The matched pattern.\n\tPattern string\n\n\t// The originating channel.\n\tChannel string\n\n\t// The message data.\n\tData []byte\n}\n\n// Pong represents a pubsub pong notification.\ntype Pong struct {\n\tData string\n}\n\n// PubSubConn wraps a Conn with convenience methods for subscribers.\ntype PubSubConn struct {\n\tConn Conn\n}\n\n// Close closes the connection.\nfunc (c PubSubConn) Close() error {\n\treturn c.Conn.Close()\n}\n\n// Subscribe subscribes the connection to the specified channels.\nfunc (c PubSubConn) Subscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"SUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PSubscribe subscribes the connection to the given patterns.\nfunc (c PubSubConn) PSubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Unsubscribe unsubscribes the connection from the given channels, or from all\n// of them if none is given.\nfunc (c PubSubConn) Unsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"UNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// PUnsubscribe unsubscribes the connection from the given patterns, or from all\n// of them if none is given.\nfunc (c PubSubConn) PUnsubscribe(channel ...interface{}) error {\n\tc.Conn.Send(\"PUNSUBSCRIBE\", channel...)\n\treturn c.Conn.Flush()\n}\n\n// Ping sends a PING to the server with the specified data.\nfunc (c PubSubConn) Ping(data string) error {\n\tc.Conn.Send(\"PING\", data)\n\treturn c.Conn.Flush()\n}\n\n// Receive returns a pushed message as a Subscription, Message, PMessage, Pong\n// or error. The return value is intended to be used directly in a type switch\n// as illustrated in the PubSubConn example.\nfunc (c PubSubConn) Receive() interface{} {\n\treply, err := Values(c.Conn.Receive())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar kind string\n\treply, err = Scan(reply, &kind)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch kind {\n\tcase \"message\":\n\t\tvar m Message\n\t\tif _, err := Scan(reply, &m.Channel, &m.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn m\n\tcase \"pmessage\":\n\t\tvar pm PMessage\n\t\tif _, err := Scan(reply, &pm.Pattern, &pm.Channel, &pm.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn pm\n\tcase \"subscribe\", \"psubscribe\", \"unsubscribe\", \"punsubscribe\":\n\t\ts := Subscription{Kind: kind}\n\t\tif _, err := Scan(reply, &s.Channel, &s.Count); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn s\n\tcase \"pong\":\n\t\tvar p Pong\n\t\tif _, err := Scan(reply, &p.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn p\n\t}\n\treturn errors.New(\"redigo: unknown pubsub notification\")\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/redis.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\n// Error represents an error returned in a command reply.\ntype Error string\n\nfunc (err Error) Error() string { return string(err) }\n\n// Conn represents a connection to a Redis server.\ntype Conn interface {\n\t// Close closes the connection.\n\tClose() error\n\n\t// Err returns a non-nil value when the connection is not usable.\n\tErr() error\n\n\t// Do sends a command to the server and returns the received reply.\n\tDo(commandName string, args ...interface{}) (reply interface{}, err error)\n\n\t// Send writes the command to the client's output buffer.\n\tSend(commandName string, args ...interface{}) error\n\n\t// Flush flushes the output buffer to the Redis server.\n\tFlush() error\n\n\t// Receive receives a single reply from the Redis server\n\tReceive() (reply interface{}, err error)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/reply.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// ErrNil indicates that a reply value is nil.\nvar ErrNil = errors.New(\"redigo: nil returned\")\n\n// Int is a helper that converts a command reply to an integer. If err is not\n// equal to nil, then Int returns 0, err. Otherwise, Int converts the\n// reply to an int as follows:\n//\n//  Reply type    Result\n//  integer       int(reply), nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int(reply interface{}, err error) (int, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tx := int(reply)\n\t\tif int64(x) != reply {\n\t\t\treturn 0, strconv.ErrRange\n\t\t}\n\t\treturn x, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 0)\n\t\treturn int(n), err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int, got type %T\", reply)\n}\n\n// Int64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Int64(reply interface{}, err error) (int64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply, nil\n\tcase []byte:\n\t\tn, err := strconv.ParseInt(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Int64, got type %T\", reply)\n}\n\nvar errNegativeInt = errors.New(\"redigo: unexpected value for Uint64\")\n\n// Uint64 is a helper that converts a command reply to 64 bit integer. If err is\n// not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the\n// reply to an int64 as follows:\n//\n//  Reply type    Result\n//  integer       reply, nil\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Uint64(reply interface{}, err error) (uint64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\tif reply < 0 {\n\t\t\treturn 0, errNegativeInt\n\t\t}\n\t\treturn uint64(reply), nil\n\tcase []byte:\n\t\tn, err := strconv.ParseUint(string(reply), 10, 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Uint64, got type %T\", reply)\n}\n\n// Float64 is a helper that converts a command reply to 64 bit float. If err is\n// not equal to nil, then Float64 returns 0, err. Otherwise, Float64 converts\n// the reply to an int as follows:\n//\n//  Reply type    Result\n//  bulk string   parsed reply, nil\n//  nil           0, ErrNil\n//  other         0, error\nfunc Float64(reply interface{}, err error) (float64, error) {\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\tn, err := strconv.ParseFloat(string(reply), 64)\n\t\treturn n, err\n\tcase nil:\n\t\treturn 0, ErrNil\n\tcase Error:\n\t\treturn 0, reply\n\t}\n\treturn 0, fmt.Errorf(\"redigo: unexpected type for Float64, got type %T\", reply)\n}\n\n// String is a helper that converts a command reply to a string. If err is not\n// equal to nil, then String returns \"\", err. Otherwise String converts the\n// reply to a string as follows:\n//\n//  Reply type      Result\n//  bulk string     string(reply), nil\n//  simple string   reply, nil\n//  nil             \"\",  ErrNil\n//  other           \"\",  error\nfunc String(reply interface{}, err error) (string, error) {\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn string(reply), nil\n\tcase string:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn \"\", ErrNil\n\tcase Error:\n\t\treturn \"\", reply\n\t}\n\treturn \"\", fmt.Errorf(\"redigo: unexpected type for String, got type %T\", reply)\n}\n\n// Bytes is a helper that converts a command reply to a slice of bytes. If err\n// is not equal to nil, then Bytes returns nil, err. Otherwise Bytes converts\n// the reply to a slice of bytes as follows:\n//\n//  Reply type      Result\n//  bulk string     reply, nil\n//  simple string   []byte(reply), nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Bytes(reply interface{}, err error) ([]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []byte:\n\t\treturn reply, nil\n\tcase string:\n\t\treturn []byte(reply), nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Bytes, got type %T\", reply)\n}\n\n// Bool is a helper that converts a command reply to a boolean. If err is not\n// equal to nil, then Bool returns false, err. Otherwise Bool converts the\n// reply to boolean as follows:\n//\n//  Reply type      Result\n//  integer         value != 0, nil\n//  bulk string     strconv.ParseBool(reply)\n//  nil             false, ErrNil\n//  other           false, error\nfunc Bool(reply interface{}, err error) (bool, error) {\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase int64:\n\t\treturn reply != 0, nil\n\tcase []byte:\n\t\treturn strconv.ParseBool(string(reply))\n\tcase nil:\n\t\treturn false, ErrNil\n\tcase Error:\n\t\treturn false, reply\n\t}\n\treturn false, fmt.Errorf(\"redigo: unexpected type for Bool, got type %T\", reply)\n}\n\n// MultiBulk is a helper that converts an array command reply to a []interface{}.\n//\n// Deprecated: Use Values instead.\nfunc MultiBulk(reply interface{}, err error) ([]interface{}, error) { return Values(reply, err) }\n\n// Values is a helper that converts an array command reply to a []interface{}.\n// If err is not equal to nil, then Values returns nil, err. Otherwise, Values\n// converts the reply as follows:\n//\n//  Reply type      Result\n//  array           reply, nil\n//  nil             nil, ErrNil\n//  other           nil, error\nfunc Values(reply interface{}, err error) ([]interface{}, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\treturn reply, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Values, got type %T\", reply)\n}\n\n// Strings is a helper that converts an array command reply to a []string. If\n// err is not equal to nil, then Strings returns nil, err. Nil array items are\n// converted to \"\" in the output slice. Strings returns an error if an array\n// item is not a bulk string or nil.\nfunc Strings(reply interface{}, err error) ([]string, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([]string, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for Strings, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = string(p)\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for Strings, got type %T\", reply)\n}\n\n// ByteSlices is a helper that converts an array command reply to a [][]byte.\n// If err is not equal to nil, then ByteSlices returns nil, err. Nil array\n// items are stay nil. ByteSlices returns an error if an array item is not a\n// bulk string or nil.\nfunc ByteSlices(reply interface{}, err error) ([][]byte, error) {\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch reply := reply.(type) {\n\tcase []interface{}:\n\t\tresult := make([][]byte, len(reply))\n\t\tfor i := range reply {\n\t\t\tif reply[i] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := reply[i].([]byte)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"redigo: unexpected element type for ByteSlices, got type %T\", reply[i])\n\t\t\t}\n\t\t\tresult[i] = p\n\t\t}\n\t\treturn result, nil\n\tcase nil:\n\t\treturn nil, ErrNil\n\tcase Error:\n\t\treturn nil, reply\n\t}\n\treturn nil, fmt.Errorf(\"redigo: unexpected type for ByteSlices, got type %T\", reply)\n}\n\n// Ints is a helper that converts an array command reply to a []int. If\n// err is not equal to nil, then Ints returns nil, err.\nfunc Ints(reply interface{}, err error) ([]int, error) {\n\tvar ints []int\n\tvalues, err := Values(reply, err)\n\tif err != nil {\n\t\treturn ints, err\n\t}\n\tif err := ScanSlice(values, &ints); err != nil {\n\t\treturn ints, err\n\t}\n\treturn ints, nil\n}\n\n// StringMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]string. The HGETALL and CONFIG GET commands return replies in this format.\n// Requires an even number of values in result.\nfunc StringMap(result interface{}, err error) (map[string]string, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: StringMap expects even number of values result\")\n\t}\n\tm := make(map[string]string, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, okKey := values[i].([]byte)\n\t\tvalue, okValue := values[i+1].([]byte)\n\t\tif !okKey || !okValue {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tm[string(key)] = string(value)\n\t}\n\treturn m, nil\n}\n\n// IntMap is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc IntMap(result interface{}, err error) (map[string]int, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: IntMap expects even number of values result\")\n\t}\n\tm := make(map[string]int, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n\n// Int64Map is a helper that converts an array of strings (alternating key, value)\n// into a map[string]int64. The HGETALL commands return replies in this format.\n// Requires an even number of values in result.\nfunc Int64Map(result interface{}, err error) (map[string]int64, error) {\n\tvalues, err := Values(result, err)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(values)%2 != 0 {\n\t\treturn nil, errors.New(\"redigo: Int64Map expects even number of values result\")\n\t}\n\tm := make(map[string]int64, len(values)/2)\n\tfor i := 0; i < len(values); i += 2 {\n\t\tkey, ok := values[i].([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"redigo: ScanMap key not a bulk string value\")\n\t\t}\n\t\tvalue, err := Int64(values[i+1], nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[string(key)] = value\n\t}\n\treturn m, nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/scan.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nfunc ensureLen(d reflect.Value, n int) {\n\tif n > d.Cap() {\n\t\td.Set(reflect.MakeSlice(d.Type(), n, n))\n\t} else {\n\t\td.SetLen(n)\n\t}\n}\n\nfunc cannotConvert(d reflect.Value, s interface{}) error {\n\tvar sname string\n\tswitch s.(type) {\n\tcase string:\n\t\tsname = \"Redis simple string\"\n\tcase Error:\n\t\tsname = \"Redis error\"\n\tcase int64:\n\t\tsname = \"Redis integer\"\n\tcase []byte:\n\t\tsname = \"Redis bulk string\"\n\tcase []interface{}:\n\t\tsname = \"Redis array\"\n\tdefault:\n\t\tsname = reflect.TypeOf(s).String()\n\t}\n\treturn fmt.Errorf(\"cannot convert from %s to %s\", sname, d.Type())\n}\n\nfunc convertAssignBulkString(d reflect.Value, s []byte) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tvar x float64\n\t\tx, err = strconv.ParseFloat(string(s), d.Type().Bits())\n\t\td.SetFloat(x)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tvar x int64\n\t\tx, err = strconv.ParseInt(string(s), 10, d.Type().Bits())\n\t\td.SetInt(x)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tvar x uint64\n\t\tx, err = strconv.ParseUint(string(s), 10, d.Type().Bits())\n\t\td.SetUint(x)\n\tcase reflect.Bool:\n\t\tvar x bool\n\t\tx, err = strconv.ParseBool(string(s))\n\t\td.SetBool(x)\n\tcase reflect.String:\n\t\td.SetString(string(s))\n\tcase reflect.Slice:\n\t\tif d.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\terr = cannotConvert(d, s)\n\t\t} else {\n\t\t\td.SetBytes(s)\n\t\t}\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignInt(d reflect.Value, s int64) (err error) {\n\tswitch d.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\td.SetInt(s)\n\t\tif d.Int() != s {\n\t\t\terr = strconv.ErrRange\n\t\t\td.SetInt(0)\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tif s < 0 {\n\t\t\terr = strconv.ErrRange\n\t\t} else {\n\t\t\tx := uint64(s)\n\t\t\td.SetUint(x)\n\t\t\tif d.Uint() != x {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\td.SetUint(0)\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\td.SetBool(s != 0)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn\n}\n\nfunc convertAssignValue(d reflect.Value, s interface{}) (err error) {\n\tswitch s := s.(type) {\n\tcase []byte:\n\t\terr = convertAssignBulkString(d, s)\n\tcase int64:\n\t\terr = convertAssignInt(d, s)\n\tdefault:\n\t\terr = cannotConvert(d, s)\n\t}\n\treturn err\n}\n\nfunc convertAssignArray(d reflect.Value, s []interface{}) error {\n\tif d.Type().Kind() != reflect.Slice {\n\t\treturn cannotConvert(d, s)\n\t}\n\tensureLen(d, len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tif err := convertAssignValue(d.Index(i), s[i]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc convertAssign(d interface{}, s interface{}) (err error) {\n\t// Handle the most common destination types using type switches and\n\t// fall back to reflection for all other types.\n\tswitch s := s.(type) {\n\tcase nil:\n\t\t// ingore\n\tcase []byte:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tcase *int:\n\t\t\t*d, err = strconv.Atoi(string(s))\n\t\tcase *bool:\n\t\t\t*d, err = strconv.ParseBool(string(s))\n\t\tcase *[]byte:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignBulkString(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase int64:\n\t\tswitch d := d.(type) {\n\t\tcase *int:\n\t\t\tx := int(s)\n\t\t\tif int64(x) != s {\n\t\t\t\terr = strconv.ErrRange\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\t*d = x\n\t\tcase *bool:\n\t\t\t*d = s != 0\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignInt(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase string:\n\t\tswitch d := d.(type) {\n\t\tcase *string:\n\t\t\t*d = string(s)\n\t\tdefault:\n\t\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t\t}\n\tcase []interface{}:\n\t\tswitch d := d.(type) {\n\t\tcase *[]interface{}:\n\t\t\t*d = s\n\t\tcase *interface{}:\n\t\t\t*d = s\n\t\tcase nil:\n\t\t\t// skip value\n\t\tdefault:\n\t\t\tif d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr {\n\t\t\t\terr = cannotConvert(d, s)\n\t\t\t} else {\n\t\t\t\terr = convertAssignArray(d.Elem(), s)\n\t\t\t}\n\t\t}\n\tcase Error:\n\t\terr = s\n\tdefault:\n\t\terr = cannotConvert(reflect.ValueOf(d), s)\n\t}\n\treturn\n}\n\n// Scan copies from src to the values pointed at by dest.\n//\n// The values pointed at by dest must be an integer, float, boolean, string,\n// []byte, interface{} or slices of these types. Scan uses the standard strconv\n// package to convert bulk strings to numeric and boolean types.\n//\n// If a dest value is nil, then the corresponding src value is skipped.\n//\n// If a src element is nil, then the corresponding dest value is not modified.\n//\n// To enable easy use of Scan in a loop, Scan returns the slice of src\n// following the copied values.\nfunc Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) {\n\tif len(src) < len(dest) {\n\t\treturn nil, errors.New(\"redigo.Scan: array short\")\n\t}\n\tvar err error\n\tfor i, d := range dest {\n\t\terr = convertAssign(d, src[i])\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"redigo.Scan: cannot assign to dest %d: %v\", i, err)\n\t\t\tbreak\n\t\t}\n\t}\n\treturn src[len(dest):], err\n}\n\ntype fieldSpec struct {\n\tname      string\n\tindex     []int\n\tomitEmpty bool\n}\n\ntype structSpec struct {\n\tm map[string]*fieldSpec\n\tl []*fieldSpec\n}\n\nfunc (ss *structSpec) fieldSpec(name []byte) *fieldSpec {\n\treturn ss.m[string(name)]\n}\n\nfunc compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *structSpec) {\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tswitch {\n\t\tcase f.PkgPath != \"\" && !f.Anonymous:\n\t\t\t// Ignore unexported fields.\n\t\tcase f.Anonymous:\n\t\t\t// TODO: Handle pointers. Requires change to decoder and\n\t\t\t// protection against infinite recursion.\n\t\t\tif f.Type.Kind() == reflect.Struct {\n\t\t\t\tcompileStructSpec(f.Type, depth, append(index, i), ss)\n\t\t\t}\n\t\tdefault:\n\t\t\tfs := &fieldSpec{name: f.Name}\n\t\t\ttag := f.Tag.Get(\"redis\")\n\t\t\tp := strings.Split(tag, \",\")\n\t\t\tif len(p) > 0 {\n\t\t\t\tif p[0] == \"-\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif len(p[0]) > 0 {\n\t\t\t\t\tfs.name = p[0]\n\t\t\t\t}\n\t\t\t\tfor _, s := range p[1:] {\n\t\t\t\t\tswitch s {\n\t\t\t\t\tcase \"omitempty\":\n\t\t\t\t\t\tfs.omitEmpty = true\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tpanic(fmt.Errorf(\"redigo: unknown field tag %s for type %s\", s, t.Name()))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\td, found := depth[fs.name]\n\t\t\tif !found {\n\t\t\t\td = 1 << 30\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase len(index) == d:\n\t\t\t\t// At same depth, remove from result.\n\t\t\t\tdelete(ss.m, fs.name)\n\t\t\t\tj := 0\n\t\t\t\tfor i := 0; i < len(ss.l); i++ {\n\t\t\t\t\tif fs.name != ss.l[i].name {\n\t\t\t\t\t\tss.l[j] = ss.l[i]\n\t\t\t\t\t\tj += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tss.l = ss.l[:j]\n\t\t\tcase len(index) < d:\n\t\t\t\tfs.index = make([]int, len(index)+1)\n\t\t\t\tcopy(fs.index, index)\n\t\t\t\tfs.index[len(index)] = i\n\t\t\t\tdepth[fs.name] = len(index)\n\t\t\t\tss.m[fs.name] = fs\n\t\t\t\tss.l = append(ss.l, fs)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar (\n\tstructSpecMutex  sync.RWMutex\n\tstructSpecCache  = make(map[reflect.Type]*structSpec)\n\tdefaultFieldSpec = &fieldSpec{}\n)\n\nfunc structSpecForType(t reflect.Type) *structSpec {\n\n\tstructSpecMutex.RLock()\n\tss, found := structSpecCache[t]\n\tstructSpecMutex.RUnlock()\n\tif found {\n\t\treturn ss\n\t}\n\n\tstructSpecMutex.Lock()\n\tdefer structSpecMutex.Unlock()\n\tss, found = structSpecCache[t]\n\tif found {\n\t\treturn ss\n\t}\n\n\tss = &structSpec{m: make(map[string]*fieldSpec)}\n\tcompileStructSpec(t, make(map[string]int), nil, ss)\n\tstructSpecCache[t] = ss\n\treturn ss\n}\n\nvar errScanStructValue = errors.New(\"redigo.ScanStruct: value must be non-nil pointer to a struct\")\n\n// ScanStruct scans alternating names and values from src to a struct. The\n// HGETALL and CONFIG GET commands return replies in this format.\n//\n// ScanStruct uses exported field names to match values in the response. Use\n// 'redis' field tag to override the name:\n//\n//      Field int `redis:\"myName\"`\n//\n// Fields with the tag redis:\"-\" are ignored.\n//\n// Integer, float, boolean, string and []byte fields are supported. Scan uses the\n// standard strconv package to convert bulk string values to numeric and\n// boolean types.\n//\n// If a src element is nil, then the corresponding field is not modified.\nfunc ScanStruct(src []interface{}, dest interface{}) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanStructValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Struct {\n\t\treturn errScanStructValue\n\t}\n\tss := structSpecForType(d.Type())\n\n\tif len(src)%2 != 0 {\n\t\treturn errors.New(\"redigo.ScanStruct: number of values not a multiple of 2\")\n\t}\n\n\tfor i := 0; i < len(src); i += 2 {\n\t\ts := src[i+1]\n\t\tif s == nil {\n\t\t\tcontinue\n\t\t}\n\t\tname, ok := src[i].([]byte)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: key %d not a bulk string value\", i)\n\t\t}\n\t\tfs := ss.fieldSpec(name)\n\t\tif fs == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\treturn fmt.Errorf(\"redigo.ScanStruct: cannot assign field %s: %v\", fs.name, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nvar (\n\terrScanSliceValue = errors.New(\"redigo.ScanSlice: dest must be non-nil pointer to a struct\")\n)\n\n// ScanSlice scans src to the slice pointed to by dest. The elements the dest\n// slice must be integer, float, boolean, string, struct or pointer to struct\n// values.\n//\n// Struct fields must be integer, float, boolean or string values. All struct\n// fields are used unless a subset is specified using fieldNames.\nfunc ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error {\n\td := reflect.ValueOf(dest)\n\tif d.Kind() != reflect.Ptr || d.IsNil() {\n\t\treturn errScanSliceValue\n\t}\n\td = d.Elem()\n\tif d.Kind() != reflect.Slice {\n\t\treturn errScanSliceValue\n\t}\n\n\tisPtr := false\n\tt := d.Type().Elem()\n\tif t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {\n\t\tisPtr = true\n\t\tt = t.Elem()\n\t}\n\n\tif t.Kind() != reflect.Struct {\n\t\tensureLen(d, len(src))\n\t\tfor i, s := range src {\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.Index(i), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d: %v\", i, err)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tss := structSpecForType(t)\n\tfss := ss.l\n\tif len(fieldNames) > 0 {\n\t\tfss = make([]*fieldSpec, len(fieldNames))\n\t\tfor i, name := range fieldNames {\n\t\t\tfss[i] = ss.m[name]\n\t\t\tif fss[i] == nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: ScanSlice bad field name %s\", name)\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(fss) == 0 {\n\t\treturn errors.New(\"redigo.ScanSlice: no struct fields\")\n\t}\n\n\tn := len(src) / len(fss)\n\tif n*len(fss) != len(src) {\n\t\treturn errors.New(\"redigo.ScanSlice: length not a multiple of struct field count\")\n\t}\n\n\tensureLen(d, n)\n\tfor i := 0; i < n; i++ {\n\t\td := d.Index(i)\n\t\tif isPtr {\n\t\t\tif d.IsNil() {\n\t\t\t\td.Set(reflect.New(t))\n\t\t\t}\n\t\t\td = d.Elem()\n\t\t}\n\t\tfor j, fs := range fss {\n\t\t\ts := src[i*len(fss)+j]\n\t\t\tif s == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"redigo.ScanSlice: cannot assign element %d to field %s: %v\", i*len(fss)+j, fs.name, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Args is a helper for constructing command arguments from structured values.\ntype Args []interface{}\n\n// Add returns the result of appending value to args.\nfunc (args Args) Add(value ...interface{}) Args {\n\treturn append(args, value...)\n}\n\n// AddFlat returns the result of appending the flattened value of v to args.\n//\n// Maps are flattened by appending the alternating keys and map values to args.\n//\n// Slices are flattened by appending the slice elements to args.\n//\n// Structs are flattened by appending the alternating names and values of\n// exported fields to args. If v is a nil struct pointer, then nothing is\n// appended. The 'redis' field tag overrides struct field names. See ScanStruct\n// for more information on the use of the 'redis' field tag.\n//\n// Other types are appended to args as is.\nfunc (args Args) AddFlat(v interface{}) Args {\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Struct:\n\t\targs = flattenStruct(args, rv)\n\tcase reflect.Slice:\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\targs = append(args, rv.Index(i).Interface())\n\t\t}\n\tcase reflect.Map:\n\t\tfor _, k := range rv.MapKeys() {\n\t\t\targs = append(args, k.Interface(), rv.MapIndex(k).Interface())\n\t\t}\n\tcase reflect.Ptr:\n\t\tif rv.Type().Elem().Kind() == reflect.Struct {\n\t\t\tif !rv.IsNil() {\n\t\t\t\targs = flattenStruct(args, rv.Elem())\n\t\t\t}\n\t\t} else {\n\t\t\targs = append(args, v)\n\t\t}\n\tdefault:\n\t\targs = append(args, v)\n\t}\n\treturn args\n}\n\nfunc flattenStruct(args Args, v reflect.Value) Args {\n\tss := structSpecForType(v.Type())\n\tfor _, fs := range ss.l {\n\t\tfv := v.FieldByIndex(fs.index)\n\t\tif fs.omitEmpty {\n\t\t\tvar empty = false\n\t\t\tswitch fv.Kind() {\n\t\t\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\t\t\tempty = fv.Len() == 0\n\t\t\tcase reflect.Bool:\n\t\t\t\tempty = !fv.Bool()\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tempty = fv.Int() == 0\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\tempty = fv.Uint() == 0\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\tempty = fv.Float() == 0\n\t\t\tcase reflect.Interface, reflect.Ptr:\n\t\t\t\tempty = fv.IsNil()\n\t\t\t}\n\t\t\tif empty {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\targs = append(args, fs.name, fv.Interface())\n\t}\n\treturn args\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redis/script.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redis\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"strings\"\n)\n\n// Script encapsulates the source, hash and key count for a Lua script. See\n// http://redis.io/commands/eval for information on scripts in Redis.\ntype Script struct {\n\tkeyCount int\n\tsrc      string\n\thash     string\n}\n\n// NewScript returns a new script object. If keyCount is greater than or equal\n// to zero, then the count is automatically inserted in the EVAL command\n// argument list. If keyCount is less than zero, then the application supplies\n// the count as the first value in the keysAndArgs argument to the Do, Send and\n// SendHash methods.\nfunc NewScript(keyCount int, src string) *Script {\n\th := sha1.New()\n\tio.WriteString(h, src)\n\treturn &Script{keyCount, src, hex.EncodeToString(h.Sum(nil))}\n}\n\nfunc (s *Script) args(spec string, keysAndArgs []interface{}) []interface{} {\n\tvar args []interface{}\n\tif s.keyCount < 0 {\n\t\targs = make([]interface{}, 1+len(keysAndArgs))\n\t\targs[0] = spec\n\t\tcopy(args[1:], keysAndArgs)\n\t} else {\n\t\targs = make([]interface{}, 2+len(keysAndArgs))\n\t\targs[0] = spec\n\t\targs[1] = s.keyCount\n\t\tcopy(args[2:], keysAndArgs)\n\t}\n\treturn args\n}\n\n// Do evaluates the script. Under the covers, Do optimistically evaluates the\n// script using the EVALSHA command. If the command fails because the script is\n// not loaded, then Do evaluates the script using the EVAL command (thus\n// causing the script to load).\nfunc (s *Script) Do(c Conn, keysAndArgs ...interface{}) (interface{}, error) {\n\tv, err := c.Do(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n\tif e, ok := err.(Error); ok && strings.HasPrefix(string(e), \"NOSCRIPT \") {\n\t\tv, err = c.Do(\"EVAL\", s.args(s.src, keysAndArgs)...)\n\t}\n\treturn v, err\n}\n\n// SendHash evaluates the script without waiting for the reply. The script is\n// evaluated with the EVALSHA command. The application must ensure that the\n// script is loaded by a previous call to Send, Do or Load methods.\nfunc (s *Script) SendHash(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVALSHA\", s.args(s.hash, keysAndArgs)...)\n}\n\n// Send evaluates the script without waiting for the reply.\nfunc (s *Script) Send(c Conn, keysAndArgs ...interface{}) error {\n\treturn c.Send(\"EVAL\", s.args(s.src, keysAndArgs)...)\n}\n\n// Load loads the script without evaluating it.\nfunc (s *Script) Load(c Conn) error {\n\t_, err := c.Do(\"SCRIPT\", \"LOAD\", s.src)\n\treturn err\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redisx/connmux.go",
    "content": "// Copyright 2014 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage redisx\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\n\t\"github.com/garyburd/redigo/internal\"\n\t\"github.com/garyburd/redigo/redis\"\n)\n\n// ConnMux multiplexes one or more connections to a single underlying\n// connection. The ConnMux connections do not support concurrency, commands\n// that associate server side state with the connection or commands that put\n// the connection in a special mode.\ntype ConnMux struct {\n\tc redis.Conn\n\n\tsendMu sync.Mutex\n\tsendID uint\n\n\trecvMu   sync.Mutex\n\trecvID   uint\n\trecvWait map[uint]chan struct{}\n}\n\nfunc NewConnMux(c redis.Conn) *ConnMux {\n\treturn &ConnMux{c: c, recvWait: make(map[uint]chan struct{})}\n}\n\n// Get gets a connection. The application must close the returned connection.\nfunc (p *ConnMux) Get() redis.Conn {\n\tc := &muxConn{p: p}\n\tc.ids = c.buf[:0]\n\treturn c\n}\n\n// Close closes the underlying connection.\nfunc (p *ConnMux) Close() error {\n\treturn p.c.Close()\n}\n\ntype muxConn struct {\n\tp   *ConnMux\n\tids []uint\n\tbuf [8]uint\n}\n\nfunc (c *muxConn) send(flush bool, cmd string, args ...interface{}) error {\n\tif internal.LookupCommandInfo(cmd).Set != 0 {\n\t\treturn errors.New(\"command not supported by mux pool\")\n\t}\n\tp := c.p\n\tp.sendMu.Lock()\n\tid := p.sendID\n\tc.ids = append(c.ids, id)\n\tp.sendID++\n\terr := p.c.Send(cmd, args...)\n\tif flush {\n\t\terr = p.c.Flush()\n\t}\n\tp.sendMu.Unlock()\n\treturn err\n}\n\nfunc (c *muxConn) Send(cmd string, args ...interface{}) error {\n\treturn c.send(false, cmd, args...)\n}\n\nfunc (c *muxConn) Flush() error {\n\tp := c.p\n\tp.sendMu.Lock()\n\terr := p.c.Flush()\n\tp.sendMu.Unlock()\n\treturn err\n}\n\nfunc (c *muxConn) Receive() (interface{}, error) {\n\tif len(c.ids) == 0 {\n\t\treturn nil, errors.New(\"mux pool underflow\")\n\t}\n\n\tid := c.ids[0]\n\tc.ids = c.ids[1:]\n\tif len(c.ids) == 0 {\n\t\tc.ids = c.buf[:0]\n\t}\n\n\tp := c.p\n\tp.recvMu.Lock()\n\tif p.recvID != id {\n\t\tch := make(chan struct{})\n\t\tp.recvWait[id] = ch\n\t\tp.recvMu.Unlock()\n\t\t<-ch\n\t\tp.recvMu.Lock()\n\t\tif p.recvID != id {\n\t\t\tpanic(\"out of sync\")\n\t\t}\n\t}\n\n\tv, err := p.c.Receive()\n\n\tid++\n\tp.recvID = id\n\tch, ok := p.recvWait[id]\n\tif ok {\n\t\tdelete(p.recvWait, id)\n\t}\n\tp.recvMu.Unlock()\n\tif ok {\n\t\tch <- struct{}{}\n\t}\n\n\treturn v, err\n}\n\nfunc (c *muxConn) Close() error {\n\tvar err error\n\tif len(c.ids) == 0 {\n\t\treturn nil\n\t}\n\tc.Flush()\n\tfor _ = range c.ids {\n\t\t_, err = c.Receive()\n\t}\n\treturn err\n}\n\nfunc (c *muxConn) Do(cmd string, args ...interface{}) (interface{}, error) {\n\tif err := c.send(true, cmd, args...); err != nil {\n\t\treturn nil, err\n\t}\n\treturn c.Receive()\n}\n\nfunc (c *muxConn) Err() error {\n\treturn c.p.c.Err()\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/garyburd/redigo/redisx/doc.go",
    "content": "// Copyright 2012 Gary Burd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package redisx contains experimental features for Redigo. Features in this\n// package may be modified or deleted at any time.\npackage redisx // import \"github.com/garyburd/redigo/redisx\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/namsral/flag/LICENSE",
    "content": "Copyright (c) 2012 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."
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/namsral/flag/examples/gopher.go",
    "content": "package main\n\nimport (\n    \"github.com/namsral/flag\"\n    \"fmt\"\n    )\n\nfunc main() {\n    var (\n        config string\n        length float64\n        age int\n        name string\n        female bool\n    )\n\n    flag.StringVar(&config, \"config\", \"\", \"help message\")\n    flag.StringVar(&name, \"name\", \"\", \"help message\")\n    flag.IntVar(&age, \"age\", 0, \"help message\")\n    flag.Float64Var(&length, \"length\", 0, \"help message\")\n    flag.BoolVar(&female, \"female\", false, \"help message\")\n    \n    flag.Parse()\n    \n    fmt.Println(\"length:\", length)\n    fmt.Println(\"age:\", age)\n    fmt.Println(\"name:\", name)\n    fmt.Println(\"female:\", female)\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/namsral/flag/extras.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\npackage flag\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strings\"\n)\n\n// EnvironmentPrefix defines a string that will be implicitely prefixed to a\n// flag name before looking it up in the environment variables.\nvar EnvironmentPrefix = \"\"\n\n// ParseEnv parses flags from environment variables.\n// Flags already set will be ignored.\nfunc (f *FlagSet) ParseEnv(environ []string) error {\n\n\tm := f.formal\n\n\tenv := make(map[string]string)\n\tfor _, s := range environ {\n\t\ti := strings.Index(s, \"=\")\n\t\tif i < 1 {\n\t\t\tcontinue\n\t\t}\n\t\tenv[s[0:i]] = s[i+1 : len(s)]\n\t}\n\n\tfor _, flag := range m {\n\t\tname := flag.Name\n\t\t_, set := f.actual[name]\n\t\tif set {\n\t\t\tcontinue\n\t\t}\n\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"environment variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tenvKey := strings.ToUpper(flag.Name)\n\t\tif f.envPrefix != \"\" {\n\t\t\tenvKey = f.envPrefix + \"_\" + envKey\n\t\t}\n\t\tenvKey = strings.Replace(envKey, \"-\", \"_\", -1)\n\n\t\tvalue, isSet := env[envKey]\n\t\tif !isSet {\n\t\t\tcontinue\n\t\t}\n\n\t\thasValue := false\n\t\tif len(value) > 0 {\n\t\t\thasValue = true\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for environment variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for environment variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\n\t}\n\treturn nil\n}\n\n// NewFlagSetWithEnvPrefix returns a new empty flag set with the specified name,\n// environment variable prefix, and error handling property.\nfunc NewFlagSetWithEnvPrefix(name string, prefix string, errorHandling ErrorHandling) *FlagSet {\n\tf := NewFlagSet(name, errorHandling)\n\tf.envPrefix = prefix\n\treturn f\n}\n\n// DefaultConfigFlagname defines the flag name of the optional config file\n// path. Used to lookup and parse the config file when a default is set and\n// available on disk.\nvar DefaultConfigFlagname = \"config\"\n\n// ParseFile parses flags from the file in path.\n// Same format as commandline argumens, newlines and lines beginning with a\n// \"#\" charater are ignored. Flags already set will be ignored.\nfunc (f *FlagSet) ParseFile(path string) error {\n\n\t// Extract arguments from file\n\tfp, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fp.Close()\n\n\tscanner := bufio.NewScanner(fp)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\n\t\t// Ignore empty lines\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Ignore comments\n\t\tif line[:1] == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Match `key=value` and `key value`\n\t\tvar name, value string\n\t\thasValue := false\n\t\tfor i, v := range line {\n\t\t\tif v == '=' || v == ' ' {\n\t\t\t\thasValue = true\n\t\t\t\tname, value = line[:i], line[i+1:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasValue == false {\n\t\t\tname = line\n\t\t}\n\n\t\t// Ignore flag when already set; arguments have precedence over file\n\t\tif f.actual[name] != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := f.formal\n\t\tflag, alreadythere := m[name]\n\t\tif !alreadythere {\n\t\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\t\tf.usage()\n\t\t\t\treturn ErrHelp\n\t\t\t}\n\t\t\treturn f.failf(\"configuration variable provided but not defined: %s\", name)\n\t\t}\n\n\t\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\t\tif hasValue {\n\t\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\t\treturn f.failf(\"invalid boolean value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// flag without value is regarded a bool\n\t\t\t\tfv.Set(\"true\")\n\t\t\t}\n\t\t} else {\n\t\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\t\treturn f.failf(\"invalid value %q for configuration variable %s: %v\", value, name, err)\n\t\t\t}\n\t\t}\n\n\t\t// update f.actual\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[string]*Flag)\n\t\t}\n\t\tf.actual[name] = flag\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/github.com/namsral/flag/flag.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/*\n\tPackage flag implements command-line flag parsing.\n\n\tUsage:\n\n\tDefine flags using flag.String(), Bool(), Int(), etc.\n\n\tThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\t\timport \"flag\"\n\t\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\tIf you like, you can bind the flag to a variable using the Var() functions.\n\t\tvar flagvar int\n\t\tfunc init() {\n\t\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t\t}\n\tOr you can create custom flags that satisfy the Value interface (with\n\tpointer receivers) and couple them to flag parsing by\n\t\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\n\tFor such flags, the default value is just the initial value of the variable.\n\n\tAfter all flags are defined, call\n\t\tflag.Parse()\n\tto parse the command line into the defined flags.\n\n\tFlags may then be used directly. If you're using the flags themselves,\n\tthey are all pointers; if you bind to variables, they're values.\n\t\tfmt.Println(\"ip has value \", *ip)\n\t\tfmt.Println(\"flagvar has value \", flagvar)\n\n\tAfter parsing, the arguments following the flags are available as the\n\tslice flag.Args() or individually as flag.Arg(i).\n\tThe arguments are indexed from 0 through flag.NArg()-1.\n\n\tCommand line flag syntax:\n\t\t-flag\n\t\t-flag=x\n\t\t-flag x  // non-boolean flags only\n\tOne or two minus signs may be used; they are equivalent.\n\tThe last form is not permitted for boolean flags because the\n\tmeaning of the command\n\t\tcmd -x *\n\twill change if there is a file called 0, false, etc.  You must\n\tuse the -flag=false form to turn off a boolean flag.\n\n\tFlag parsing stops just before the first non-flag argument\n\t(\"-\" is a non-flag argument) or after the terminator \"--\".\n\n\tInteger flags accept 1234, 0664, 0x1234 and may be negative.\n\tBoolean flags may be:\n\t\t1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False\n\tDuration flags accept any input valid for time.ParseDuration.\n\n\tThe default set of command-line flags is controlled by\n\ttop-level functions.  The FlagSet type allows one to define\n\tindependent sets of flags, such as to implement subcommands\n\tin a command-line interface. The methods of FlagSet are\n\tanalogous to the top-level functions for the command-line\n\tflag set.\n*/\npackage flag\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ErrHelp is the error returned if the -help or -h flag is invoked\n// but no such flag is defined.\nvar ErrHelp = errors.New(\"flag: help requested\")\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Get() interface{} { return bool(*b) }\n\nfunc (b *boolValue) String() string { return fmt.Sprintf(\"%v\", *b) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Get() interface{} { return int(*i) }\n\nfunc (i *intValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Get() interface{} { return int64(*i) }\n\nfunc (i *int64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Get() interface{} { return uint(*i) }\n\nfunc (i *uintValue) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Get() interface{} { return uint64(*i) }\n\nfunc (i *uint64Value) String() string { return fmt.Sprintf(\"%v\", *i) }\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\n\nfunc (s *stringValue) Get() interface{} { return string(*s) }\n\nfunc (s *stringValue) String() string { return fmt.Sprintf(\"%s\", *s) }\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Get() interface{} { return float64(*f) }\n\nfunc (f *float64Value) String() string { return fmt.Sprintf(\"%v\", *f) }\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Get() interface{} { return time.Duration(*d) }\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\n//\n// If a Value has an IsBoolFlag() bool method returning true,\n// the command-line parser makes -name equivalent to -name=true\n// rather than using the next command-line argument.\n//\n// Set is called once, in command line order, for each flag present.\ntype Value interface {\n\tString() string\n\tSet(string) error\n}\n\n// Getter is an interface that allows the contents of a Value to be retrieved.\n// It wraps the Value interface, rather than being part of it, because it\n// appeared after Go 1 and its compatibility rules. All Value types provided\n// by this package satisfy the Getter interface.\ntype Getter interface {\n\tValue\n\tGet() interface{}\n}\n\n// ErrorHandling defines how FlagSet.Parse behaves if the parse fails.\ntype ErrorHandling int\n\n// These constants cause FlagSet.Parse to behave as described if the parse fails.\nconst (\n\tContinueOnError ErrorHandling = iota // Return a descriptive error.\n\tExitOnError                          // Call os.Exit(2).\n\tPanicOnError                         // Call panic with a descriptive error.\n)\n\n// A FlagSet represents a set of defined flags. The zero value of a FlagSet\n// has no name and has ContinueOnError error handling.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\tname          string\n\tparsed        bool\n\tactual        map[string]*Flag\n\tformal        map[string]*Flag\n\tenvPrefix     string   // prefix to all env variable names\n\targs          []string // arguments after flags\n\terrorHandling ErrorHandling\n\toutput        io.Writer // nil means stderr; use out() accessor\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName     string // name as it appears on command line\n\tUsage    string // help message\n\tValue    Value  // value as set\n\tDefValue string // default value (as text); for usage message\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[string]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor _, f := range flags {\n\t\tlist[i] = f.Name\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[name]\n\t}\n\treturn result\n}\n\nfunc (f *FlagSet) out() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.formal) {\n\t\tfn(flag)\n\t}\n}\n\n// VisitAll visits the command-line flags in lexicographical order, calling\n// fn for each. It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tfor _, flag := range sortFlags(f.actual) {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order, calling fn\n// for each. It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.formal[name]\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.formal[name]\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tflag, ok := f.formal[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no such flag -%v\", name)\n\t}\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn nil\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// isZeroValue guesses whether the string represents the zero\n// value for a flag. It is not accurate but in practice works OK.\nfunc isZeroValue(flag *Flag, value string) bool {\n\t// Build a zero value of the flag's Value type, and see if the\n\t// result of calling its String method equals the value passed in.\n\t// This works unless the Value type is itself an interface type.\n\ttyp := reflect.TypeOf(flag.Value)\n\tvar z reflect.Value\n\tif typ.Kind() == reflect.Ptr {\n\t\tz = reflect.New(typ.Elem())\n\t} else {\n\t\tz = reflect.Zero(typ)\n\t}\n\tif value == z.Interface().(Value).String() {\n\t\treturn true\n\t}\n\n\tswitch value {\n\tcase \"false\":\n\t\treturn true\n\tcase \"\":\n\t\treturn true\n\tcase \"0\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\t// No explicit name, so use type if we can find one.\n\tname = \"value\"\n\tswitch flag.Value.(type) {\n\tcase boolFlag:\n\t\tname = \"\"\n\tcase *durationValue:\n\t\tname = \"duration\"\n\tcase *float64Value:\n\t\tname = \"float\"\n\tcase *intValue, *int64Value:\n\t\tname = \"int\"\n\tcase *stringValue:\n\t\tname = \"string\"\n\tcase *uintValue, *uint64Value:\n\t\tname = \"uint\"\n\t}\n\treturn\n}\n\n// PrintDefaults prints to standard error the default values of all\n// defined command-line flags in the set. See the documentation for\n// the global function PrintDefaults for more information.\nfunc (f *FlagSet) PrintDefaults() {\n\tf.VisitAll(func(flag *Flag) {\n\t\ts := fmt.Sprintf(\"  -%s\", flag.Name) // Two spaces before -; see next two comments.\n\t\tname, usage := UnquoteUsage(flag)\n\t\tif len(name) > 0 {\n\t\t\ts += \" \" + name\n\t\t}\n\t\t// Boolean flags of one ASCII letter are so common we\n\t\t// treat them specially, putting their usage on the same line.\n\t\tif len(s) <= 4 { // space, space, '-', 'x'.\n\t\t\ts += \"\\t\"\n\t\t} else {\n\t\t\t// Four spaces before the tab triggers good alignment\n\t\t\t// for both 4- and 8-space tab stops.\n\t\t\ts += \"\\n    \\t\"\n\t\t}\n\t\ts += usage\n\t\tif !isZeroValue(flag, flag.DefValue) {\n\t\t\tif _, ok := flag.Value.(*stringValue); ok {\n\t\t\t\t// put quotes on the value\n\t\t\t\ts += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\ts += fmt.Sprintf(\" (default %v)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprint(f.out(), s, \"\\n\")\n\t})\n}\n\n// PrintDefaults prints, to standard error unless configured otherwise,\n// a usage message showing the default settings of all defined\n// command-line flags.\n// For an integer valued flag x, the default output has the form\n//\t-x int\n//\t\tusage-message-for-x (default 7)\n// The usage message will appear on a separate line for anything but\n// a bool flag with a one-byte name. For bool flags, the type is\n// omitted and if the flag name is one byte the usage message appears\n// on the same line. The parenthetical default is omitted if the\n// default is the zero value for the type. The listed type, here int,\n// can be changed by placing a back-quoted name in the flag's usage\n// string; the first such item in the message is taken to be a parameter\n// name to show in the message and the back quotes are stripped from\n// the message when displayed. For instance, given\n//\tflag.String(\"I\", \"\", \"search `directory` for include files\")\n// the output will be\n//\t-I directory\n//\t\tsearch directory for include files.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tif f.name == \"\" {\n\t\tfmt.Fprintf(f.out(), \"Usage:\\n\")\n\t} else {\n\t\tfmt.Fprintf(f.out(), \"Usage of %s:\\n\", f.name)\n\t}\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// It is called when an error occurs while parsing flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument\n// after flags have been processed. Arg returns an empty string if the\n// requested element does not exist.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.Var(newBoolValue(value, p), name, usage)\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tCommandLine.Var(newBoolValue(value, p), name, usage)\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVar(p, name, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn CommandLine.Bool(name, value, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.Var(newIntValue(value, p), name, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.Var(newIntValue(value, p), name, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVar(p, name, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.Int(name, value, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.Var(newInt64Value(value, p), name, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64Var(p, name, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64(name, value, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.Var(newUintValue(value, p), name, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.Var(newUintValue(value, p), name, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVar(p, name, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.Uint(name, value, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.Var(newUint64Value(value, p), name, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64Var(p, name, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64(name, value, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.Var(newStringValue(value, p), name, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.Var(newStringValue(value, p), name, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVar(p, name, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.String(name, value, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.Var(newFloat64Value(value, p), name, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64Var(p, name, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64(name, value, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.Var(newDurationValue(value, p), name, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.Var(newDurationValue(value, p), name, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVar(p, name, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\n// The flag accepts a value acceptable to time.ParseDuration.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.Duration(name, value, usage)\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{name, usage, value, value.String()}\n\t_, alreadythere := f.formal[name]\n\tif alreadythere {\n\t\tvar msg string\n\t\tif f.name == \"\" {\n\t\t\tmsg = fmt.Sprintf(\"flag redefined: %s\", name)\n\t\t} else {\n\t\t\tmsg = fmt.Sprintf(\"%s flag redefined: %s\", f.name, name)\n\t\t}\n\t\tfmt.Fprintln(f.out(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[string]*Flag)\n\t}\n\tf.formal[name] = flag\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.Var(value, name, usage)\n}\n\n// failf prints to standard error a formatted error and usage message and\n// returns the error.\nfunc (f *FlagSet) failf(format string, a ...interface{}) error {\n\terr := fmt.Errorf(format, a...)\n\tfmt.Fprintln(f.out(), err)\n\tf.usage()\n\treturn err\n}\n\n// usage calls the Usage method for the flag set if one is specified,\n// or the appropriate default usage function otherwise.\nfunc (f *FlagSet) usage() {\n\tif f.Usage == nil {\n\t\tif f == CommandLine {\n\t\t\tUsage()\n\t\t} else {\n\t\t\tdefaultUsage(f)\n\t\t}\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// parseOne parses one flag. It reports whether a flag was seen.\nfunc (f *FlagSet) parseOne() (bool, error) {\n\tif len(f.args) == 0 {\n\t\treturn false, nil\n\t}\n\ts := f.args[0]\n\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\treturn false, nil\n\t}\n\tnumMinuses := 1\n\tif s[1] == '-' {\n\t\tnumMinuses++\n\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\tf.args = f.args[1:]\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tname := s[numMinuses:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\treturn false, f.failf(\"bad flag syntax: %s\", s)\n\t}\n\n\t// ignore go test flags\n\tif strings.HasPrefix(name, \"test.\") {\n\t\treturn false, nil\n\t}\n\n\t// it's a flag. does it have an argument?\n\tf.args = f.args[1:]\n\thasValue := false\n\tvalue := \"\"\n\tfor i := 1; i < len(name); i++ { // equals cannot be first\n\t\tif name[i] == '=' {\n\t\t\tvalue = name[i+1:]\n\t\t\thasValue = true\n\t\t\tname = name[0:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tm := f.formal\n\tflag, alreadythere := m[name] // BUG\n\tif !alreadythere {\n\t\tif name == \"help\" || name == \"h\" { // special case for nice help message.\n\t\t\tf.usage()\n\t\t\treturn false, ErrHelp\n\t\t}\n\t\treturn false, f.failf(\"flag provided but not defined: -%s\", name)\n\t}\n\tif fv, ok := flag.Value.(boolFlag); ok && fv.IsBoolFlag() { // special case: doesn't need an arg\n\t\tif hasValue {\n\t\t\tif err := fv.Set(value); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean value %q for -%s: %v\", value, name, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := fv.Set(\"true\"); err != nil {\n\t\t\t\treturn false, f.failf(\"invalid boolean flag %s: %v\", name, err)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// It must have a value, which might be the next argument.\n\t\tif !hasValue && len(f.args) > 0 {\n\t\t\t// value is the next arg\n\t\t\thasValue = true\n\t\t\tvalue, f.args = f.args[0], f.args[1:]\n\t\t}\n\t\tif !hasValue {\n\t\t\treturn false, f.failf(\"flag needs an argument: -%s\", name)\n\t\t}\n\t\tif err := flag.Value.Set(value); err != nil {\n\t\t\treturn false, f.failf(\"invalid value %q for flag -%s: %v\", value, name, err)\n\t\t}\n\t}\n\tif f.actual == nil {\n\t\tf.actual = make(map[string]*Flag)\n\t}\n\tf.actual[name] = flag\n\treturn true, nil\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name. Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help or -h were set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tf.parsed = true\n\tf.args = arguments\n\tfor {\n\t\tseen, err := f.parseOne()\n\t\tif seen {\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\t// Parse environment variables\n\tif err := f.ParseEnv(os.Environ()); err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t\treturn err\n\t}\n\n\t// Parse configuration from file\n\tvar cFile string\n\tif cf := f.formal[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cf := f.actual[DefaultConfigFlagname]; cf != nil {\n\t\tcFile = cf.Value.String()\n\t}\n\tif cFile != \"\" {\n\t\tif err := f.ParseFile(cFile); err != nil {\n\t\t\tswitch f.errorHandling {\n\t\t\tcase ContinueOnError:\n\t\t\t\treturn err\n\t\t\tcase ExitOnError:\n\t\t\t\tos.Exit(2)\n\t\t\tcase PanicOnError:\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// Parsed reports whether the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\n// The top-level functions such as BoolVar, Arg, and so on are wrappers for the\n// methods of CommandLine.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name and\n// error handling property.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t}\n\treturn f\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name, EnvironmentPrefix, and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.envPrefix = EnvironmentPrefix\n\tf.errorHandling = errorHandling\n}\n"
  },
  {
    "path": "12fa-docker-golang/chapter7/vendor/manifest",
    "content": "{\n\t\"version\": 0,\n\t\"dependencies\": [\n\t\t{\n\t\t\t\"importpath\": \"github.com/garyburd/redigo\",\n\t\t\t\"repository\": \"https://github.com/garyburd/redigo\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"908534c8b97586a4597e3fa195875d2d26502b97\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t},\n\t\t{\n\t\t\t\"importpath\": \"github.com/namsral/flag\",\n\t\t\t\"repository\": \"https://github.com/namsral/flag\",\n\t\t\t\"vcs\": \"git\",\n\t\t\t\"revision\": \"7fa59bdb55485001d702d9b6e15367cdf26bfde8\",\n\t\t\t\"branch\": \"master\",\n\t\t\t\"notests\": true\n\t\t}\n\t]\n}"
  },
  {
    "path": "12fa-docker-golang/chapter8/.gitignore",
    "content": "/app"
  },
  {
    "path": "12fa-docker-golang/chapter8/README.md",
    "content": "# Running PM2 and Docker Swarm for rolling upgrades\n\nIn order to get the `/app` folder, please run `build.sh` in the chapter7 folder.\n\nThe PM2 samples are prefixed with `pm2_`, and docker swarm with `swarm_` respectively."
  },
  {
    "path": "12fa-docker-golang/chapter8/haproxy/haproxy.cfg",
    "content": "global\n\tmaxconn 10000\n\nfrontend public\n\tbind *:80\n\tmode http\n\ttimeout client 30s\n\tdefault_backend gotwitter\n\nbackend gotwitter\n\tbalance roundrobin\n\tmode http\n\ttimeout server 5s\n\ttimeout connect 5s\n\tserver app1 pm2-gotwitter:3000 check\n\tserver app2 pm2-gotwitter:3001 check"
  },
  {
    "path": "12fa-docker-golang/chapter8/pm2_exec",
    "content": "#!/bin/bash\nNAME=\"pm2-gotwitter\"\ndocker exec -it $NAME pm2 \"$@\"\n"
  },
  {
    "path": "12fa-docker-golang/chapter8/pm2_haproxy",
    "content": "#!/bin/bash\ndocker rm -f haproxy\ndocker run -d --net=party -p 81:80 --name haproxy -v $(pwd)/haproxy:/usr/local/etc/haproxy haproxy:1.7-alpine"
  },
  {
    "path": "12fa-docker-golang/chapter8/pm2_run",
    "content": "#!/bin/bash\nNAME=\"pm2-gotwitter\"\ncp process.yml app/process.yml\ndocker rm -f $NAME\ndocker run --net=party -d --name=$NAME \\\n\t-v $(pwd)/app:/app \\\n\tkeymetrics/pm2-docker-alpine"
  },
  {
    "path": "12fa-docker-golang/chapter8/process.yml",
    "content": "apps:\n  - script: ./gotwitter\n    name: 'gotwitter'\n    interpreter: none\n    execute-command: true\n    instances: 2\n    exec_mode: fork\n    watch: false\n    out_file: /dev/stdout\n    error_file: /dev/stderr"
  },
  {
    "path": "12fa-docker-golang/digitalocean/create.sh",
    "content": "#!/bin/bash\nCHECK=$(doctl compute droplet list asx --format ID --no-header | wc -l)\nif [ \"$CHECK\" == \"0\" ]; then\n\techo \"Creating ASX droplet\"\n\tdoctl compute droplet create asx -v \\\n\t\t--image docker-16-04 \\\n\t\t--size 2gb \\\n\t\t--region ams3 \\\n\t\t--ssh-keys $(./ssh-key.sh)\nelse\n\techo \"Droplet ASX already running\"\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/destroy.sh",
    "content": "#!/bin/bash\nCHECK=$(doctl compute droplet list asx --format ID --no-header | wc -l)\nif [ \"$CHECK\" == \"0\" ]; then\n\techo \"Droplet ASX not started\"\nelse\n\techo \"Deleting droplet asx\"\n\tdoctl compute droplet delete asx -f -v\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/get-ip.sh",
    "content": "doctl compute droplet list asx --format PublicIPv4 --no-header"
  },
  {
    "path": "12fa-docker-golang/digitalocean/ssh.sh",
    "content": "ssh $(doctl compute droplet list asx --format PublicIPv4 --no-header)"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/.gitignore",
    "content": "/cloud-init\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/README.md",
    "content": "# Auto-scaling a Docker swarm\n\nThe set of scripts here create, grow or shrink a Docker Swarm by provisioning droplet\ninstances on Digital Ocean. If you haven't signed up yet, you can [use this affiliate\nlink to give you $10 in credit](https://m.do.co/c/f6a67e30a1f4).\n\nThis requires that you have [doctl](https://github.com/digitalocean/doctl) installed.\n\nThe scripts are produced for:\n\n1. [12 Factor Applications with Docker and Go](https://leanpub.com/12fa-docker-golang)\n2. [Upcoming article on scene-si.org](https://scene-si.org)\n\n## Nodes\n\nThere are two types of nodes that exist in a docker swarm.\n\n### Managers\n\nManager nodes handle the main orchestration part of the swarm cluster. You can\nhave as many manager nodes, but you need a majority to function correctly. This\nmeans if you have 3 managers, you can remove one without an outage. If you have\nfive, you can remove 2 without an outage.\n\nTo add a manager node, run:\n\n```\n./add-manager.sh\n```\n\nThis will take about 2 minutes until the first swarm is created. After that you\ncan add additional managers or worker nodes at a higher speed / concurrently.\nThe join token is being passed to the instance over a cloud-init script.\n\n### Workers\n\nWorker nodes don't get a management interface to the swarm, but just an execution.\nThis means that you can't perform any swarm actions from the workers, but the\nmanagers schedule containers for execution on them. They work, not manage.\n\nTo add a worker node, run:\n\n```\n./add-worker.sh\n```\n\nYou can have as many workers as you like, you can even have none if you don't.\nThe join token is being passed to the instance over a cloud-init script.\n\n### Removing managers\n\nRemoving a manager first demotes the manager to a worker, and then the worker\nnode is removed from the swarm, after which, the digital ocean droplet is purged.\n\nSo:\n\n1. Drain docker containers from manager,\n2. Demote manager to worker,\n3. Purge droplet,\n4. Remove node from swarm\n\nAll this can be done by running:\n\n```\n./remove-manager.sh\n```\n\nFor example:\n\n~~~\n# ./list-swarm.sh\nID                           HOSTNAME          STATUS  AVAILABILITY  MANAGER STATUS\nuoks2o8ce27dl0w1iz9upd3xz    swarm-1493615119  Ready   Active        Leader\nx1njngdyj53tbhxjtlk8ie4fh    swarm-1493615341  Ready   Active        Reachable\nybp04oaayxhv82agvfrfrraja *  swarm-1493615112  Ready   Active        Reachable\n# ./remove-manager.sh\nLeaving swarm: swarm-1493615112\nManager swarm-1493615112 demoted in the swarm.\nPurging droplet: swarm-1493615112\nswarm-1493615112\n# ./list-swarm.sh\nID                           HOSTNAME          STATUS  AVAILABILITY  MANAGER STATUS\nuoks2o8ce27dl0w1iz9upd3xz *  swarm-1493615119  Ready   Active        Leader\nx1njngdyj53tbhxjtlk8ie4fh    swarm-1493615341  Ready   Active        Reachable\n~~~\n\nAs the node is removed gracefully, the constraints about fault tolerance do not apply\nany more. The swarm size goes down, and with it, availability guarantees and constraints.\n\nBefore the manager is removed, it's availability is set to drain mode for a few seconds.\nThis should be enough for the swarm to start re-scheduling any containers to other nodes.\n\n### Removing workers\n\nRemoving a worker is just as simple as removing a manager:\n\n~~~\n./remove-worker.sh\n~~~\n\nYou can remove any number of workers without causing an outage, as long as your\nmanagers have enough capacity to start all the containers.\n\n### Destroying everything\n\nJust run `./destroy.sh` and watch the world burn.\n\n### Other\n\nThere are a few utility scripts to facilitate the functionality presented above:\n\n* `./list-managers.sh` - lists running manager nodes,\n* `./list-workers.sh` - list running worker nodes,\n* `./list-swarm.sh` - prints output of `docker node ls`, showing nodes in swarm,\n* `./list.sh` - show all digital ocean droplets running,\n* `./ssh-key.sh` - provide ssh key to digital ocean instance for logging in,\n* `./ssh.sh` - run a command on all manager nodes\n\nFor example, if you want to run `uname` on all manager nodes, you can do:\n\n~~~\n# ./ssh uname -r\n> swarm-1493616101\n4.4.0-75-generic\n> swarm-1493616219\n4.4.0-75-generic\n> swarm-1493616226\n4.4.0-75-generic\n~~~\n\n### Testing the swarm\n\nAfter spinning up the managers, you can create a service on them:\n\n~~~\n# ./ssh-one.sh docker service create --replicas 10 --name sonyflake titpetric/sonyflake\n> swarm-1493616101\nld66ax987n5nyypm1itegy6io\n~~~\n\n~~~\n# ./ssh-one.sh docker service ps sonyflake --format '{{.Node}}' \\| sort \\| uniq -c\n> swarm-1493616101\n      4 swarm-1493616101\n      3 swarm-1493616219\n      3 swarm-1493616226\n~~~\n\nAnd removing a manager:\n\n~~~\n# ./remove-manager.sh\nLeaving swarm: swarm-1493616101\nswarm-1493616101\nManager swarm-1493616101 demoted in the swarm.\nPurging droplet: swarm-1493616101\nswarm-1493616101\n~~~\n\n~~~\n# ./ssh-one.sh docker service ps sonyflake --format '{{.Node}}' -f 'desired-state=running' \\| sort \\| uniq -c\n> swarm-1493616219\n      5 swarm-1493616219\n      5 swarm-1493616226\n~~~\n\nHere we see that the containers have re-scheduled on the available managers without issue. As long\nas there is one manager left, we can remove managers without failure of the swarm.\n\n~~~\n# ./remove-manager.sh\nLeaving swarm: swarm-1493616219\nswarm-1493616219\nManager swarm-1493616219 demoted in the swarm.\nPurging droplet: swarm-1493616219\nswarm-1493616219\n~~~\n\n~~~\n# ./ssh-one.sh docker service ps sonyflake --format '{{.Node}}' -f 'desired-state=running' \\| sort \\| uniq -c\n> swarm-1493616226\n     10 swarm-1493616226\n# ./list-swarm.sh\nID                           HOSTNAME          STATUS  AVAILABILITY  MANAGER STATUS\nnaoyvnd0nu1vxegi0mplxy1sf *  swarm-1493616226  Ready   Active        Leader\n~~~\n\n### Conclusion\n\nWith the set of these scripts it's possible to provide swarm elasticity. If your load is elastic,\nyou can use the provided scripts to add and remove worker and manager nodes as needed to faster\nprocess your workloads. Depending on any monitoring rules you set up, you can create your own system\nto grow and scale your docker swarm based on a number of inputs that you monitor. This may be anything\nfrom CPU usage, to the number of items in your worker queue (or other application logic).\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/add-manager.sh",
    "content": "#!/bin/bash\nTAG=\"swarm\"\nSSH_KEY=$(./ssh-key.sh)\n\n## create tag for docker swarm\ndoctl compute tag create $TAG\n\n## see if tagged images are run yet\nIPADDR=$(doctl compute droplet list --tag-name swarm --format PublicIPv4 --no-header | head -n1)\nif [ ! -d \"cloud-init\" ]; then\n\tmkdir cloud-init\nfi\n\n## creating a swarm\nSCRIPT_CREATE=\"#!/bin/bash\nufw allow 2377/tcp\nexport PUBLIC_IPV4=\\$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)\ndocker swarm init --advertise-addr \\\"\\${PUBLIC_IPV4}:2377\\\"\"\n\necho \"$SCRIPT_CREATE\" > cloud-init/create.sh\n\n## joining a swarm\nif [ ! -z \"$IPADDR\" ]; then\n\tTOKEN=$(ssh $IPADDR docker swarm join-token -q manager)\n\tif [ -z \"$TOKEN\" ]; then\n\t\techo \"Couldn't get swarm token from running node\"\n\t\texit 1\n\tfi\n\tSCRIPT_JOIN=\"#!/bin/bash\nufw allow 2377/tcp\nexport PUBLIC_IPV4=\\$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)\ndocker swarm join --advertise-addr \\\"\\${PUBLIC_IPV4}:2377\\\" --token \\\"$TOKEN\\\" \\\"$IPADDR:2377\\\"\"\n\n\techo \"$SCRIPT_JOIN\" > cloud-init/join.sh\nfi\n\nchmod a+x cloud-init/*.sh\n\nDROPLET=\"$TAG-$(date +%s)\"\nif [ -z \"$IPADDR\" ]; then\n\t## create a new swarm manager\n\techo \"Creating a new swarm host: $DROPLET (takes about a minute)\"\n\tdoctl compute droplet create $DROPLET -v --wait \\\n\t\t--image docker-16-04 \\\n\t\t--size 2gb \\\n\t\t--tag-name $TAG \\\n\t\t--enable-private-networking \\\n\t\t--region ams3 \\\n\t\t--ssh-keys ${SSH_KEY} \\\n\t\t--user-data-file ./cloud-init/create.sh\nelse\n\t## join to existing swarm as manager\n\techo \"Adding a host to existing swarm: $DROPLET $IPADDR\"\n\tdoctl compute droplet create $DROPLET -v \\\n\t\t--image docker-16-04 \\\n\t\t--size 2gb \\\n\t\t--tag-name $TAG \\\n\t\t--enable-private-networking \\\n\t\t--region ams3 \\\n\t\t--ssh-keys ${SSH_KEY} \\\n\t\t--user-data-file ./cloud-init/join.sh\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/add-worker.sh",
    "content": "#!/bin/bash\nTAG=\"swarm-worker\"\nSSH_KEY=$(./ssh-key.sh)\n\n## create tag for docker swarm\ndoctl compute tag create $TAG\n\n## see if tagged images are run yet\nIPADDR=$(doctl compute droplet list --tag-name swarm --format PublicIPv4 --no-header | head -n1)\nif [ ! -d \"cloud-init\" ]; then\n\tmkdir cloud-init\nfi\n\n## joining a swarm\nif [ ! -z \"$IPADDR\" ]; then\n\tTOKEN=$(ssh $IPADDR docker swarm join-token -q worker)\n\tif [ -z \"$TOKEN\" ]; then\n\t\techo \"Couldn't get swarm token from running node\"\n\t\texit 1\n\tfi\n\tSCRIPT_JOIN=\"#!/bin/bash\nufw allow 2377/tcp\nexport PUBLIC_IPV4=\\$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)\ndocker swarm join --advertise-addr \\\"\\${PUBLIC_IPV4}:2377\\\" --token \\\"$TOKEN\\\" \\\"$IPADDR:2377\\\"\"\n\n\techo \"$SCRIPT_JOIN\" > cloud-init/join.sh\nfi\n\nchmod a+x cloud-init/*.sh\n\nDROPLET=\"$TAG-$(date +%s)\"\nif [ -z \"$IPADDR\" ]; then\n\techo \"To add a worker node, a manager node must exist first\"\n\texit 1\nelse\n\t## join to existing swarm as manager\n\techo \"Adding a host to existing swarm: $DROPLET $IPADDR\"\n\tdoctl compute droplet create $DROPLET -v \\\n\t\t--image docker-16-04 \\\n\t\t--size 2gb \\\n\t\t--tag-name $TAG \\\n\t\t--enable-private-networking \\\n\t\t--region ams3 \\\n\t\t--ssh-keys ${SSH_KEY} \\\n\t\t--user-data-file ./cloud-init/join.sh\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/destroy.sh",
    "content": "#!/bin/bash\nHOSTS=$(./list-workers.sh | awk '{print $1}' ; ./list-managers.sh | awk '{print $1}')\nfor HOST in $HOSTS; do\n\techo \"Deleting $HOST\"\n\tdoctl compute droplet delete $HOST -f -v\ndone\nif [ -z \"$HOSTS\" ]; then\n\techo \"Nothing to do\"\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/list-managers.sh",
    "content": "#!/bin/bash\ndoctl compute droplet list --tag-name swarm --format Name,PublicIPv4 --no-header\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/list-swarm.sh",
    "content": "#!/bin/bash\nssh $(doctl compute droplet list --tag-name swarm --format PublicIPv4 --no-header | head -n1) docker node ls\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/list-workers.sh",
    "content": "#!/bin/bash\ndoctl compute droplet list --tag-name swarm-worker --format Name,PublicIPv4 --no-header\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/list.sh",
    "content": "#!/bin/bash\ndoctl compute droplet list\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/remove-manager.sh",
    "content": "#!/bin/bash\nNODES=$(./list-managers.sh | wc -l)\nif (( \"$NODES\" < 2 )); then\n\techo \"We need at least 2 managers to remove one manager\"\n\texit 1\nfi\n\nNODE=($(./list-managers.sh | head -n1))\nNODE_NAME=${NODE[0]}\nNODE_ADDR=${NODE[1]}\nif [ ! -z \"${NODE_ADDR}\" ]; then\n\techo \"Leaving swarm: $NODE\"\n\tssh $NODE_ADDR docker node update --availability drain $NODE_NAME\n\tsleep 2\n\tssh $NODE_ADDR docker node demote $NODE_NAME\n\techo \"Purging droplet: $NODE_NAME\"\n\tdoctl compute droplet delete $NODE_NAME -f -v\nfi\n\nMGR=$(./list-managers.sh | tail -n1 | awk '{print $2}')\nssh $MGR docker node rm $NODE_NAME -f\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/remove-worker.sh",
    "content": "#!/bin/bash\nNODE=($(./list-workers.sh | head -n1))\nNODE_NAME=${NODE[0]}\nNODE_ADDR=${NODE[1]}\nif [ ! -z \"${NODE_ADDR}\" ]; then\n\techo \"Leaving swarm: $NODE\"\n\tssh $NODE_ADDR docker node update --availability drain $NODE_NAME\n\tsleep 2\n\tssh $NODE_ADDR docker node rm $NODE_NAME -f\n\techo \"Purging droplet: $NODE_NAME\"\n\tdoctl compute droplet delete $NODE_NAME -f -v\nelse\n\techo \"No workers to remove\"\nfi"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/ssh-key.sh",
    "content": "echo \"3e:12:d8:48:de:e4:79:f0:2f:80:8b:c7:c7:26:9c:65\"\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/ssh-one.sh",
    "content": "#!/bin/bash\nNODE=($(./list-managers.sh | head -n1))\necho \"> ${NODE[0]}\"\nssh ${NODE[1]} \"$@\"\n"
  },
  {
    "path": "12fa-docker-golang/digitalocean/swarm/ssh.sh",
    "content": "#!/bin/bash\nIFS=$'\\n' NODES=$(./list-managers.sh)\nfor NODE in $NODES; do\n\tIFS=' ' NODE=($NODE)\n\techo \"> ${NODE[0]}\"\n\tssh ${NODE[1]} \"$@\"\ndone"
  },
  {
    "path": "12fa-docker-golang/scaleway/.gitignore",
    "content": ".scwrc\n"
  },
  {
    "path": "12fa-docker-golang/scaleway/create.sh",
    "content": "#!/bin/bash\nsource swarm/include/common.sh\necho \"Creating server asx\"\nscw _patch $(scw create --name=asx --commercial-type=X64-2GB ubuntu-xenial | sed 's/\\-.*//g') tags=\"docker\"\necho \"Starting server asx\"\nscw start -w asx\nADDR=$(./get-ip.sh)\nscp swarm/scripts/* $ADDR:/root\nssh $ADDR /root/bootstrap.sh\necho \"Finished.\""
  },
  {
    "path": "12fa-docker-golang/scaleway/destroy.sh",
    "content": "#!/bin/bash\nsource swarm/include/common.sh\necho \"Stop and remove server asx\"\nscw stop -t asx\n"
  },
  {
    "path": "12fa-docker-golang/scaleway/get-ip.sh",
    "content": "#!/bin/bash\nsource swarm/include/common.sh\nscw inspect asx | jq -r '.[0].public_ip.address'"
  },
  {
    "path": "12fa-docker-golang/scaleway/install.sh",
    "content": "#!/bin/bash\nADDR=$(./get-ip.sh)\nscp scripts/* $ADDR:/root\nssh $ADDR /root/bootstrap.sh"
  },
  {
    "path": "12fa-docker-golang/scaleway/list.sh",
    "content": "#!/bin/bash\nsource swarm/include/common.sh\nscw ps -a\n"
  },
  {
    "path": "12fa-docker-golang/scaleway/ssh.sh",
    "content": "ssh $(./get-ip.sh)"
  },
  {
    "path": "12fa-docker-golang/scaleway/swarm/include/common.sh",
    "content": "function scw {\n\tif [ ! -f \".scwrc\" ]; then\n\t\techo '{}' > .scwrc && chmod 600 .scwrc\n\t\tdocker run -it --rm --volume=$(pwd)/.scwrc:/.scwrc scaleway/cli login\n\tfi\n\tdocker run -it --rm --volume=$(pwd)/.scwrc:/.scwrc scaleway/cli \"$@\"\n}"
  },
  {
    "path": "12fa-docker-golang/scaleway/swarm/scripts/bootstrap.sh",
    "content": "#!/bin/bash\nexport DEBIAN_FRONTEND=noninteractive\n\n# update APT caches\napt-get update\n\n# install required pkgs\napt-get -qyy install \\\n    apt-transport-https \\\n    ca-certificates \\\n    curl \\\n    software-properties-common\n\n# install docker repos\n\nARCH=\"armhf\"\nif [ \"$(uname -m)\" == \"x86_64\" ]; then\n\tARCH=\"amd64\"\nfi\n\nadd-apt-repository \\\n   \"deb [arch=$ARCH] https://download.docker.com/linux/ubuntu \\\n   $(lsb_release -cs) \\\n   stable\"\nadd-apt-repository \\\n   \"deb [arch=$ARCH] https://download.docker.com/linux/ubuntu \\\n   $(lsb_release -cs) \\\n   edge\"\n\n# install public key\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -\n\n# install docker\napt-get update && apt-get -qyy install docker-ce"
  },
  {
    "path": "12fa-docker-golang/services/mysql/.gitignore",
    "content": "/backups\n/data\n"
  },
  {
    "path": "12fa-docker-golang/services/mysql/bin/run",
    "content": "#!/bin/bash\n#\n# services/mysql/bin/run -> MYPATH= services/mysql, NAME= mysql\n#\nMYPATH=$(dirname $(dirname $(readlink -f $0)))\nNAME=$(basename $MYPATH)\nif [ ! -d \"$MYPATH/data\" ]; then\n    mkdir -p $MYPATH/data\nfi\n\nDOCKER_IMAGE=\"percona:latest\"\n\n#\n# you can use this image if you want\n# percona packaged with xtrabackup\n#\n#DOCKER_IMAGE=\"titpetric/percona-xtrabackup\"\n\n#\n# generate root password to file for convenience\n#\nPASSWORD=\"default\"\nperl -pi -e \"s/^password.+$/password=$PASSWORD/g\" ../conf/.my.cnf\n\nif [ ! -d \"$MYPATH/data\" ]; then\n    mkdir -p $MYPATH/data\nfi\n\n# stop and remove existing container and start a new one\n\ndocker stop $NAME\ndocker rm $NAME\ndocker run --restart=always \\\n    -h $NAME \\\n    --name $NAME \\\n    --net=party \\\n    -v /src/$NAME/backups:/backups \\\n    -v /src/$NAME/conf/conf.d:/etc/mysql/conf.d \\\n    -v /src/$NAME/data:/var/lib/mysql \\\n    -e MYSQL_ROOT_PASSWORD=$PASSWORD \\\n    -d $DOCKER_IMAGE\ndocker cp /src/$NAME/conf/.my.cnf $NAME:/root/"
  },
  {
    "path": "12fa-docker-golang/services/mysql/conf/.my.cnf",
    "content": "[client]\nuser=root\npassword=default\n"
  },
  {
    "path": "12fa-docker-golang/services/mysql/conf/conf.d/.placeholder",
    "content": ""
  },
  {
    "path": "12fa-docker-golang/services/mysql/conf/conf.d/skipresolve.conf",
    "content": "[mysqld]\nskip-name-resolve\n"
  },
  {
    "path": "12fa-docker-golang/services/redis/bin/redis-cli",
    "content": "#!/bin/bash\nMYPATH=$(dirname $(dirname $(readlink -f $0)))\nNAME=$(basename $MYPATH)\ndocker exec -it $NAME redis-cli \"$@\""
  },
  {
    "path": "12fa-docker-golang/services/redis/bin/run",
    "content": "#!/bin/bash\nMYPATH=$(dirname $(dirname $(readlink -f $0)))\nNAME=$(basename $MYPATH)\nDOCKER_IMAGE=$(<$(dirname $(dirname $(readlink -f $0)))/docker.image)\n\n# remove redis warnings\nsysctl vm.overcommit_memory=1\necho never > /sys/kernel/mm/transparent_hugepage/enabled\n\nSYSCTL=\"--sysctl net.core.somaxconn=4096\"\n\necho -n \"$NAME: \"\ndocker stop redis && docker rm redis\ndocker run --restart=always -h $NAME --name $NAME $SYSCTL --net=party -d $DOCKER_IMAGE </dev/null\n"
  },
  {
    "path": "12fa-docker-golang/services/redis/bin/shutdown",
    "content": "#!/bin/bash\nMYPATH=$(dirname $(dirname $(readlink -f $0)))\nNAME=$(basename $MYPATH)\ndocker rm -f $NAME\nexit 0"
  },
  {
    "path": "12fa-docker-golang/services/redis/docker.image",
    "content": "redis:3.2-alpine"
  },
  {
    "path": "12fa-docker-golang/services/registry/.gitignore",
    "content": "/storage\n"
  },
  {
    "path": "12fa-docker-golang/services/registry/bin/purge",
    "content": "#!/bin/bash\nNAME=\"registry\"\nSTORAGE=$(dirname $(dirname $(readlink -f $0)))/storage\n# clean up container\ndocker rm -f $NAME\n# remove stored images (purge)\nrm -rf $STORAGE\n"
  },
  {
    "path": "12fa-docker-golang/services/registry/bin/run",
    "content": "#!/bin/bash\nNAME=\"registry\"\nDOCKER_IMAGE=\"registry:2\"\n# by default storage is in ../storage\nSTORAGE=$(dirname $(dirname $(readlink -f $0)))/storage\nif [ ! -d \"$STORAGE\" ]; then\n\tmkdir $STORAGE\nfi\n# stop and remove existing instance\ndocker stop $NAME && docker rm $NAME\ndocker run -d -p 5000:5000 --restart=always --name $NAME -v $STORAGE:/var/lib/registry $DOCKER_IMAGE\n"
  },
  {
    "path": "12fa-docker-golang/shell/.gitignore",
    "content": "/data\n"
  },
  {
    "path": "12fa-docker-golang/shell/docker_network",
    "content": "#!/bin/bash\n#\n# this creates a custom docker \"bridge\" network named \"party\"\n#\ndocker network create -d bridge --subnet 172.25.0.0/24 party\n"
  },
  {
    "path": "12fa-docker-golang/shell/gogs",
    "content": "#!/bin/bash\nNAME=\"gogs\"\nAPP_DIR=$(dirname $(readlink -f $0))\nmkdir -p ${APP_DIR}/data/$NAME\ndocker stop $NAME\ndocker rm $NAME\ndocker run -d --net=party --restart=always --name=$NAME -h $NAME -p 10022:22 -p 3000:3000 -v ${APP_DIR}/data/$NAME:/data gogs/gogs"
  },
  {
    "path": "12fa-docker-golang/shell/gogs_backup",
    "content": "#!/bin/bash\nNAME=\"gogs\"\ndocker stop $NAME\ncd data && tar -zcvf gogs-backup-$(date +\"%Y%m%d\").tgz gogs/ && cd ..\ndocker start $NAME\n"
  },
  {
    "path": "12fa-docker-golang/shell/mysql",
    "content": "#!/bin/bash\nNAME=\"mysql\"\nAPP_DIR=$(dirname $(readlink -f $0))\nmkdir -p ${APP_DIR}/data/$NAME\ndocker stop $NAME\ndocker rm $NAME\n\nDOCKERFILE=\"titpetric/percona-xtrabackup\"\n\ndocker stop $NAME\ndocker rm $NAME\ndocker run --restart=always \\\n    -h $NAME \\\n    --name $NAME \\\n    --net=party \\\n    -v ${APP_DIR}/data/$NAME/data:/var/lib/mysql \\\n    -e MYSQL_ALLOW_EMPTY_PASSWORD=\"yes\" \\\n    -d $DOCKERFILE\n"
  },
  {
    "path": "LICENSE",
    "content": "All the files here are provided as-is, you may use them in any way you like."
  },
  {
    "path": "README.md",
    "content": "# books\nSamples from my published works\n"
  },
  {
    "path": "api-foundations/.gitignore",
    "content": "/*/src\n/*/pkg\n"
  },
  {
    "path": "api-foundations/chapter1/hello_world.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Printf(\"Hello world!\\n\")\n}\n"
  },
  {
    "path": "api-foundations/chapter1/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter2/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter2/chapter2b.go",
    "content": "package main\n\nimport \"foundations/bootstrap\"\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Printf(\"Time: %.4f\\n\", bootstrap.Now())\n\tfmt.Printf(\"Hello world!\\n\")\n\tfmt.Printf(\"Time: %.4f\\n\", bootstrap.Now())\n\n\tbootstrap.StartTime = 0\n\tfmt.Printf(\"Time after reset: %.4f\\n\", bootstrap.Now())\n}\n"
  },
  {
    "path": "api-foundations/chapter2/reflection.go",
    "content": "package main\n\nimport \"fmt\"\nimport \"reflect\"\n\ntype Test1 struct {\n\tA string\n}\n\nfunc main() {\n\tvar t interface{}\n\tt = Test1{\"Hello world!\"}\n\n\tdata := reflect.ValueOf(t)\n\tfmt.Printf(\"%s\\n\", data.FieldByName(\"A\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter2/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/davecgh/go-spew/spew\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter2/type1.go",
    "content": "package main\n\ntype Dog struct {\n\tname string\n}\ntype Cat struct {\n\tname           string\n\thypoallergenic bool\n}\n\nfunc main() {\n\tdog := Dog{name: \"Rex\"}\n\tcat := Cat(dog)\n}\n"
  },
  {
    "path": "api-foundations/chapter2/type2.go",
    "content": "package main\n\ntype Dog struct {\n\tname string\n}\ntype Cat struct {\n\tname           string\n\thypoallergenic bool\n}\n\nfunc main() {\n\tcat := Cat{name: \"Whiskers\"}\n\tdog := Dog(cat)\n}\n"
  },
  {
    "path": "api-foundations/chapter2/type3.go",
    "content": "package main\n\nimport \"fmt\"\n\ntype Dog struct {\n\tname  string\n\tBreed string\n}\n\ntype Cat struct {\n\tname           string\n\thypoallergenic bool\n}\n\ntype Pet interface {\n\tgetName() string\n}\n\nfunc (d Dog) getName() string {\n\treturn d.name\n}\nfunc (c Cat) getName() string {\n\treturn c.name\n}\n\nfunc main() {\n\tvar pet Pet\n\n\tpet = Cat{name: \"Whiskers\"}\n\tfmt.Printf(\"Cat name: %s, pet %#v\\n\", pet.getName(), pet)\n\n\tpet = Dog{name: \"Winston\", Breed: \"Samoyed\"}\n\tfmt.Printf(\"Dog name: %s, pet %#v\\n\", pet.getName(), pet)\n}\n"
  },
  {
    "path": "api-foundations/chapter2/type5.go",
    "content": "package main\n\nimport \"github.com/davecgh/go-spew/spew\"\n\ntype Dog struct {\n\tname  string\n\tbreed string\n}\ntype Cat struct {\n\tname           string\n\thypoallergenic bool\n}\ntype Petstore struct {\n\tname string\n\tpets []interface{}\n}\n\nfunc main() {\n\tp := Petstore{}\n\tp.pets = append(p.pets, &Dog{name: \"Winston\"})\n\tp.pets = append(p.pets, &Cat{name: \"Whiskers\"})\n\tspew.Dump(p)\n}\n"
  },
  {
    "path": "api-foundations/chapter3/example1.go",
    "content": "package main\n\nimport \"fmt\"\nimport \"encoding/json\"\n\ntype Petstore struct {\n\tName     string `json:\"name\"`\n\tLocation string `json:\"location\"`\n\tDogs     []*Pet `json:\"dogs\"`\n\tCats     []*Pet `json:\"cats\"`\n}\n\ntype Pet struct {\n\tName  string `json:\"name\"`\n\tBreed string `json:\"breed\"`\n}\n\ntype PetStoreList []*Petstore\n\nfunc main() {\n\tpetstorelist := PetStoreList{}\n\tpetstore := &Petstore{\n\t\tName:     \"Fuzzy's\",\n\t\tLocation: \"New York, 5th and Broadway\",\n\t}\n\tpetstore.Dogs = append(petstore.Dogs,\n\t\t&Pet{\n\t\t\tName:  \"Whiskers\",\n\t\t\tBreed: \"Pomeranian\",\n\t\t},\n\t)\n\tpetstore.Dogs = append(petstore.Dogs,\n\t\t&Pet{Name: \"Trinity\"},\n\t)\n\tpetstorelist = append(petstorelist, petstore)\n\n\tjsonString, _ := json.MarshalIndent(petstorelist, \"\", \"\\t\")\n\tfmt.Printf(\"%s\", jsonString)\n}\n"
  },
  {
    "path": "api-foundations/chapter3/example1.json",
    "content": "[\r\n  {\r\n    \"name\": \"Fuzzy's\",\r\n    \"location\": \"New York, 5th and Broadway\",\r\n    \"dogs\": [\r\n      {\r\n        \"name\": \"Whiskers\",\r\n        \"breed\": \"Pomeranian\"\r\n      },\r\n      {\r\n        \"name\": \"Trinity\",\r\n        \"breed\": \"\"\r\n      }\r\n    ],\r\n    \"cats\": null\r\n  }\r\n]"
  },
  {
    "path": "api-foundations/chapter3/example2.go",
    "content": "package main\n\nimport \"fmt\"\nimport \"encoding/json\"\n\ntype Petstore struct {\n\tName     string `json:\"name\"`\n\tLocation string `json:\"location\"`\n\tDogs     []*Pet `json:\"dogs,omitempty\"`\n\tCats     []*Pet `json:\"cats,omitempty\"`\n}\n\ntype Pet struct {\n\tName  string `json:\"name\"`\n\tBreed string `json:\"breed,omitempty\"`\n}\n\ntype PetStoreList []*Petstore\n\nfunc main() {\n\n\tpetstorelist := PetStoreList{}\n\n\tpetstore := &Petstore{Name: \"Fuzzy's\", Location: \"New York, 5th and Broadway\"}\n\n\tpetstore.Dogs = append(petstore.Dogs, &Pet{Name: \"Whiskers\", Breed: \"Pomeranian\"})\n\tpetstore.Dogs = append(petstore.Dogs, &Pet{Name: \"Trinity\"})\n\n\tpetstorelist = append(petstorelist, petstore)\n\n\tjsonString, _ := json.MarshalIndent(petstorelist, \"\", \"\\t\")\n\n\tfmt.Printf(\"%s\", jsonString)\n}\n"
  },
  {
    "path": "api-foundations/chapter3/example2.json",
    "content": "[\r\n  {\r\n    \"name\": \"Fuzzy's\",\r\n    \"location\": \"New York, 5th and Broadway\",\r\n    \"dogs\": [\r\n      {\r\n        \"name\": \"Whiskers\",\r\n        \"breed\": \"Pomeranian\"\r\n      },\r\n      {\r\n        \"name\": \"Trinity\"\r\n      }\r\n    ]\r\n  }\r\n]"
  },
  {
    "path": "api-foundations/chapter3/example3.go",
    "content": "package main\n\nimport \"fmt\"\nimport \"io/ioutil\"\nimport \"encoding/json\"\nimport \"github.com/davecgh/go-spew/spew\"\n\ntype Petstore struct {\n\tName     string `json:\"name\"`\n\tLocation string `json:\"location\"`\n\tDogs     []*Pet `json:\"dogs,omitempty\"`\n\tCats     []*Pet `json:\"cats,omitempty\"`\n}\n\ntype Pet struct {\n\tName  string `json:\"name\"`\n\tBreed string `json:\"breed,omitempty\"`\n}\n\ntype PetStoreList []*Petstore\n\nfunc main() {\n\tpetstorelist := PetStoreList{}\n\n\tjsonBlob, err := ioutil.ReadFile(\"example2.json\")\n\tif err != nil {\n\t\tfmt.Printf(\"Error reading file: %s\\n\", err)\n\t}\n\n\terr = json.Unmarshal(jsonBlob, &petstorelist)\n\tif err != nil {\n\t\tfmt.Printf(\"Error decoding json: %s\\n\", err)\n\t}\n\n\tspew.Dump(petstorelist)\n}\n"
  },
  {
    "path": "api-foundations/chapter3/example3.txt",
    "content": "(main.PetStoreList) (len=1 cap=4) {\n (*main.Petstore)(0xc820012370)({\n  Name: (string) (len=7) \"Fuzzy's\",\n  Location: (string) (len=26) \"New York, 5th and Broadway\",\n  Dogs: ([]*main.Pet) (len=2 cap=4) {\n   (*main.Pet)(0xc82000a360)({\n    Name: (string) (len=8) \"Whiskers\",\n    Breed: (string) (len=10) \"Pomeranian\"\n   }),\n   (*main.Pet)(0xc82000a3c0)({\n    Name: (string) (len=7) \"Trinity\",\n    Breed: (string) \"\"\n   })\n  },\n  Cats: ([]*main.Pet) <nil>\n })\n}\n"
  },
  {
    "path": "api-foundations/chapter3/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/davecgh/go-spew/spew\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter4/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\ngvt fetch \"github.com/bmizerany/pat\"\ngvt fetch \"github.com/gorilla/mux\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter4/server1.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tfmt.Fprintf(w, \"Hello world!\")\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\thttp.HandleFunc(\"/\", requestHandler)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4/server2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tfmt.Fprintf(w, \"Hello world!\")\n}\n\nfunc requestHelloHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tval := r.FormValue(\"name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\")\n\t}\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\thttp.HandleFunc(\"/\", requestHandler)\n\thttp.HandleFunc(\"/hello\", requestHelloHandler)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4/server3.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/bmizerany/pat\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tfmt.Fprintf(w, \"Hello world!\")\n}\n\nfunc requestHelloHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tval := r.URL.Query().Get(\":name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\")\n\t}\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\n\tm := pat.New()\n\tm.Get(\"/hello/:name\", http.HandlerFunc(requestHelloHandler))\n\tm.Get(\"/\", http.HandlerFunc(requestHandler))\n\n\thttp.Handle(\"/\", m)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4/server4.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/bmizerany/pat\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tfmt.Fprintf(w, \"Hello world!\")\n}\n\nfunc requestHelloHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tval := r.URL.Query().Get(\":name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\")\n\t}\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\n\tm := pat.New()\n\tm.Get(\"/hey/:name/\", http.HandlerFunc(requestHelloHandler))\n\tm.Get(\"/hey/\", http.HandlerFunc(requestHelloHandler))\n\tm.Get(\"/\", http.HandlerFunc(requestHandler))\n\n\thttp.Handle(\"/\", m)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4/server5.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/gorilla/mux\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\tfmt.Fprintf(w, \"Hello world!\")\n}\n\nfunc requestHelloHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"Request: %s\\n\", r.URL.Path)\n\n\tvars := mux.Vars(r)\n\tname, ok := vars[\"name\"]\n\tif ok && name != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\", name)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\")\n\t}\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\n\tm := mux.NewRouter()\n\n\they := m.PathPrefix(\"/hey\").Subrouter()\n\n\they.HandleFunc(\"/{name}/\", requestHelloHandler)\n\they.HandleFunc(\"/{name}\", requestHelloHandler)\n\they.HandleFunc(\"/\", requestHelloHandler)\n\t// hey.HandleFunc(\"/\", requestHelloHandler);\n\n\thttp.Handle(\"/\", m)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/Gopkg.toml",
    "content": "# Gopkg.toml example\n#\n# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md\n# for detailed Gopkg.toml documentation.\n#\n# required = [\"github.com/user/thing/cmd/thing\"]\n# ignored = [\"github.com/user/project/pkgX\", \"bitbucket.org/user/project/pkgA/pkgY\"]\n#\n# [[constraint]]\n#   name = \"github.com/user/project\"\n#   version = \"1.0.0\"\n#\n# [[constraint]]\n#   name = \"github.com/user/project2\"\n#   branch = \"dev\"\n#   source = \"github.com/myfork/project2\"\n#\n# [[override]]\n#  name = \"github.com/x/y\"\n#  version = \"2.4.0\"\n\n\n[[constraint]]\n  name = \"github.com/go-chi/chi\"\n  version = \"3.3.2\"\n"
  },
  {
    "path": "api-foundations/chapter4b/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\ndep ensure\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter4b/server1.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n)\n\nfunc requestHandler(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintf(w, \"The current time is: %s\\n\", time.Now())\n}\n\nfunc main() {\n\tfmt.Println(\"Starting server on port :3000\")\n\thttp.HandleFunc(\"/\", requestHandler)\n\terr := http.ListenAndServe(\":3000\", nil)\n\tif err != nil {\n\t\tfmt.Println(\"ListenAndServe:\", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/server2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n)\n\nfunc requestTime(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintf(w, \"The current time is: %s\\n\", time.Now())\n}\n\nfunc requestSay(w http.ResponseWriter, r *http.Request) {\n\tval := r.FormValue(\"name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\\n\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\\n\")\n\t}\n}\n\nfunc main() {\n\tfmt.Println(\"Starting server on port :3000\")\n\n\thttp.HandleFunc(\"/time\", requestTime)\n\thttp.HandleFunc(\"/say\", requestSay)\n\n\terr := http.ListenAndServe(\":3000\", nil)\n\tif err != nil {\n\t\tfmt.Println(\"ListenAndServe:\", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/server3.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc requestTime(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintf(w, \"The current time is: %s\\n\", time.Now())\n}\n\nfunc requestSay(w http.ResponseWriter, r *http.Request) {\n\tval := chi.URLParam(r, \"name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\\n\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\\n\")\n\t}\n}\n\nfunc main() {\n\tfmt.Println(\"Starting server on port :3000\")\n\n\tr := chi.NewRouter()\n\tr.Use(middleware.Logger)\n\n\tr.Get(\"/time\", requestTime)\n\tr.Route(\"/say\", func(r chi.Router) {\n\t\tr.Get(\"/{name}\", requestSay)\n\t\tr.Get(\"/\", requestSay)\n\t})\n\n\terr := http.ListenAndServe(\":3000\", r)\n\tif err != nil {\n\t\tfmt.Println(\"ListenAndServe:\", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/server4.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/cors\"\n)\n\nfunc requestTime(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintf(w, \"The current time is: %s\\n\", time.Now())\n}\n\nfunc requestSay(w http.ResponseWriter, r *http.Request) {\n\tval := chi.URLParam(r, \"name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\\n\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\\n\")\n\t}\n}\n\nfunc main() {\n\tfmt.Println(\"Starting server on port :3000\")\n\n\tr := chi.NewRouter()\n\tcors := cors.New(cors.Options{\n\t\tAllowedOrigins:   []string{\"*\"},\n\t\tAllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"},\n\t\tAllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n\t\tAllowCredentials: true,\n\t\tMaxAge:           300, // Maximum value not ignored by any of major browsers\n\t})\n\tr.Use(cors.Handler)\n\tr.Use(middleware.Logger)\n\n\tr.Get(\"/time\", requestTime)\n\tr.Route(\"/say\", func(r chi.Router) {\n\t\tr.Get(\"/{name}\", requestSay)\n\t\tr.Get(\"/\", requestSay)\n\t})\n\n\terr := http.ListenAndServe(\":3000\", r)\n\tif err != nil {\n\t\tfmt.Println(\"ListenAndServe:\", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/.gitignore",
    "content": ".idea\n*.sw?\n.vscode\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.7.x\n  - 1.8.x\n  - 1.9.x\n\ninstall:\n  - go get -u golang.org/x/tools/cmd/goimports\n  - go get -u github.com/golang/lint/golint\n\nscript:\n  - go get -d -t ./...\n  - go vet ./...\n  - golint ./...\n  - go test ./...\n  - >\n    goimports -d -e ./ | grep '.*' && { echo; echo \"Aborting due to non-empty goimports output.\"; exit 1; } || :\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/CHANGELOG.md",
    "content": "# Changelog\n\n## v3.3.2 (2017-12-22)\n\n- Support to route trailing slashes on mounted sub-routers (#281)\n- middleware: new `ContentCharset` to check matching charsets. Thank you\n  @csucu for your community contribution!\n\n\n## v3.3.1 (2017-11-20)\n\n- middleware: new `AllowContentType` handler for explicit whitelist of accepted request Content-Types\n- middleware: new `SetHeader` handler for short-hand middleware to set a response header key/value\n- Minor bug fixes\n\n\n## v3.3.0 (2017-10-10)\n\n- New chi.RegisterMethod(method) to add support for custom HTTP methods, see _examples/custom-method for usage\n- Deprecated LINK and UNLINK methods from the default list, please use `chi.RegisterMethod(\"LINK\")` and `chi.RegisterMethod(\"UNLINK\")` in an `init()` function\n\n\n## v3.2.1 (2017-08-31)\n\n- Add new `Match(rctx *Context, method, path string) bool` method to `Routes` interface\n  and `Mux`. Match searches the mux's routing tree for a handler that matches the method/path\n- Add new `RouteMethod` to `*Context`\n- Add new `Routes` pointer to `*Context`\n- Add new `middleware.GetHead` to route missing HEAD requests to GET handler\n- Updated benchmarks (see README)\n\n\n## v3.1.5 (2017-08-02)\n\n- Setup golint and go vet for the project\n- As per golint, we've redefined `func ServerBaseContext(h http.Handler, baseCtx context.Context) http.Handler`\n  to `func ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler`\n\n\n## v3.1.0 (2017-07-10)\n\n- Fix a few minor issues after v3 release\n- Move `docgen` sub-pkg to https://github.com/go-chi/docgen\n- Move `render` sub-pkg to https://github.com/go-chi/render\n- Add new `URLFormat` handler to chi/middleware sub-pkg to make working with url mime \n  suffixes easier, ie. parsing `/articles/1.json` and `/articles/1.xml`. See comments in\n  https://github.com/go-chi/chi/blob/master/middleware/url_format.go for example usage.\n\n\n## v3.0.0 (2017-06-21)\n\n- Major update to chi library with many exciting updates, but also some *breaking changes*\n- URL parameter syntax changed from `/:id` to `/{id}` for even more flexible routing, such as\n  `/articles/{month}-{day}-{year}-{slug}`, `/articles/{id}`, and `/articles/{id}.{ext}` on the\n  same router\n- Support for regexp for routing patterns, in the form of `/{paramKey:regExp}` for example:\n  `r.Get(\"/articles/{name:[a-z]+}\", h)` and `chi.URLParam(r, \"name\")`\n- Add `Method` and `MethodFunc` to `chi.Router` to allow routing definitions such as\n  `r.Method(\"GET\", \"/\", h)` which provides a cleaner interface for custom handlers like\n  in `_examples/custom-handler`\n- Deprecating `mux#FileServer` helper function. Instead, we encourage users to create their\n  own using file handler with the stdlib, see `_examples/fileserver` for an example\n- Add support for LINK/UNLINK http methods via `r.Method()` and `r.MethodFunc()`\n- Moved the chi project to its own organization, to allow chi-related community packages to\n  be easily discovered and supported, at: https://github.com/go-chi\n- *NOTE:* please update your import paths to `\"github.com/go-chi/chi\"`\n- *NOTE:* chi v2 is still available at https://github.com/go-chi/chi/tree/v2\n\n\n## v2.1.0 (2017-03-30)\n\n- Minor improvements and update to the chi core library\n- Introduced a brand new `chi/render` sub-package to complete the story of building\n  APIs to offer a pattern for managing well-defined request / response payloads. Please\n  check out the updated `_examples/rest` example for how it works.\n- Added `MethodNotAllowed(h http.HandlerFunc)` to chi.Router interface\n\n\n## v2.0.0 (2017-01-06)\n\n- After many months of v2 being in an RC state with many companies and users running it in\n  production, the inclusion of some improvements to the middlewares, we are very pleased to\n  announce v2.0.0 of chi.\n\n\n## v2.0.0-rc1 (2016-07-26)\n\n- Huge update! chi v2 is a large refactor targetting Go 1.7+. As of Go 1.7, the popular\n  community `\"net/context\"` package has been included in the standard library as `\"context\"` and\n  utilized by `\"net/http\"` and `http.Request` to managing deadlines, cancelation signals and other\n  request-scoped values. We're very excited about the new context addition and are proud to\n  introduce chi v2, a minimal and powerful routing package for building large HTTP services,\n  with zero external dependencies. Chi focuses on idiomatic design and encourages the use of \n  stdlib HTTP handlers and middlwares.\n- chi v2 deprecates its `chi.Handler` interface and requires `http.Handler` or `http.HandlerFunc`\n- chi v2 stores URL routing parameters and patterns in the standard request context: `r.Context()`\n- chi v2 lower-level routing context is accessible by `chi.RouteContext(r.Context()) *chi.Context`,\n  which provides direct access to URL routing parameters, the routing path and the matching\n  routing patterns.\n- Users upgrading from chi v1 to v2, need to:\n  1. Update the old chi.Handler signature, `func(ctx context.Context, w http.ResponseWriter, r *http.Request)` to\n     the standard http.Handler: `func(w http.ResponseWriter, r *http.Request)`\n  2. Use `chi.URLParam(r *http.Request, paramKey string) string`\n     or `URLParamFromCtx(ctx context.Context, paramKey string) string` to access a url parameter value\n\n\n## v1.0.0 (2016-07-01)\n\n- Released chi v1 stable https://github.com/go-chi/chi/tree/v1.0.0 for Go 1.6 and older.\n\n\n## v0.9.0 (2016-03-31)\n\n- Reuse context objects via sync.Pool for zero-allocation routing [#33](https://github.com/go-chi/chi/pull/33)\n- BREAKING NOTE: due to subtle API changes, previously `chi.URLParams(ctx)[\"id\"]` used to access url parameters\n  has changed to: `chi.URLParam(ctx, \"id\")`\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/CONTRIBUTING.md",
    "content": "# Contributing\n\n## Prerequisites\n\n1. [Install Go][go-install].\n2. Download the sources and switch the working directory:\n\n    ```bash\n    go get -u -d github.com/go-chi/chi\n    cd $GOPATH/src/github.com/go-chi/chi\n    ```\n\n## Submitting a Pull Request\n\nA typical workflow is:\n\n1. [Fork the repository.][fork] [This tip maybe also helpful.][go-fork-tip]\n2. [Create a topic branch.][branch]\n3. Add tests for your change.\n4. Run `go test`. If your tests pass, return to the step 3.\n5. Implement the change and ensure the steps from the previous step pass.\n6. Run `goimports -w .`, to ensure the new code conforms to Go formatting guideline.\n7. [Add, commit and push your changes.][git-help]\n8. [Submit a pull request.][pull-req]\n\n[go-install]: https://golang.org/doc/install\n[go-fork-tip]: http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html\n[fork]: https://help.github.com/articles/fork-a-repo\n[branch]: http://learn.github.com/p/branching.html\n[git-help]: https://guides.github.com\n[pull-req]: https://help.github.com/articles/using-pull-requests\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/LICENSE",
    "content": "Copyright (c) 2015-present Peter Kieltyka (https://github.com/pkieltyka), Google Inc.\n\nMIT License\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": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/README.md",
    "content": "# <img alt=\"chi\" src=\"https://cdn.rawgit.com/go-chi/chi/master/_examples/chi.svg\" width=\"220\" />\n\n\n[![GoDoc Widget]][GoDoc] [![Travis Widget]][Travis]\n\n`chi` is a lightweight, idiomatic and composable router for building Go 1.7+ HTTP services. It's\nespecially good at helping you write large REST API services that are kept maintainable as your\nproject grows and changes. `chi` is built on the new `context` package introduced in Go 1.7 to\nhandle signaling, cancelation and request-scoped values across a handler chain.\n\nThe focus of the project has been to seek out an elegant and comfortable design for writing\nREST API servers, written during the development of the Pressly API service that powers our\npublic API service, which in turn powers all of our client-side applications.\n\nThe key considerations of chi's design are: project structure, maintainability, standard http\nhandlers (stdlib-only), developer productivity, and deconstructing a large system into many small\nparts. The core router `github.com/go-chi/chi` is quite small (less than 1000 LOC), but we've also\nincluded some useful/optional subpackages: [middleware](/middleware), [render](https://github.com/go-chi/render) and [docgen](https://github.com/go-chi/docgen). We hope you enjoy it too!\n\n## Install\n\n`go get -u github.com/go-chi/chi`\n\n\n## Features\n\n* **Lightweight** - cloc'd in ~1000 LOC for the chi router\n* **Fast** - yes, see [benchmarks](#benchmarks)\n* **100% compatible with net/http** - use any http or middleware pkg in the ecosystem that is also compatible with `net/http`\n* **Designed for modular/composable APIs** - middlewares, inline middlewares, route groups and subrouter mounting\n* **Context control** - built on new `context` package, providing value chaining, cancelations and timeouts\n* **Robust** - in production at Pressly, CloudFlare, Heroku, 99Designs, and many others (see [discussion](https://github.com/go-chi/chi/issues/91))\n* **Doc generation** - `docgen` auto-generates routing documentation from your source to JSON or Markdown\n* **No external dependencies** - plain ol' Go 1.7+ stdlib + net/http\n\n\n## Examples\n\n* [rest](https://github.com/go-chi/chi/blob/master/_examples/rest/main.go) - REST APIs made easy, productive and maintainable\n* [logging](https://github.com/go-chi/chi/blob/master/_examples/logging/main.go) - Easy structured logging for any backend\n* [limits](https://github.com/go-chi/chi/blob/master/_examples/limits/main.go) - Timeouts and Throttling\n* [todos-resource](https://github.com/go-chi/chi/blob/master/_examples/todos-resource/main.go) - Struct routers/handlers, an example of another code layout style\n* [versions](https://github.com/go-chi/chi/blob/master/_examples/versions/main.go) - Demo of `chi/render` subpkg\n* [fileserver](https://github.com/go-chi/chi/blob/master/_examples/fileserver/main.go) - Easily serve static files\n* [graceful](https://github.com/go-chi/chi/blob/master/_examples/graceful/main.go) - Graceful context signaling and server shutdown\n\n\n**As easy as:**\n\n```go\npackage main\n\nimport (\n\t\"net/http\"\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\thttp.ListenAndServe(\":3000\", r)\n}\n```\n\n**REST Preview:**\n\nHere is a little preview of how routing looks like with chi. Also take a look at the generated routing docs\nin JSON ([routes.json](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.json)) and in\nMarkdown ([routes.md](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.md)).\n\nI highly recommend reading the source of the [examples](#examples) listed above, they will show you all the features\nof chi and serve as a good form of documentation.\n\n```go\nimport (\n  //...\n  \"context\"\n  \"github.com/go-chi/chi\"\n  \"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n  r := chi.NewRouter()\n\n  // A good base middleware stack\n  r.Use(middleware.RequestID)\n  r.Use(middleware.RealIP)\n  r.Use(middleware.Logger)\n  r.Use(middleware.Recoverer)\n\n  // Set a timeout value on the request context (ctx), that will signal\n  // through ctx.Done() that the request has timed out and further\n  // processing should be stopped.\n  r.Use(middleware.Timeout(60 * time.Second))\n\n  r.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte(\"hi\"))\n  })\n\n  // RESTy routes for \"articles\" resource\n  r.Route(\"/articles\", func(r chi.Router) {\n    r.With(paginate).Get(\"/\", listArticles)                           // GET /articles\n    r.With(paginate).Get(\"/{month}-{day}-{year}\", listArticlesByDate) // GET /articles/01-16-2017\n\n    r.Post(\"/\", createArticle)                                        // POST /articles\n    r.Get(\"/search\", searchArticles)                                  // GET /articles/search\n\n    // Regexp url parameters:\n    r.Get(\"/{articleSlug:[a-z-]+}\", getArticleBySlug)                // GET /articles/home-is-toronto\n\n    // Subrouters:\n    r.Route(\"/{articleID}\", func(r chi.Router) {\n      r.Use(ArticleCtx)\n      r.Get(\"/\", getArticle)                                          // GET /articles/123\n      r.Put(\"/\", updateArticle)                                       // PUT /articles/123\n      r.Delete(\"/\", deleteArticle)                                    // DELETE /articles/123\n    })\n  })\n\n  // Mount the admin sub-router\n  r.Mount(\"/admin\", adminRouter())\n\n  http.ListenAndServe(\":3333\", r)\n}\n\nfunc ArticleCtx(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    articleID := chi.URLParam(r, \"articleID\")\n    article, err := dbGetArticle(articleID)\n    if err != nil {\n      http.Error(w, http.StatusText(404), 404)\n      return\n    }\n    ctx := context.WithValue(r.Context(), \"article\", article)\n    next.ServeHTTP(w, r.WithContext(ctx))\n  })\n}\n\nfunc getArticle(w http.ResponseWriter, r *http.Request) {\n  ctx := r.Context()\n  article, ok := ctx.Value(\"article\").(*Article)\n  if !ok {\n    http.Error(w, http.StatusText(422), 422)\n    return\n  }\n  w.Write([]byte(fmt.Sprintf(\"title:%s\", article.Title)))\n}\n\n// A completely separate router for administrator routes\nfunc adminRouter() http.Handler {\n  r := chi.NewRouter()\n  r.Use(AdminOnly)\n  r.Get(\"/\", adminIndex)\n  r.Get(\"/accounts\", adminListAccounts)\n  return r\n}\n\nfunc AdminOnly(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    ctx := r.Context()\n    perm, ok := ctx.Value(\"acl.permission\").(YourPermissionType)\n    if !ok || !perm.IsAdmin() {\n      http.Error(w, http.StatusText(403), 403)\n      return\n    }\n    next.ServeHTTP(w, r)\n  })\n}\n```\n\n\n## Router design\n\nchi's router is based on a kind of [Patricia Radix trie](https://en.wikipedia.org/wiki/Radix_tree).\nThe router is fully compatible with `net/http`.\n\nBuilt on top of the tree is the `Router` interface:\n\n```go\n// Router consisting of the core routing methods used by chi's Mux,\n// using only the standard net/http.\ntype Router interface {\n\thttp.Handler\n\tRoutes\n\n\t// Use appends one of more middlewares onto the Router stack.\n\tUse(middlewares ...func(http.Handler) http.Handler)\n\n\t// With adds inline middlewares for an endpoint handler.\n\tWith(middlewares ...func(http.Handler) http.Handler) Router\n\n\t// Group adds a new inline-Router along the current routing\n\t// path, with a fresh middleware stack for the inline-Router.\n\tGroup(fn func(r Router)) Router\n\n\t// Route mounts a sub-Router along a `pattern`` string.\n\tRoute(pattern string, fn func(r Router)) Router\n\n\t// Mount attaches another http.Handler along ./pattern/*\n\tMount(pattern string, h http.Handler)\n\n\t// Handle and HandleFunc adds routes for `pattern` that matches\n\t// all HTTP methods.\n\tHandle(pattern string, h http.Handler)\n\tHandleFunc(pattern string, h http.HandlerFunc)\n\n\t// Method and MethodFunc adds routes for `pattern` that matches\n\t// the `method` HTTP method.\n\tMethod(method, pattern string, h http.Handler)\n\tMethodFunc(method, pattern string, h http.HandlerFunc)\n\n\t// HTTP-method routing along `pattern`\n\tConnect(pattern string, h http.HandlerFunc)\n\tDelete(pattern string, h http.HandlerFunc)\n\tGet(pattern string, h http.HandlerFunc)\n\tHead(pattern string, h http.HandlerFunc)\n\tOptions(pattern string, h http.HandlerFunc)\n\tPatch(pattern string, h http.HandlerFunc)\n\tPost(pattern string, h http.HandlerFunc)\n\tPut(pattern string, h http.HandlerFunc)\n\tTrace(pattern string, h http.HandlerFunc)\n\n\t// NotFound defines a handler to respond whenever a route could\n\t// not be found.\n\tNotFound(h http.HandlerFunc)\n\n\t// MethodNotAllowed defines a handler to respond whenever a method is\n\t// not allowed.\n\tMethodNotAllowed(h http.HandlerFunc)\n}\n\n// Routes interface adds two methods for router traversal, which is also\n// used by the `docgen` subpackage to generation documentation for Routers.\ntype Routes interface {\n\t// Routes returns the routing tree in an easily traversable structure.\n\tRoutes() []Route\n\n\t// Middlewares returns the list of middlewares in use by the router.\n\tMiddlewares() Middlewares\n\n\t// Match searches the routing tree for a handler that matches\n\t// the method/path - similar to routing a http request, but without\n\t// executing the handler thereafter.\n\tMatch(rctx *Context, method, path string) bool\n}\n```\n\nEach routing method accepts a URL `pattern` and chain of `handlers`. The URL pattern\nsupports named params (ie. `/users/{userID}`) and wildcards (ie. `/admin/*`). URL parameters\ncan be fetched at runtime by calling `chi.URLParam(r, \"userID\")` for named parameters\nand `chi.URLParam(r, \"*\")` for a wildcard parameter.\n\n\n### Middleware handlers\n\nchi's middlewares are just stdlib net/http middleware handlers. There is nothing special\nabout them, which means the router and all the tooling is designed to be compatible and\nfriendly with any middleware in the community. This offers much better extensibility and reuse\nof packages and is at the heart of chi's purpose.\n\nHere is an example of a standard net/http middleware handler using the new request context\navailable in Go 1.7+. This middleware sets a hypothetical user identifier on the request\ncontext and calls the next handler in the chain.\n\n```go\n// HTTP middleware setting a value on the request context\nfunc MyMiddleware(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    ctx := context.WithValue(r.Context(), \"user\", \"123\")\n    next.ServeHTTP(w, r.WithContext(ctx))\n  })\n}\n```\n\n\n### Request handlers\n\nchi uses standard net/http request handlers. This little snippet is an example of a http.Handler\nfunc that reads a user identifier from the request context - hypothetically, identifying\nthe user sending an authenticated request, validated+set by a previous middleware handler.\n\n```go\n// HTTP handler accessing data from the request context.\nfunc MyRequestHandler(w http.ResponseWriter, r *http.Request) {\n  user := r.Context().Value(\"user\").(string)\n  w.Write([]byte(fmt.Sprintf(\"hi %s\", user)))\n}\n```\n\n\n### URL parameters\n\nchi's router parses and stores URL parameters right onto the request context. Here is\nan example of how to access URL params in your net/http handlers. And of course, middlewares\nare able to access the same information.\n\n```go\n// HTTP handler accessing the url routing parameters.\nfunc MyRequestHandler(w http.ResponseWriter, r *http.Request) {\n  userID := chi.URLParam(r, \"userID\") // from a route like /users/{userID}\n\n  ctx := r.Context()\n  key := ctx.Value(\"key\").(string)\n\n  w.Write([]byte(fmt.Sprintf(\"hi %v, %v\", userID, key)))\n}\n```\n\n\n## Middlewares\n\nchi comes equipped with an optional `middleware` package, providing a suite of standard\n`net/http` middlewares. Please note, any middleware in the ecosystem that is also compatible\nwith `net/http` can be used with chi's mux.\n\n### Core middlewares\n\n-----------------------------------------------------------------------------------------------------------\n| chi/middleware Handler | description                                                                     |\n|:----------------------|:---------------------------------------------------------------------------------\n| AllowContentType      | Explicit whitelist of accepted request Content-Types                            |\n| Compress              | Gzip compression for clients that accept compressed responses                   |\n| GetHead               | Automatically route undefined HEAD requests to GET handlers                     |\n| Heartbeat             | Monitoring endpoint to check the servers pulse                                  |\n| Logger                | Logs the start and end of each request with the elapsed processing time         |\n| NoCache               | Sets response headers to prevent clients from caching                           |\n| Profiler              | Easily attach net/http/pprof to your routers                                    |\n| RealIP                | Sets a http.Request's RemoteAddr to either X-Forwarded-For or X-Real-IP         |\n| Recoverer             | Gracefully absorb panics and prints the stack trace                             |\n| RequestID             | Injects a request ID into the context of each request                           |\n| RedirectSlashes       | Redirect slashes on routing paths                                               |\n| SetHeader             | Short-hand middleware to set a response header key/value                        |\n| StripSlashes          | Strip slashes on routing paths                                                  |\n| Throttle              | Puts a ceiling on the number of concurrent requests                             |\n| Timeout               | Signals to the request context when the timeout deadline is reached             |\n| URLFormat             | Parse extension from url and put it on request context                          |\n| WithValue             | Short-hand middleware to set a key/value on the request context                 |\n-----------------------------------------------------------------------------------------------------------\n\n### Auxiliary middlewares & packages\n\nPlease see https://github.com/go-chi for additional packages.\n\n--------------------------------------------------------------------------------------------------------------------\n| package                                            | description                                                 |\n|:---------------------------------------------------|:-------------------------------------------------------------\n| [cors](https://github.com/go-chi/cors)             | Cross-origin resource sharing (CORS)                        |\n| [jwtauth](https://github.com/go-chi/jwtauth)       | JWT authentication                                          |\n| [hostrouter](https://github.com/go-chi/hostrouter) | Domain/host based request routing                           |\n| [httpcoala](https://github.com/go-chi/httpcoala)   | HTTP request coalescer                                      |\n| [chi-authz](https://github.com/casbin/chi-authz)   | Request ACL via https://github.com/hsluoyz/casbin           |\n| [phi](https://github.com/fate-lovely/phi)          | Port chi to [fasthttp](https://github.com/valyala/fasthttp) |\n--------------------------------------------------------------------------------------------------------------------\n\nplease [submit a PR](./CONTRIBUTING.md) if you'd like to include a link to a chi-compatible middleware\n\n\n## context?\n\n`context` is a tiny pkg that provides simple interface to signal context across call stacks\nand goroutines. It was originally written by [Sameer Ajmani](https://github.com/Sajmani)\nand is available in stdlib since go1.7.\n\nLearn more at https://blog.golang.org/context\n\nand..\n* Docs: https://golang.org/pkg/context\n* Source: https://github.com/golang/go/tree/master/src/context\n\n\n## Benchmarks\n\nThe benchmark suite: https://github.com/pkieltyka/go-http-routing-benchmark\n\nResults as of Aug 31, 2017 on Go 1.9.0\n\n```shell\nBenchmarkChi_Param        \t 3000000\t       607 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Param5       \t 2000000\t       935 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Param20      \t 1000000\t      1944 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParamWrite   \t 2000000\t       664 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubStatic \t 2000000\t       627 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubParam  \t 2000000\t       847 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubAll    \t   10000\t    175556 ns/op\t   87700 B/op\t     609 allocs/op\nBenchmarkChi_GPlusStatic  \t 3000000\t       566 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlusParam   \t 2000000\t       652 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlus2Params \t 2000000\t       767 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlusAll     \t  200000\t      9794 ns/op\t    5616 B/op\t      39 allocs/op\nBenchmarkChi_ParseStatic  \t 3000000\t       590 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParseParam   \t 2000000\t       656 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Parse2Params \t 2000000\t       715 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParseAll     \t  100000\t     18045 ns/op\t   11232 B/op\t      78 allocs/op\nBenchmarkChi_StaticAll    \t   10000\t    108871 ns/op\t   67827 B/op\t     471 allocs/op\n```\n\nComparison with other routers: https://gist.github.com/pkieltyka/c089f309abeb179cfc4deaa519956d8c\n\nNOTE: the allocs in the benchmark above are from the calls to http.Request's\n`WithContext(context.Context)` method that clones the http.Request, sets the `Context()`\non the duplicated (alloc'd) request and returns it the new request object. This is just\nhow setting context on a request in Go 1.7+ works.\n\n\n## Credits\n\n* Carl Jackson for https://github.com/zenazn/goji\n  * Parts of chi's thinking comes from goji, and chi's middleware package\n    sources from goji.\n* Armon Dadgar for https://github.com/armon/go-radix\n* Contributions: [@VojtechVitek](https://github.com/VojtechVitek)\n\nWe'll be more than happy to see [your contributions](./CONTRIBUTING.md)!\n\n\n## Beyond REST\n\nchi is just a http router that lets you decompose request handling into many smaller layers.\nMany companies including Pressly.com (of course) use chi to write REST services for their public\nAPIs. But, REST is just a convention for managing state via HTTP, and there's a lot of other pieces\nrequired to write a complete client-server system or network of microservices.\n\nLooking ahead beyond REST, I also recommend some newer works in the field coming from\n[gRPC](https://github.com/grpc/grpc-go), [NATS](https://nats.io), [go-kit](https://github.com/go-kit/kit)\nand even [graphql](https://github.com/graphql-go/graphql). They're all pretty cool with their\nown unique approaches and benefits. Specifically, I'd look at gRPC since it makes client-server\ncommunication feel like a single program on a single computer, no need to hand-write a client library\nand the request/response payloads are typed contracts. NATS is pretty amazing too as a super\nfast and lightweight pub-sub transport that can speak protobufs, with nice service discovery -\nan excellent combination with gRPC.\n\n\n## License\n\nCopyright (c) 2015-present [Peter Kieltyka](https://github.com/pkieltyka)\n\nLicensed under [MIT License](./LICENSE)\n\n[GoDoc]: https://godoc.org/github.com/go-chi/chi\n[GoDoc Widget]: https://godoc.org/github.com/go-chi/chi?status.svg\n[Travis]: https://travis-ci.org/go-chi/chi\n[Travis Widget]: https://travis-ci.org/go-chi/chi.svg?branch=master\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/custom-handler/main.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype Handler func(w http.ResponseWriter, r *http.Request) error\n\nfunc (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tif err := h(w, r); err != nil {\n\t\t// handle returned error here.\n\t\tw.WriteHeader(503)\n\t\tw.Write([]byte(\"bad\"))\n\t}\n}\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Method(\"GET\", \"/\", Handler(customHandler))\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc customHandler(w http.ResponseWriter, r *http.Request) error {\n\tq := r.URL.Query().Get(\"err\")\n\n\tif q != \"\" {\n\t\treturn errors.New(q)\n\t}\n\n\tw.Write([]byte(\"foo\"))\n\treturn nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/custom-method/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc init() {\n\tchi.RegisterMethod(\"LINK\")\n\tchi.RegisterMethod(\"UNLINK\")\n\tchi.RegisterMethod(\"WOOHOO\")\n}\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello world\"))\n\t})\n\tr.MethodFunc(\"LINK\", \"/link\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom link method\"))\n\t})\n\tr.MethodFunc(\"WOOHOO\", \"/woo\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom woohoo method\"))\n\t})\n\tr.HandleFunc(\"/everything\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"capturing all standard http methods, as well as LINK, UNLINK and WOOHOO\"))\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/fileserver/files/notes.txt",
    "content": "Notessszzz\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/fileserver/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\n\tworkDir, _ := os.Getwd()\n\tfilesDir := filepath.Join(workDir, \"files\")\n\tFileServer(r, \"/files\", http.Dir(filesDir))\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\n// FileServer conveniently sets up a http.FileServer handler to serve\n// static files from a http.FileSystem.\nfunc FileServer(r chi.Router, path string, root http.FileSystem) {\n\tif strings.ContainsAny(path, \"{}*\") {\n\t\tpanic(\"FileServer does not permit URL parameters.\")\n\t}\n\n\tfs := http.StripPrefix(path, http.FileServer(root))\n\n\tif path != \"/\" && path[len(path)-1] != '/' {\n\t\tr.Get(path, http.RedirectHandler(path+\"/\", 301).ServeHTTP)\n\t\tpath += \"/\"\n\t}\n\tpath += \"*\"\n\n\tr.Get(path, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tfs.ServeHTTP(w, r)\n\t}))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/graceful/main.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/valve\"\n)\n\nfunc main() {\n\n\t// Our graceful valve shut-off package to manage code preemption and\n\t// shutdown signaling.\n\tvalv := valve.New()\n\tbaseCtx := valv.Context()\n\n\t// Example of a long running background worker thing..\n\tgo func(ctx context.Context) {\n\t\tfor {\n\t\t\t<-time.After(1 * time.Second)\n\n\t\t\tfunc() {\n\t\t\t\tvalve.Lever(ctx).Open()\n\t\t\t\tdefer valve.Lever(ctx).Close()\n\n\t\t\t\t// actual code doing stuff..\n\t\t\t\tfmt.Println(\"tick..\")\n\t\t\t\ttime.Sleep(2 * time.Second)\n\t\t\t\t// end-logic\n\n\t\t\t\t// signal control..\n\t\t\t\tselect {\n\t\t\t\tcase <-valve.Lever(ctx).Stop():\n\t\t\t\t\tfmt.Println(\"valve is closed\")\n\t\t\t\t\treturn\n\n\t\t\t\tcase <-ctx.Done():\n\t\t\t\t\tfmt.Println(\"context is cancelled, go home.\")\n\t\t\t\t\treturn\n\t\t\t\tdefault:\n\t\t\t\t}\n\t\t\t}()\n\n\t\t}\n\t}(baseCtx)\n\n\t// HTTP service running in this program as well. The valve context is set\n\t// as a base context on the server listener at the point where we instantiate\n\t// the server - look lower.\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sup\"))\n\t})\n\n\tr.Get(\"/slow\", func(w http.ResponseWriter, r *http.Request) {\n\n\t\tvalve.Lever(r.Context()).Open()\n\t\tdefer valve.Lever(r.Context()).Close()\n\n\t\tselect {\n\t\tcase <-valve.Lever(r.Context()).Stop():\n\t\t\tfmt.Println(\"valve is closed. finish up..\")\n\n\t\tcase <-time.After(5 * time.Second):\n\t\t\t// The above channel simulates some hard work.\n\t\t\t// We want this handler to complete successfully during a shutdown signal,\n\t\t\t// so consider the work here as some background routine to fetch a long running\n\t\t\t// search query to find as many results as possible, but, instead we cut it short\n\t\t\t// and respond with what we have so far. How a shutdown is handled is entirely\n\t\t\t// up to the developer, as some code blocks are preemptable, and others are not.\n\t\t\ttime.Sleep(5 * time.Second)\n\t\t}\n\n\t\tw.Write([]byte(fmt.Sprintf(\"all done.\\n\")))\n\t})\n\n\tsrv := http.Server{Addr: \":3333\", Handler: chi.ServerBaseContext(baseCtx, r)}\n\n\tc := make(chan os.Signal, 1)\n\tsignal.Notify(c, os.Interrupt)\n\tgo func() {\n\t\tfor range c {\n\t\t\t// sig is a ^C, handle it\n\t\t\tfmt.Println(\"shutting down..\")\n\n\t\t\t// first valv\n\t\t\tvalv.Shutdown(20 * time.Second)\n\n\t\t\t// create context with timeout\n\t\t\tctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)\n\t\t\tdefer cancel()\n\n\t\t\t// start http shutdown\n\t\t\tsrv.Shutdown(ctx)\n\n\t\t\t// verify, in worst case call cancel via defer\n\t\t\tselect {\n\t\t\tcase <-time.After(21 * time.Second):\n\t\t\t\tfmt.Println(\"not all connections done\")\n\t\t\tcase <-ctx.Done():\n\n\t\t\t}\n\t\t}\n\t}()\n\tsrv.ListenAndServe()\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/hello-world/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello world\"))\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/limits/main.go",
    "content": "//\n// Limits\n// ======\n// This example demonstrates the use of Timeout, CloseNotify, and\n// Throttle middlewares.\n//\n// Timeout:\n//   cancel a request if processing takes longer than 2.5 seconds,\n//   server will respond with a http.StatusGatewayTimeout.\n//\n// CloseNotify:\n//   cancel a request if the client disconnects.\n//\n// Throttle:\n//   limit the number of in-flight requests along a particular\n//   routing path and backlog the others.\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Get(\"/ping\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"pong\"))\n\t})\n\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"test\")\n\t})\n\n\t// Slow handlers/operations.\n\tr.Group(func(r chi.Router) {\n\t\t// Stop processing when client disconnects.\n\t\tr.Use(middleware.CloseNotify)\n\n\t\t// Stop processing after 2.5 seconds.\n\t\tr.Use(middleware.Timeout(2500 * time.Millisecond))\n\n\t\tr.Get(\"/slow\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\trand.Seed(time.Now().Unix())\n\n\t\t\t// Processing will take 1-5 seconds.\n\t\t\tprocessTime := time.Duration(rand.Intn(4)+1) * time.Second\n\n\t\t\tselect {\n\t\t\tcase <-r.Context().Done():\n\t\t\t\treturn\n\n\t\t\tcase <-time.After(processTime):\n\t\t\t\t// The above channel simulates some hard work.\n\t\t\t}\n\n\t\t\tw.Write([]byte(fmt.Sprintf(\"Processed in %v seconds\\n\", processTime)))\n\t\t})\n\t})\n\n\t// Throttle very expensive handlers/operations.\n\tr.Group(func(r chi.Router) {\n\t\t// Stop processing after 30 seconds.\n\t\tr.Use(middleware.Timeout(30 * time.Second))\n\n\t\t// Only one request will be processed at a time.\n\t\tr.Use(middleware.Throttle(1))\n\n\t\tr.Get(\"/throttled\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tselect {\n\t\t\tcase <-r.Context().Done():\n\t\t\t\tswitch r.Context().Err() {\n\t\t\t\tcase context.DeadlineExceeded:\n\t\t\t\t\tw.WriteHeader(504)\n\t\t\t\t\tw.Write([]byte(\"Processing too slow\\n\"))\n\t\t\t\tdefault:\n\t\t\t\t\tw.Write([]byte(\"Canceled\\n\"))\n\t\t\t\t}\n\t\t\t\treturn\n\n\t\t\tcase <-time.After(5 * time.Second):\n\t\t\t\t// The above channel simulates some hard work.\n\t\t\t}\n\n\t\t\tw.Write([]byte(\"Processed\\n\"))\n\t\t})\n\t})\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/logging/main.go",
    "content": "//\n// Custom Structured Logger\n// ========================\n// This example demonstrates how to use middleware.RequestLogger,\n// middleware.LogFormatter and middleware.LogEntry to build a structured\n// logger using the amazing sirupsen/logrus package as the logging\n// backend.\n//\n// Also: check out https://github.com/pressly/lg for an improved context\n// logger with support for HTTP request logging, based on the example\n// below.\n//\npackage main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/sirupsen/logrus\"\n)\n\nfunc main() {\n\n\t// Setup the logger backend using sirupsen/logrus and configure\n\t// it to use a custom JSONFormatter. See the logrus docs for how to\n\t// configure the backend at github.com/sirupsen/logrus\n\tlogger := logrus.New()\n\tlogger.Formatter = &logrus.JSONFormatter{\n\t\t// disable, as we set our own\n\t\tDisableTimestamp: true,\n\t}\n\n\t// Routes\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(NewStructuredLogger(logger))\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\tr.Get(\"/wait\", func(w http.ResponseWriter, r *http.Request) {\n\t\ttime.Sleep(1 * time.Second)\n\t\tLogEntrySetField(r, \"wait\", true)\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"oops\")\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n\n// StructuredLogger is a simple, but powerful implementation of a custom structured\n// logger backed on logrus. I encourage users to copy it, adapt it and make it their\n// own. Also take a look at https://github.com/pressly/lg for a dedicated pkg based\n// on this work, designed for context-based http routers.\n\nfunc NewStructuredLogger(logger *logrus.Logger) func(next http.Handler) http.Handler {\n\treturn middleware.RequestLogger(&StructuredLogger{logger})\n}\n\ntype StructuredLogger struct {\n\tLogger *logrus.Logger\n}\n\nfunc (l *StructuredLogger) NewLogEntry(r *http.Request) middleware.LogEntry {\n\tentry := &StructuredLoggerEntry{Logger: logrus.NewEntry(l.Logger)}\n\tlogFields := logrus.Fields{}\n\n\tlogFields[\"ts\"] = time.Now().UTC().Format(time.RFC1123)\n\n\tif reqID := middleware.GetReqID(r.Context()); reqID != \"\" {\n\t\tlogFields[\"req_id\"] = reqID\n\t}\n\n\tscheme := \"http\"\n\tif r.TLS != nil {\n\t\tscheme = \"https\"\n\t}\n\tlogFields[\"http_scheme\"] = scheme\n\tlogFields[\"http_proto\"] = r.Proto\n\tlogFields[\"http_method\"] = r.Method\n\n\tlogFields[\"remote_addr\"] = r.RemoteAddr\n\tlogFields[\"user_agent\"] = r.UserAgent()\n\n\tlogFields[\"uri\"] = fmt.Sprintf(\"%s://%s%s\", scheme, r.Host, r.RequestURI)\n\n\tentry.Logger = entry.Logger.WithFields(logFields)\n\n\tentry.Logger.Infoln(\"request started\")\n\n\treturn entry\n}\n\ntype StructuredLoggerEntry struct {\n\tLogger logrus.FieldLogger\n}\n\nfunc (l *StructuredLoggerEntry) Write(status, bytes int, elapsed time.Duration) {\n\tl.Logger = l.Logger.WithFields(logrus.Fields{\n\t\t\"resp_status\": status, \"resp_bytes_length\": bytes,\n\t\t\"resp_elapsed_ms\": float64(elapsed.Nanoseconds()) / 1000000.0,\n\t})\n\n\tl.Logger.Infoln(\"request complete\")\n}\n\nfunc (l *StructuredLoggerEntry) Panic(v interface{}, stack []byte) {\n\tl.Logger = l.Logger.WithFields(logrus.Fields{\n\t\t\"stack\": string(stack),\n\t\t\"panic\": fmt.Sprintf(\"%+v\", v),\n\t})\n}\n\n// Helper methods used by the application to get the request-scoped\n// logger entry and set additional fields between handlers.\n//\n// This is a useful pattern to use to set state on the entry as it\n// passes through the handler chain, which at any point can be logged\n// with a call to .Print(), .Info(), etc.\n\nfunc GetLogEntry(r *http.Request) logrus.FieldLogger {\n\tentry := middleware.GetLogEntry(r).(*StructuredLoggerEntry)\n\treturn entry.Logger\n}\n\nfunc LogEntrySetField(r *http.Request, key string, value interface{}) {\n\tif entry, ok := r.Context().Value(middleware.LogEntryCtxKey).(*StructuredLoggerEntry); ok {\n\t\tentry.Logger = entry.Logger.WithField(key, value)\n\t}\n}\n\nfunc LogEntrySetFields(r *http.Request, fields map[string]interface{}) {\n\tif entry, ok := r.Context().Value(middleware.LogEntryCtxKey).(*StructuredLoggerEntry); ok {\n\t\tentry.Logger = entry.Logger.WithFields(fields)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/rest/main.go",
    "content": "//\n// REST\n// ====\n// This example demonstrates a HTTP REST web service with some fixture data.\n// Follow along the example and patterns.\n//\n// Also check routes.json for the generated docs from passing the -routes flag\n//\n// Boot the server:\n// ----------------\n// $ go run main.go\n//\n// Client requests:\n// ----------------\n// $ curl http://localhost:3333/\n// root.\n//\n// $ curl http://localhost:3333/articles\n// [{\"id\":\"1\",\"title\":\"Hi\"},{\"id\":\"2\",\"title\":\"sup\"}]\n//\n// $ curl http://localhost:3333/articles/1\n// {\"id\":\"1\",\"title\":\"Hi\"}\n//\n// $ curl -X DELETE http://localhost:3333/articles/1\n// {\"id\":\"1\",\"title\":\"Hi\"}\n//\n// $ curl http://localhost:3333/articles/1\n// \"Not Found\"\n//\n// $ curl -X POST -d '{\"id\":\"will-be-omitted\",\"title\":\"awesomeness\"}' http://localhost:3333/articles\n// {\"id\":\"97\",\"title\":\"awesomeness\"}\n//\n// $ curl http://localhost:3333/articles/97\n// {\"id\":\"97\",\"title\":\"awesomeness\"}\n//\n// $ curl http://localhost:3333/articles\n// [{\"id\":\"2\",\"title\":\"sup\"},{\"id\":\"97\",\"title\":\"awesomeness\"}]\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/docgen\"\n\t\"github.com/go-chi/render\"\n)\n\nvar routes = flag.Bool(\"routes\", false, \"Generate router documentation\")\n\nfunc main() {\n\tflag.Parse()\n\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\tr.Use(middleware.URLFormat)\n\tr.Use(render.SetContentType(render.ContentTypeJSON))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Get(\"/ping\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"pong\"))\n\t})\n\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"test\")\n\t})\n\n\t// RESTy routes for \"articles\" resource\n\tr.Route(\"/articles\", func(r chi.Router) {\n\t\tr.With(paginate).Get(\"/\", ListArticles)\n\t\tr.Post(\"/\", CreateArticle)       // POST /articles\n\t\tr.Get(\"/search\", SearchArticles) // GET /articles/search\n\n\t\tr.Route(\"/{articleID}\", func(r chi.Router) {\n\t\t\tr.Use(ArticleCtx)            // Load the *Article on the request context\n\t\t\tr.Get(\"/\", GetArticle)       // GET /articles/123\n\t\t\tr.Put(\"/\", UpdateArticle)    // PUT /articles/123\n\t\t\tr.Delete(\"/\", DeleteArticle) // DELETE /articles/123\n\t\t})\n\n\t\t// GET /articles/whats-up\n\t\tr.With(ArticleCtx).Get(\"/{articleSlug:[a-z-]+}\", GetArticle)\n\t})\n\n\t// Mount the admin sub-router, which btw is the same as:\n\t// r.Route(\"/admin\", func(r chi.Router) { admin routes here })\n\tr.Mount(\"/admin\", adminRouter())\n\n\t// Passing -routes to the program will generate docs for the above\n\t// router definition. See the `routes.json` file in this folder for\n\t// the output.\n\tif *routes {\n\t\t// fmt.Println(docgen.JSONRoutesDoc(r))\n\t\tfmt.Println(docgen.MarkdownRoutesDoc(r, docgen.MarkdownOpts{\n\t\t\tProjectPath: \"github.com/go-chi/chi\",\n\t\t\tIntro:       \"Welcome to the chi/_examples/rest generated docs.\",\n\t\t}))\n\t\treturn\n\t}\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc ListArticles(w http.ResponseWriter, r *http.Request) {\n\tif err := render.RenderList(w, r, NewArticleListResponse(articles)); err != nil {\n\t\trender.Render(w, r, ErrRender(err))\n\t\treturn\n\t}\n}\n\n// ArticleCtx middleware is used to load an Article object from\n// the URL parameters passed through as the request. In case\n// the Article could not be found, we stop here and return a 404.\nfunc ArticleCtx(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tvar article *Article\n\t\tvar err error\n\n\t\tif articleID := chi.URLParam(r, \"articleID\"); articleID != \"\" {\n\t\t\tarticle, err = dbGetArticle(articleID)\n\t\t} else if articleSlug := chi.URLParam(r, \"articleSlug\"); articleSlug != \"\" {\n\t\t\tarticle, err = dbGetArticleBySlug(articleSlug)\n\t\t} else {\n\t\t\trender.Render(w, r, ErrNotFound)\n\t\t\treturn\n\t\t}\n\t\tif err != nil {\n\t\t\trender.Render(w, r, ErrNotFound)\n\t\t\treturn\n\t\t}\n\n\t\tctx := context.WithValue(r.Context(), \"article\", article)\n\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t})\n}\n\n// SearchArticles searches the Articles data for a matching article.\n// It's just a stub, but you get the idea.\nfunc SearchArticles(w http.ResponseWriter, r *http.Request) {\n\trender.RenderList(w, r, NewArticleListResponse(articles))\n}\n\n// CreateArticle persists the posted Article and returns it\n// back to the client as an acknowledgement.\nfunc CreateArticle(w http.ResponseWriter, r *http.Request) {\n\tdata := &ArticleRequest{}\n\tif err := render.Bind(r, data); err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\n\tarticle := data.Article\n\tdbNewArticle(article)\n\n\trender.Status(r, http.StatusCreated)\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// GetArticle returns the specific Article. You'll notice it just\n// fetches the Article right off the context, as its understood that\n// if we made it this far, the Article must be on the context. In case\n// its not due to a bug, then it will panic, and our Recoverer will save us.\nfunc GetArticle(w http.ResponseWriter, r *http.Request) {\n\t// Assume if we've reach this far, we can access the article\n\t// context because this handler is a child of the ArticleCtx\n\t// middleware. The worst case, the recoverer middleware will save us.\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tif err := render.Render(w, r, NewArticleResponse(article)); err != nil {\n\t\trender.Render(w, r, ErrRender(err))\n\t\treturn\n\t}\n}\n\n// UpdateArticle updates an existing Article in our persistent store.\nfunc UpdateArticle(w http.ResponseWriter, r *http.Request) {\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tdata := &ArticleRequest{Article: article}\n\tif err := render.Bind(r, data); err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\tarticle = data.Article\n\tdbUpdateArticle(article.ID, article)\n\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// DeleteArticle removes an existing Article from our persistent store.\nfunc DeleteArticle(w http.ResponseWriter, r *http.Request) {\n\tvar err error\n\n\t// Assume if we've reach this far, we can access the article\n\t// context because this handler is a child of the ArticleCtx\n\t// middleware. The worst case, the recoverer middleware will save us.\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tarticle, err = dbRemoveArticle(article.ID)\n\tif err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// A completely separate router for administrator routes\nfunc adminRouter() chi.Router {\n\tr := chi.NewRouter()\n\tr.Use(AdminOnly)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"admin: index\"))\n\t})\n\tr.Get(\"/accounts\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"admin: list accounts..\"))\n\t})\n\tr.Get(\"/users/{userId}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"admin: view user id %v\", chi.URLParam(r, \"userId\"))))\n\t})\n\treturn r\n}\n\n// AdminOnly middleware restricts access to just administrators.\nfunc AdminOnly(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tisAdmin, ok := r.Context().Value(\"acl.admin\").(bool)\n\t\tif !ok || !isAdmin {\n\t\t\thttp.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden)\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n\n// paginate is a stub, but very possible to implement middleware logic\n// to handle the request params for handling a paginated request.\nfunc paginate(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t// just a stub.. some ideas are to look at URL query params for something like\n\t\t// the page number, or the limit, and send a query cursor down the chain\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n\n// This is entirely optional, but I wanted to demonstrate how you could easily\n// add your own logic to the render.Respond method.\nfunc init() {\n\trender.Respond = func(w http.ResponseWriter, r *http.Request, v interface{}) {\n\t\tif err, ok := v.(error); ok {\n\n\t\t\t// We set a default error status response code if one hasn't been set.\n\t\t\tif _, ok := r.Context().Value(render.StatusCtxKey).(int); !ok {\n\t\t\t\tw.WriteHeader(400)\n\t\t\t}\n\n\t\t\t// We log the error\n\t\t\tfmt.Printf(\"Logging err: %s\\n\", err.Error())\n\n\t\t\t// We change the response to not reveal the actual error message,\n\t\t\t// instead we can transform the message something more friendly or mapped\n\t\t\t// to some code / language, etc.\n\t\t\trender.DefaultResponder(w, r, render.M{\"status\": \"error\"})\n\t\t\treturn\n\t\t}\n\n\t\trender.DefaultResponder(w, r, v)\n\t}\n}\n\n//--\n// Request and Response payloads for the REST api.\n//\n// The payloads embed the data model objects an\n//\n// In a real-world project, it would make sense to put these payloads\n// in another file, or another sub-package.\n//--\n\ntype UserPayload struct {\n\t*User\n\tRole string `json:\"role\"`\n}\n\nfunc NewUserPayloadResponse(user *User) *UserPayload {\n\treturn &UserPayload{User: user}\n}\n\n// Bind on UserPayload will run after the unmarshalling is complete, its\n// a good time to focus some post-processing after a decoding.\nfunc (u *UserPayload) Bind(r *http.Request) error {\n\treturn nil\n}\n\nfunc (u *UserPayload) Render(w http.ResponseWriter, r *http.Request) error {\n\tu.Role = \"collaborator\"\n\treturn nil\n}\n\n// ArticleRequest is the request payload for Article data model.\n//\n// NOTE: It's good practice to have well defined request and response payloads\n// so you can manage the specific inputs and outputs for clients, and also gives\n// you the opportunity to transform data on input or output, for example\n// on request, we'd like to protect certain fields and on output perhaps\n// we'd like to include a computed field based on other values that aren't\n// in the data model. Also, check out this awesome blog post on struct composition:\n// http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/\ntype ArticleRequest struct {\n\t*Article\n\n\tUser *UserPayload `json:\"user,omitempty\"`\n\n\tProtectedID string `json:\"id\"` // override 'id' json to have more control\n}\n\nfunc (a *ArticleRequest) Bind(r *http.Request) error {\n\t// just a post-process after a decode..\n\ta.ProtectedID = \"\"                                 // unset the protected ID\n\ta.Article.Title = strings.ToLower(a.Article.Title) // as an example, we down-case\n\treturn nil\n}\n\n// ArticleResponse is the response payload for the Article data model.\n// See NOTE above in ArticleRequest as well.\n//\n// In the ArticleResponse object, first a Render() is called on itself,\n// then the next field, and so on, all the way down the tree.\n// Render is called in top-down order, like a http handler middleware chain.\ntype ArticleResponse struct {\n\t*Article\n\n\tUser *UserPayload `json:\"user,omitempty\"`\n\n\t// We add an additional field to the response here.. such as this\n\t// elapsed computed property\n\tElapsed int64 `json:\"elapsed\"`\n}\n\nfunc NewArticleResponse(article *Article) *ArticleResponse {\n\tresp := &ArticleResponse{Article: article}\n\n\tif resp.User == nil {\n\t\tif user, _ := dbGetUser(resp.UserID); user != nil {\n\t\t\tresp.User = NewUserPayloadResponse(user)\n\t\t}\n\t}\n\n\treturn resp\n}\n\nfunc (rd *ArticleResponse) Render(w http.ResponseWriter, r *http.Request) error {\n\t// Pre-processing before a response is marshalled and sent across the wire\n\trd.Elapsed = 10\n\treturn nil\n}\n\ntype ArticleListResponse []*ArticleResponse\n\nfunc NewArticleListResponse(articles []*Article) []render.Renderer {\n\tlist := []render.Renderer{}\n\tfor _, article := range articles {\n\t\tlist = append(list, NewArticleResponse(article))\n\t}\n\treturn list\n}\n\n// NOTE: as a thought, the request and response payloads for an Article could be the\n// same payload type, perhaps will do an example with it as well.\n// type ArticlePayload struct {\n//   *Article\n// }\n\n//--\n// Error response payloads & renderers\n//--\n\n// ErrResponse renderer type for handling all sorts of errors.\n//\n// In the best case scenario, the excellent github.com/pkg/errors package\n// helps reveal information on the error, setting it on Err, and in the Render()\n// method, using it to set the application-specific error code in AppCode.\ntype ErrResponse struct {\n\tErr            error `json:\"-\"` // low-level runtime error\n\tHTTPStatusCode int   `json:\"-\"` // http response status code\n\n\tStatusText string `json:\"status\"`          // user-level status message\n\tAppCode    int64  `json:\"code,omitempty\"`  // application-specific error code\n\tErrorText  string `json:\"error,omitempty\"` // application-level error message, for debugging\n}\n\nfunc (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error {\n\trender.Status(r, e.HTTPStatusCode)\n\treturn nil\n}\n\nfunc ErrInvalidRequest(err error) render.Renderer {\n\treturn &ErrResponse{\n\t\tErr:            err,\n\t\tHTTPStatusCode: 400,\n\t\tStatusText:     \"Invalid request.\",\n\t\tErrorText:      err.Error(),\n\t}\n}\n\nfunc ErrRender(err error) render.Renderer {\n\treturn &ErrResponse{\n\t\tErr:            err,\n\t\tHTTPStatusCode: 422,\n\t\tStatusText:     \"Error rendering response.\",\n\t\tErrorText:      err.Error(),\n\t}\n}\n\nvar ErrNotFound = &ErrResponse{HTTPStatusCode: 404, StatusText: \"Resource not found.\"}\n\n//--\n// Data model objects and persistence mocks:\n//--\n\n// User data model\ntype User struct {\n\tID   int64  `json:\"id\"`\n\tName string `json:\"name\"`\n}\n\n// Article data model. I suggest looking at https://upper.io for an easy\n// and powerful data persistence adapter.\ntype Article struct {\n\tID     string `json:\"id\"`\n\tUserID int64  `json:\"user_id\"` // the author\n\tTitle  string `json:\"title\"`\n\tSlug   string `json:\"slug\"`\n}\n\n// Article fixture data\nvar articles = []*Article{\n\t{ID: \"1\", UserID: 100, Title: \"Hi\", Slug: \"hi\"},\n\t{ID: \"2\", UserID: 200, Title: \"sup\", Slug: \"sup\"},\n\t{ID: \"3\", UserID: 300, Title: \"alo\", Slug: \"alo\"},\n\t{ID: \"4\", UserID: 400, Title: \"bonjour\", Slug: \"bonjour\"},\n\t{ID: \"5\", UserID: 500, Title: \"whats up\", Slug: \"whats-up\"},\n}\n\n// User fixture data\nvar users = []*User{\n\t{ID: 100, Name: \"Peter\"},\n\t{ID: 200, Name: \"Julia\"},\n}\n\nfunc dbNewArticle(article *Article) (string, error) {\n\tarticle.ID = fmt.Sprintf(\"%d\", rand.Intn(100)+10)\n\tarticles = append(articles, article)\n\treturn article.ID, nil\n}\n\nfunc dbGetArticle(id string) (*Article, error) {\n\tfor _, a := range articles {\n\t\tif a.ID == id {\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbGetArticleBySlug(slug string) (*Article, error) {\n\tfor _, a := range articles {\n\t\tif a.Slug == slug {\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbUpdateArticle(id string, article *Article) (*Article, error) {\n\tfor i, a := range articles {\n\t\tif a.ID == id {\n\t\t\tarticles[i] = article\n\t\t\treturn article, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbRemoveArticle(id string) (*Article, error) {\n\tfor i, a := range articles {\n\t\tif a.ID == id {\n\t\t\tarticles = append((articles)[:i], (articles)[i+1:]...)\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbGetUser(id int64) (*User, error) {\n\tfor _, u := range users {\n\t\tif u.ID == id {\n\t\t\treturn u, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"user not found.\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/rest/routes.json",
    "content": "{\n  \"router\": {\n    \"middlewares\": [\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"RequestID\",\n        \"comment\": \"RequestID is a middleware that injects a request ID into the context of each\\nrequest. A request ID is a string of the form \\\"host.example.com/random-0001\\\",\\nwhere \\\"random\\\" is a base62 random string that uniquely identifies this go\\nprocess, and where the last number is an atomically incremented request\\ncounter.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/request_id.go\",\n        \"line\": 63\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"Logger\",\n        \"comment\": \"Logger is a middleware that logs the start and end of each request, along\\nwith some useful data about what was requested, what the response status was,\\nand how long it took to return. When standard output is a TTY, Logger will\\nprint in color, otherwise it will print in black and white. Logger prints a\\nrequest ID if one is provided.\\n\\nAlternatively, look at https://github.com/pressly/lg and the `lg.RequestLogger`\\nmiddleware pkg.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/logger.go\",\n        \"line\": 26\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"Recoverer\",\n        \"comment\": \"Recoverer is a middleware that recovers from panics, logs the panic (and a\\nbacktrace), and returns a HTTP 500 (Internal Server Error) status if\\npossible. Recoverer prints a request ID if one is provided.\\n\\nAlternatively, look at https://github.com/pressly/lg middleware pkgs.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/recoverer.go\",\n        \"line\": 18\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"URLFormat\",\n        \"comment\": \"URLFormat is a middleware that parses the url extension from a request path and stores it\\non the context as a string under the key `middleware.URLFormatCtxKey`. The middleware will\\ntrim the suffix from the routing path and continue routing.\\n\\nRouters should not include a url parameter for the suffix when using this middleware.\\n\\nSample usage.. for url paths: `/articles/1`, `/articles/1.json` and `/articles/1.xml`\\n\\n func routes() http.Handler {\\n   r := chi.NewRouter()\\n   r.Use(middleware.URLFormat)\\n\\n   r.Get(\\\"/articles/{id}\\\", ListArticles)\\n\\n   return r\\n }\\n\\n func ListArticles(w http.ResponseWriter, r *http.Request) {\\n\\t  urlFormat, _ := r.Context().Value(middleware.URLFormatCtxKey).(string)\\n\\n\\t  switch urlFormat {\\n\\t  case \\\"json\\\":\\n\\t  \\trender.JSON(w, r, articles)\\n\\t  case \\\"xml:\\\"\\n\\t  \\trender.XML(w, r, articles)\\n\\t  default:\\n\\t  \\trender.JSON(w, r, articles)\\n\\t  }\\n}\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/url_format.go\",\n        \"line\": 45\n      },\n      {\n        \"pkg\": \"github.com/go-chi/render\",\n        \"func\": \"SetContentType.func1\",\n        \"comment\": \"\",\n        \"file\": \"github.com/go-chi/render/content_type.go\",\n        \"line\": 49,\n        \"anonymous\": true\n      }\n    ],\n    \"routes\": {\n      \"/\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func1\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 69,\n            \"anonymous\": true\n          }\n        }\n      },\n      \"/admin/*\": {\n        \"router\": {\n          \"middlewares\": [\n            {\n              \"pkg\": \"\",\n              \"func\": \"main.AdminOnly\",\n              \"comment\": \"AdminOnly middleware restricts access to just administrators.\\n\",\n              \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n              \"line\": 238\n            }\n          ],\n          \"routes\": {\n            \"/\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func1\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 225,\n                  \"anonymous\": true\n                }\n              }\n            },\n            \"/accounts\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func2\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 228,\n                  \"anonymous\": true\n                }\n              }\n            },\n            \"/users/{userId}\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func3\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 231,\n                  \"anonymous\": true\n                }\n              }\n            }\n          }\n        }\n      },\n      \"/articles/*\": {\n        \"router\": {\n          \"middlewares\": [],\n          \"routes\": {\n            \"/\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [\n                    {\n                      \"pkg\": \"\",\n                      \"func\": \"main.paginate\",\n                      \"comment\": \"paginate is a stub, but very possible to implement middleware logic\\nto handle the request params for handling a paginated request.\\n\",\n                      \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                      \"line\": 251\n                    }\n                  ],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.ListArticles\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 117\n                },\n                \"POST\": {\n                  \"middlewares\": [],\n                  \"method\": \"POST\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.CreateArticle\",\n                  \"comment\": \"CreateArticle persists the posted Article and returns it\\nback to the client as an acknowledgement.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 158\n                }\n              }\n            },\n            \"/search\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.SearchArticles\",\n                  \"comment\": \"SearchArticles searches the Articles data for a matching article.\\nIt's just a stub, but you get the idea.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 152\n                }\n              }\n            },\n            \"/{articleID}/*\": {\n              \"router\": {\n                \"middlewares\": [\n                  {\n                    \"pkg\": \"\",\n                    \"func\": \"main.ArticleCtx\",\n                    \"comment\": \"ArticleCtx middleware is used to load an Article object from\\nthe URL parameters passed through as the request. In case\\nthe Article could not be found, we stop here and return a 404.\\n\",\n                    \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                    \"line\": 127\n                  }\n                ],\n                \"routes\": {\n                  \"/\": {\n                    \"handlers\": {\n                      \"DELETE\": {\n                        \"middlewares\": [],\n                        \"method\": \"DELETE\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.DeleteArticle\",\n                        \"comment\": \"DeleteArticle removes an existing Article from our persistent store.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 204\n                      },\n                      \"GET\": {\n                        \"middlewares\": [],\n                        \"method\": \"GET\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.GetArticle\",\n                        \"comment\": \"GetArticle returns the specific Article. You'll notice it just\\nfetches the Article right off the context, as its understood that\\nif we made it this far, the Article must be on the context. In case\\nits not due to a bug, then it will panic, and our Recoverer will save us.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 176\n                      },\n                      \"PUT\": {\n                        \"middlewares\": [],\n                        \"method\": \"PUT\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.UpdateArticle\",\n                        \"comment\": \"UpdateArticle updates an existing Article in our persistent store.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 189\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"/{articleSlug:[a-z-]+}\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [\n                    {\n                      \"pkg\": \"\",\n                      \"func\": \"main.ArticleCtx\",\n                      \"comment\": \"ArticleCtx middleware is used to load an Article object from\\nthe URL parameters passed through as the request. In case\\nthe Article could not be found, we stop here and return a 404.\\n\",\n                      \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                      \"line\": 127\n                    }\n                  ],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.GetArticle\",\n                  \"comment\": \"GetArticle returns the specific Article. You'll notice it just\\nfetches the Article right off the context, as its understood that\\nif we made it this far, the Article must be on the context. In case\\nits not due to a bug, then it will panic, and our Recoverer will save us.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 176\n                }\n              }\n            }\n          }\n        }\n      },\n      \"/panic\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func3\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 77,\n            \"anonymous\": true\n          }\n        }\n      },\n      \"/ping\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func2\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 73,\n            \"anonymous\": true\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/rest/routes.md",
    "content": "# github.com/go-chi/chi\n\nWelcome to the chi/_examples/rest generated docs.\n\n## Routes\n\n<details>\n<summary>`/`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/**\n\t- _GET_\n\t\t- [main.main.func1](/_examples/rest/main.go#L69)\n\n</details>\n<details>\n<summary>`/admin/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func1](/_examples/rest/main.go#L225)\n\n</details>\n<details>\n<summary>`/admin/*/accounts`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/accounts**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func2](/_examples/rest/main.go#L228)\n\n</details>\n<details>\n<summary>`/admin/*/users/{userId}`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/users/{userId}**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func3](/_examples/rest/main.go#L231)\n\n</details>\n<details>\n<summary>`/articles/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/**\n\t\t- _GET_\n\t\t\t- [main.paginate](/_examples/rest/main.go#L251)\n\t\t\t- [main.ListArticles](/_examples/rest/main.go#L117)\n\t\t- _POST_\n\t\t\t- [main.CreateArticle](/_examples/rest/main.go#L158)\n\n</details>\n<details>\n<summary>`/articles/*/search`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/search**\n\t\t- _GET_\n\t\t\t- [main.SearchArticles](/_examples/rest/main.go#L152)\n\n</details>\n<details>\n<summary>`/articles/*/{articleID}/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/{articleID}/***\n\t\t- [main.ArticleCtx](/_examples/rest/main.go#L127)\n\t\t- **/**\n\t\t\t- _DELETE_\n\t\t\t\t- [main.DeleteArticle](/_examples/rest/main.go#L204)\n\t\t\t- _GET_\n\t\t\t\t- [main.GetArticle](/_examples/rest/main.go#L176)\n\t\t\t- _PUT_\n\t\t\t\t- [main.UpdateArticle](/_examples/rest/main.go#L189)\n\n</details>\n<details>\n<summary>`/articles/*/{articleSlug:[a-z-]+}`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/{articleSlug:[a-z-]+}**\n\t\t- _GET_\n\t\t\t- [main.ArticleCtx](/_examples/rest/main.go#L127)\n\t\t\t- [main.GetArticle](/_examples/rest/main.go#L176)\n\n</details>\n<details>\n<summary>`/panic`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/panic**\n\t- _GET_\n\t\t- [main.main.func3](/_examples/rest/main.go#L77)\n\n</details>\n<details>\n<summary>`/ping`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/ping**\n\t- _GET_\n\t\t- [main.main.func2](/_examples/rest/main.go#L73)\n\n</details>\n\nTotal # of routes: 10\n\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/router-walk/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Route(\"/road\", func(r chi.Router) {\n\t\tr.Get(\"/left\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"left road\"))\n\t\t})\n\t\tr.Post(\"/right\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"right road\"))\n\t\t})\n\t})\n\n\tr.Put(\"/ping\", Ping)\n\n\twalkFunc := func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {\n\t\tfmt.Printf(\"%s %s\\n\", method, route)\n\t\treturn nil\n\t}\n\n\tif err := chi.Walk(r, walkFunc); err != nil {\n\t\tfmt.Printf(\"Logging err: %s\\n\", err.Error())\n\t}\n}\n\n// Ping returns pong\nfunc Ping(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"pong\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/todos-resource/main.go",
    "content": "//\n// Todos Resource\n// ==============\n// This example demonstrates a project structure that defines a subrouter and its\n// handlers on a struct, and mounting them as subrouters to a parent router.\n// See also _examples/rest for an in-depth example of a REST service, and apply\n// those same patterns to this structure.\n//\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.RealIP)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\".\"))\n\t})\n\n\tr.Mount(\"/users\", usersResource{}.Routes())\n\tr.Mount(\"/todos\", todosResource{}.Routes())\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/todos-resource/todos.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype todosResource struct{}\n\n// Routes creates a REST router for the todos resource\nfunc (rs todosResource) Routes() chi.Router {\n\tr := chi.NewRouter()\n\t// r.Use() // some middleware..\n\n\tr.Get(\"/\", rs.List)    // GET /todos - read a list of todos\n\tr.Post(\"/\", rs.Create) // POST /todos - create a new todo and persist it\n\tr.Put(\"/\", rs.Delete)\n\n\tr.Route(\"/{id}\", func(r chi.Router) {\n\t\t// r.Use(rs.TodoCtx) // lets have a todos map, and lets actually load/manipulate\n\t\tr.Get(\"/\", rs.Get)       // GET /todos/{id} - read a single todo by :id\n\t\tr.Put(\"/\", rs.Update)    // PUT /todos/{id} - update a single todo by :id\n\t\tr.Delete(\"/\", rs.Delete) // DELETE /todos/{id} - delete a single todo by :id\n\t\tr.Get(\"/sync\", rs.Sync)\n\t})\n\n\treturn r\n}\n\nfunc (rs todosResource) List(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todos list of stuff..\"))\n}\n\nfunc (rs todosResource) Create(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todos create\"))\n}\n\nfunc (rs todosResource) Get(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo get\"))\n}\n\nfunc (rs todosResource) Update(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo update\"))\n}\n\nfunc (rs todosResource) Delete(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo delete\"))\n}\n\nfunc (rs todosResource) Sync(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo sync\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/todos-resource/users.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype usersResource struct{}\n\n// Routes creates a REST router for the todos resource\nfunc (rs usersResource) Routes() chi.Router {\n\tr := chi.NewRouter()\n\t// r.Use() // some middleware..\n\n\tr.Get(\"/\", rs.List)    // GET /todos - read a list of todos\n\tr.Post(\"/\", rs.Create) // POST /todos - create a new todo and persist it\n\tr.Put(\"/\", rs.Delete)\n\n\tr.Route(\"/{id}\", func(r chi.Router) {\n\t\t// r.Use(rs.TodoCtx) // lets have a todos map, and lets actually load/manipulate\n\t\tr.Get(\"/\", rs.Get)       // GET /todos/{id} - read a single todo by :id\n\t\tr.Put(\"/\", rs.Update)    // PUT /todos/{id} - update a single todo by :id\n\t\tr.Delete(\"/\", rs.Delete) // DELETE /todos/{id} - delete a single todo by :id\n\t})\n\n\treturn r\n}\n\nfunc (rs usersResource) List(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa list of stuff..\"))\n}\n\nfunc (rs usersResource) Create(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa create\"))\n}\n\nfunc (rs usersResource) Get(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa get\"))\n}\n\nfunc (rs usersResource) Update(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa update\"))\n}\n\nfunc (rs usersResource) Delete(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa delete\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/data/article.go",
    "content": "package data\n\n// Article is runtime object, that's not meant to be sent via REST.\ntype Article struct {\n\tID                     int      `db:\"id\" json:\"id\" xml:\"id\"`\n\tTitle                  string   `db:\"title\" json:\"title\" xml:\"title\"`\n\tData                   []string `db:\"data,stringarray\" json:\"data\" xml:\"data\"`\n\tCustomDataForAuthUsers string   `db:\"custom_data\" json:\"-\" xml:\"-\"`\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/data/errors.go",
    "content": "package data\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/render\"\n)\n\nvar (\n\tErrUnauthorized = errors.New(\"Unauthorized\")\n\tErrForbidden    = errors.New(\"Forbidden\")\n\tErrNotFound     = errors.New(\"Resource not found\")\n)\n\nfunc PresentError(r *http.Request, err error) (*http.Request, interface{}) {\n\tswitch err {\n\tcase ErrUnauthorized:\n\t\trender.Status(r, 401)\n\tcase ErrForbidden:\n\t\trender.Status(r, 403)\n\tcase ErrNotFound:\n\t\trender.Status(r, 404)\n\tdefault:\n\t\trender.Status(r, 500)\n\t}\n\treturn r, map[string]string{\"error\": err.Error()}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/main.go",
    "content": "//\n// Versions\n// ========\n// This example demonstrates the use of the render subpackage, with\n// a quick concept for how to support multiple api versions.\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v1\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v2\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v3\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/render\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\t// API version 3.\n\tr.Route(\"/v3\", func(r chi.Router) {\n\t\tr.Use(apiVersionCtx(\"v3\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\t// API version 2.\n\tr.Route(\"/v2\", func(r chi.Router) {\n\t\tr.Use(apiVersionCtx(\"v2\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\t// API version 1.\n\tr.Route(\"/v1\", func(r chi.Router) {\n\t\tr.Use(randomErrorMiddleware) // Simulate random error, ie. version 1 is buggy.\n\t\tr.Use(apiVersionCtx(\"v1\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc apiVersionCtx(version string) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), \"api.version\", version))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n}\n\nfunc articleRouter() http.Handler {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", listArticles)\n\tr.Route(\"/{articleID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", getArticle)\n\t\t// r.Put(\"/\", updateArticle)\n\t\t// r.Delete(\"/\", deleteArticle)\n\t})\n\treturn r\n}\n\nfunc listArticles(w http.ResponseWriter, r *http.Request) {\n\tarticles := make(chan render.Renderer, 5)\n\n\t// Load data asynchronously into the channel (simulate slow storage):\n\tgo func() {\n\t\tfor i := 1; i <= 10; i++ {\n\t\t\tarticle := &data.Article{\n\t\t\t\tID:    i,\n\t\t\t\tTitle: fmt.Sprintf(\"Article #%v\", i),\n\t\t\t\tData:  []string{\"one\", \"two\", \"three\", \"four\"},\n\t\t\t\tCustomDataForAuthUsers: \"secret data for auth'd users only\",\n\t\t\t}\n\n\t\t\tapiVersion := r.Context().Value(\"api.version\").(string)\n\t\t\tswitch apiVersion {\n\t\t\tcase \"v1\":\n\t\t\t\tarticles <- v1.NewArticleResponse(article)\n\t\t\tcase \"v2\":\n\t\t\t\tarticles <- v2.NewArticleResponse(article)\n\t\t\tdefault:\n\t\t\t\tarticles <- v3.NewArticleResponse(article)\n\t\t\t}\n\n\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t}\n\t\tclose(articles)\n\t}()\n\n\t// Start streaming data from the channel.\n\trender.Respond(w, r, articles)\n}\n\nfunc getArticle(w http.ResponseWriter, r *http.Request) {\n\t// Load article.\n\tif chi.URLParam(r, \"articleID\") != \"1\" {\n\t\trender.Respond(w, r, data.ErrNotFound)\n\t\treturn\n\t}\n\tarticle := &data.Article{\n\t\tID:    1,\n\t\tTitle: \"Article #1\",\n\t\tData:  []string{\"one\", \"two\", \"three\", \"four\"},\n\t\tCustomDataForAuthUsers: \"secret data for auth'd users only\",\n\t}\n\n\t// Simulate some context values:\n\t// 1. ?auth=true simluates authenticated session/user.\n\t// 2. ?error=true simulates random error.\n\tif r.URL.Query().Get(\"auth\") != \"\" {\n\t\tr = r.WithContext(context.WithValue(r.Context(), \"auth\", true))\n\t}\n\tif r.URL.Query().Get(\"error\") != \"\" {\n\t\trender.Respond(w, r, errors.New(\"error\"))\n\t\treturn\n\t}\n\n\tvar payload render.Renderer\n\n\tapiVersion := r.Context().Value(\"api.version\").(string)\n\tswitch apiVersion {\n\tcase \"v1\":\n\t\tpayload = v1.NewArticleResponse(article)\n\tcase \"v2\":\n\t\tpayload = v2.NewArticleResponse(article)\n\tdefault:\n\t\tpayload = v3.NewArticleResponse(article)\n\t}\n\n\trender.Render(w, r, payload)\n}\n\nfunc randomErrorMiddleware(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\trand.Seed(time.Now().Unix())\n\n\t\t// One in three chance of random error.\n\t\tif rand.Int31n(3) == 0 {\n\t\t\terrors := []error{data.ErrUnauthorized, data.ErrForbidden, data.ErrNotFound}\n\t\t\trender.Respond(w, r, errors[rand.Intn(len(errors))])\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/presenter/v1/article.go",
    "content": "package v1\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 1.\ntype Article struct {\n\t*data.Article\n\n\tData map[string]bool `json:\"data\" xml:\"data\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/presenter/v2/article.go",
    "content": "package v2\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 2.\ntype Article struct {\n\t// *v3.Article `json:\",inline\" xml:\",inline\"`\n\n\t*data.Article\n\n\t// Additional fields.\n\tSelfURL string `json:\"self_url\" xml:\"self_url\"`\n\n\t// Omitted fields.\n\tURL interface{} `json:\"url,omitempty\" xml:\"url,omitempty\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\ta.SelfURL = fmt.Sprintf(\"http://localhost:3333/v2?id=%v\", a.ID)\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/_examples/versions/presenter/v3/article.go",
    "content": "package v3\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 2.\ntype Article struct {\n\t*data.Article `json:\",inline\" xml:\",inline\"`\n\n\t// Additional fields.\n\tURL        string `json:\"url\" xml:\"url\"`\n\tViewsCount int64  `json:\"views_count\" xml:\"views_count\"`\n\tAPIVersion string `json:\"api_version\" xml:\"api_version\"`\n\n\t// Omitted fields.\n\t// Show custom_data explicitly for auth'd users only.\n\tCustomDataForAuthUsers interface{} `json:\"custom_data,omitempty\" xml:\"custom_data,omitempty\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\ta.ViewsCount = rand.Int63n(100000)\n\ta.URL = fmt.Sprintf(\"http://localhost:3333/v3/?id=%v\", a.ID)\n\n\t// Only show to auth'd user.\n\tif _, ok := r.Context().Value(\"auth\").(bool); ok {\n\t\ta.CustomDataForAuthUsers = a.Article.CustomDataForAuthUsers\n\t}\n\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/chain.go",
    "content": "package chi\n\nimport \"net/http\"\n\n// Chain returns a Middlewares type from a slice of middleware handlers.\nfunc Chain(middlewares ...func(http.Handler) http.Handler) Middlewares {\n\treturn Middlewares(middlewares)\n}\n\n// Handler builds and returns a http.Handler from the chain of middlewares,\n// with `h http.Handler` as the final handler.\nfunc (mws Middlewares) Handler(h http.Handler) http.Handler {\n\treturn &ChainHandler{mws, h, chain(mws, h)}\n}\n\n// HandlerFunc builds and returns a http.Handler from the chain of middlewares,\n// with `h http.Handler` as the final handler.\nfunc (mws Middlewares) HandlerFunc(h http.HandlerFunc) http.Handler {\n\treturn &ChainHandler{mws, h, chain(mws, h)}\n}\n\n// ChainHandler is a http.Handler with support for handler composition and\n// execution.\ntype ChainHandler struct {\n\tMiddlewares Middlewares\n\tEndpoint    http.Handler\n\tchain       http.Handler\n}\n\nfunc (c *ChainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tc.chain.ServeHTTP(w, r)\n}\n\n// chain builds a http.Handler composed of an inline middleware stack and endpoint\n// handler in the order they are passed.\nfunc chain(middlewares []func(http.Handler) http.Handler, endpoint http.Handler) http.Handler {\n\t// Return ahead of time if there aren't any middlewares for the chain\n\tif len(middlewares) == 0 {\n\t\treturn endpoint\n\t}\n\n\t// Wrap the end handler with the middleware chain\n\th := middlewares[len(middlewares)-1](endpoint)\n\tfor i := len(middlewares) - 2; i >= 0; i-- {\n\t\th = middlewares[i](h)\n\t}\n\n\treturn h\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/chi.go",
    "content": "//\n// Package chi is a small, idiomatic and composable router for building HTTP services.\n//\n// chi requires Go 1.7 or newer.\n//\n// Example:\n//  package main\n//\n//  import (\n//  \t\"net/http\"\n//\n//  \t\"github.com/go-chi/chi\"\n//  \t\"github.com/go-chi/chi/middleware\"\n//  )\n//\n//  func main() {\n//  \tr := chi.NewRouter()\n//  \tr.Use(middleware.Logger)\n//  \tr.Use(middleware.Recoverer)\n//\n//  \tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n//  \t\tw.Write([]byte(\"root.\"))\n//  \t})\n//\n//  \thttp.ListenAndServe(\":3333\", r)\n//  }\n//\n// See github.com/go-chi/chi/_examples/ for more in-depth examples.\n//\n// URL patterns allow for easy matching of path components in HTTP\n// requests. The matching components can then be accessed using\n// chi.URLParam(). All patterns must begin with a slash.\n//\n// A simple named placeholder {name} matches any sequence of characters\n// up to the next / or the end of the URL. Trailing slashes on paths must\n// be handled explicitly.\n//\n// A placeholder with a name followed by a colon allows a regular\n// expression match, for example {number:\\\\d+}. The regular expression\n// syntax is Go's normal regexp RE2 syntax, except that regular expressions\n// including { or } are not supported, and / will never be\n// matched. An anonymous regexp pattern is allowed, using an empty string\n// before the colon in the placeholder, such as {:\\\\d+}\n//\n// The special placeholder of asterisk matches the rest of the requested\n// URL. Any trailing characters in the pattern are ignored. This is the only\n// placeholder which will match / characters.\n//\n// Examples:\n//  \"/user/{name}\" matches \"/user/jsmith\" but not \"/user/jsmith/info\" or \"/user/jsmith/\"\n//  \"/user/{name}/info\" matches \"/user/jsmith/info\"\n//  \"/page/*\" matches \"/page/intro/latest\"\n//  \"/page/*/index\" also matches \"/page/intro/latest\"\n//  \"/date/{yyyy:\\\\d\\\\d\\\\d\\\\d}/{mm:\\\\d\\\\d}/{dd:\\\\d\\\\d}\" matches \"/date/2017/04/01\"\n//\npackage chi\n\nimport \"net/http\"\n\n// NewRouter returns a new Mux object that implements the Router interface.\nfunc NewRouter() *Mux {\n\treturn NewMux()\n}\n\n// Router consisting of the core routing methods used by chi's Mux,\n// using only the standard net/http.\ntype Router interface {\n\thttp.Handler\n\tRoutes\n\n\t// Use appends one of more middlewares onto the Router stack.\n\tUse(middlewares ...func(http.Handler) http.Handler)\n\n\t// With adds inline middlewares for an endpoint handler.\n\tWith(middlewares ...func(http.Handler) http.Handler) Router\n\n\t// Group adds a new inline-Router along the current routing\n\t// path, with a fresh middleware stack for the inline-Router.\n\tGroup(fn func(r Router)) Router\n\n\t// Route mounts a sub-Router along a `pattern`` string.\n\tRoute(pattern string, fn func(r Router)) Router\n\n\t// Mount attaches another http.Handler along ./pattern/*\n\tMount(pattern string, h http.Handler)\n\n\t// Handle and HandleFunc adds routes for `pattern` that matches\n\t// all HTTP methods.\n\tHandle(pattern string, h http.Handler)\n\tHandleFunc(pattern string, h http.HandlerFunc)\n\n\t// Method and MethodFunc adds routes for `pattern` that matches\n\t// the `method` HTTP method.\n\tMethod(method, pattern string, h http.Handler)\n\tMethodFunc(method, pattern string, h http.HandlerFunc)\n\n\t// HTTP-method routing along `pattern`\n\tConnect(pattern string, h http.HandlerFunc)\n\tDelete(pattern string, h http.HandlerFunc)\n\tGet(pattern string, h http.HandlerFunc)\n\tHead(pattern string, h http.HandlerFunc)\n\tOptions(pattern string, h http.HandlerFunc)\n\tPatch(pattern string, h http.HandlerFunc)\n\tPost(pattern string, h http.HandlerFunc)\n\tPut(pattern string, h http.HandlerFunc)\n\tTrace(pattern string, h http.HandlerFunc)\n\n\t// NotFound defines a handler to respond whenever a route could\n\t// not be found.\n\tNotFound(h http.HandlerFunc)\n\n\t// MethodNotAllowed defines a handler to respond whenever a method is\n\t// not allowed.\n\tMethodNotAllowed(h http.HandlerFunc)\n}\n\n// Routes interface adds two methods for router traversal, which is also\n// used by the `docgen` subpackage to generation documentation for Routers.\ntype Routes interface {\n\t// Routes returns the routing tree in an easily traversable structure.\n\tRoutes() []Route\n\n\t// Middlewares returns the list of middlewares in use by the router.\n\tMiddlewares() Middlewares\n\n\t// Match searches the routing tree for a handler that matches\n\t// the method/path - similar to routing a http request, but without\n\t// executing the handler thereafter.\n\tMatch(rctx *Context, method, path string) bool\n}\n\n// Middlewares type is a slice of standard middleware handlers with methods\n// to compose middleware chains and http.Handler's.\ntype Middlewares []func(http.Handler) http.Handler\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/context.go",
    "content": "package chi\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"net/http\"\n\t\"strings\"\n)\n\nvar (\n\t// RouteCtxKey is the context.Context key to store the request context.\n\tRouteCtxKey = &contextKey{\"RouteContext\"}\n)\n\n// Context is the default routing context set on the root node of a\n// request context to track route patterns, URL parameters and\n// an optional routing path.\ntype Context struct {\n\tRoutes Routes\n\n\t// Routing path/method override used during the route search.\n\t// See Mux#routeHTTP method.\n\tRoutePath   string\n\tRouteMethod string\n\n\t// Routing pattern stack throughout the lifecycle of the request,\n\t// across all connected routers. It is a record of all matching\n\t// patterns across a stack of sub-routers.\n\tRoutePatterns []string\n\n\t// URLParams are the stack of routeParams captured during the\n\t// routing lifecycle across a stack of sub-routers.\n\tURLParams RouteParams\n\n\t// The endpoint routing pattern that matched the request URI path\n\t// or `RoutePath` of the current sub-router. This value will update\n\t// during the lifecycle of a request passing through a stack of\n\t// sub-routers.\n\troutePattern string\n\n\t// Route parameters matched for the current sub-router. It is\n\t// intentionally unexported so it cant be tampered.\n\trouteParams RouteParams\n\n\t// methodNotAllowed hint\n\tmethodNotAllowed bool\n}\n\n// NewRouteContext returns a new routing Context object.\nfunc NewRouteContext() *Context {\n\treturn &Context{}\n}\n\n// Reset a routing context to its initial state.\nfunc (x *Context) Reset() {\n\tx.Routes = nil\n\tx.RoutePath = \"\"\n\tx.RouteMethod = \"\"\n\tx.RoutePatterns = x.RoutePatterns[:0]\n\tx.URLParams.Keys = x.URLParams.Keys[:0]\n\tx.URLParams.Values = x.URLParams.Values[:0]\n\n\tx.routePattern = \"\"\n\tx.routeParams.Keys = x.routeParams.Keys[:0]\n\tx.routeParams.Values = x.routeParams.Values[:0]\n\tx.methodNotAllowed = false\n}\n\n// URLParam returns the corresponding URL parameter value from the request\n// routing context.\nfunc (x *Context) URLParam(key string) string {\n\tfor k := len(x.URLParams.Keys) - 1; k >= 0; k-- {\n\t\tif x.URLParams.Keys[k] == key {\n\t\t\treturn x.URLParams.Values[k]\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// RoutePattern builds the routing pattern string for the particular\n// request, at the particular point during routing. This means, the value\n// will change throughout the execution of a request in a router. That is\n// why its advised to only use this value after calling the next handler.\n//\n// For example,\n//\n// func Instrument(next http.Handler) http.Handler {\n//   return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n//     next.ServeHTTP(w, r)\n//     routePattern := chi.RouteContext(r.Context()).RoutePattern()\n//     measure(w, r, routePattern)\n// \t })\n// }\nfunc (x *Context) RoutePattern() string {\n\troutePattern := strings.Join(x.RoutePatterns, \"\")\n\treturn strings.Replace(routePattern, \"/*/\", \"/\", -1)\n}\n\n// RouteContext returns chi's routing Context object from a\n// http.Request Context.\nfunc RouteContext(ctx context.Context) *Context {\n\treturn ctx.Value(RouteCtxKey).(*Context)\n}\n\n// URLParam returns the url parameter from a http.Request object.\nfunc URLParam(r *http.Request, key string) string {\n\tif rctx := RouteContext(r.Context()); rctx != nil {\n\t\treturn rctx.URLParam(key)\n\t}\n\treturn \"\"\n}\n\n// URLParamFromCtx returns the url parameter from a http.Request Context.\nfunc URLParamFromCtx(ctx context.Context, key string) string {\n\tif rctx := RouteContext(ctx); rctx != nil {\n\t\treturn rctx.URLParam(key)\n\t}\n\treturn \"\"\n}\n\n// RouteParams is a structure to track URL routing parameters efficiently.\ntype RouteParams struct {\n\tKeys, Values []string\n}\n\n// Add will append a URL parameter to the end of the route param\nfunc (s *RouteParams) Add(key, value string) {\n\t(*s).Keys = append((*s).Keys, key)\n\t(*s).Values = append((*s).Values, value)\n}\n\n// ServerBaseContext wraps an http.Handler to set the request context to the\n// `baseCtx`.\nfunc ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler {\n\tfn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\t\tbaseCtx := baseCtx\n\n\t\t// Copy over default net/http server context keys\n\t\tif v, ok := ctx.Value(http.ServerContextKey).(*http.Server); ok {\n\t\t\tbaseCtx = context.WithValue(baseCtx, http.ServerContextKey, v)\n\t\t}\n\t\tif v, ok := ctx.Value(http.LocalAddrContextKey).(net.Addr); ok {\n\t\t\tbaseCtx = context.WithValue(baseCtx, http.LocalAddrContextKey, v)\n\t\t}\n\n\t\th.ServeHTTP(w, r.WithContext(baseCtx))\n\t})\n\treturn fn\n}\n\n// contextKey is a value for use with context.WithValue. It's used as\n// a pointer so it fits in an interface{} without allocation. This technique\n// for defining context keys was copied from Go 1.7's new use of context in net/http.\ntype contextKey struct {\n\tname string\n}\n\nfunc (k *contextKey) String() string {\n\treturn \"chi context value \" + k.name\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/closenotify17.go",
    "content": "// +build go1.7,!go1.8\n\npackage middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// CloseNotify is a middleware that cancels ctx when the underlying\n// connection has gone away. It can be used to cancel long operations\n// on the server when the client disconnects before the response is ready.\n//\n// Note: this behaviour is standard in Go 1.8+, so the middleware does nothing\n// on 1.8+ and exists just for backwards compatibility.\nfunc CloseNotify(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tcn, ok := w.(http.CloseNotifier)\n\t\tif !ok {\n\t\t\tpanic(\"chi/middleware: CloseNotify expects http.ResponseWriter to implement http.CloseNotifier interface\")\n\t\t}\n\t\tcloseNotifyCh := cn.CloseNotify()\n\n\t\tctx, cancel := context.WithCancel(r.Context())\n\t\tdefer cancel()\n\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\treturn\n\t\t\tcase <-closeNotifyCh:\n\t\t\t\tcancel()\n\t\t\t\treturn\n\t\t\t}\n\t\t}()\n\n\t\tr = r.WithContext(ctx)\n\t\tnext.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/closenotify18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"net/http\"\n)\n\n// CloseNotify is a middleware that cancels ctx when the underlying\n// connection has gone away. It can be used to cancel long operations\n// on the server when the client disconnects before the response is ready.\n//\n// Note: this behaviour is standard in Go 1.8+, so the middleware does nothing\n// on 1.8+ and exists just for backwards compatibility.\nfunc CloseNotify(next http.Handler) http.Handler {\n\treturn next\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/compress.go",
    "content": "package middleware\n\nimport (\n\t\"bufio\"\n\t\"compress/flate\"\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"strings\"\n)\n\ntype encoding int\n\nconst (\n\tencodingNone encoding = iota\n\tencodingGzip\n\tencodingDeflate\n)\n\nvar defaultContentTypes = map[string]struct{}{\n\t\"text/html\":                struct{}{},\n\t\"text/css\":                 struct{}{},\n\t\"text/plain\":               struct{}{},\n\t\"text/javascript\":          struct{}{},\n\t\"application/javascript\":   struct{}{},\n\t\"application/x-javascript\": struct{}{},\n\t\"application/json\":         struct{}{},\n\t\"application/atom+xml\":     struct{}{},\n\t\"application/rss+xml\":      struct{}{},\n}\n\n// DefaultCompress is a middleware that compresses response\n// body of predefined content types to a data format based\n// on Accept-Encoding request header. It uses a default\n// compression level.\nfunc DefaultCompress(next http.Handler) http.Handler {\n\treturn Compress(flate.DefaultCompression)(next)\n}\n\n// Compress is a middleware that compresses response\n// body of a given content types to a data format based\n// on Accept-Encoding request header. It uses a given\n// compression level.\nfunc Compress(level int, types ...string) func(next http.Handler) http.Handler {\n\tcontentTypes := defaultContentTypes\n\tif len(types) > 0 {\n\t\tcontentTypes = make(map[string]struct{}, len(types))\n\t\tfor _, t := range types {\n\t\t\tcontentTypes[t] = struct{}{}\n\t\t}\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tmcw := &maybeCompressResponseWriter{\n\t\t\t\tResponseWriter: w,\n\t\t\t\tw:              w,\n\t\t\t\tcontentTypes:   contentTypes,\n\t\t\t\tencoding:       selectEncoding(r.Header),\n\t\t\t\tlevel:          level,\n\t\t\t}\n\t\t\tdefer mcw.Close()\n\n\t\t\tnext.ServeHTTP(mcw, r)\n\t\t}\n\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\nfunc selectEncoding(h http.Header) encoding {\n\tenc := h.Get(\"Accept-Encoding\")\n\n\tswitch {\n\t// TODO:\n\t// case \"br\":    // Brotli, experimental. Firefox 2016, to-be-in Chromium.\n\t// case \"lzma\":  // Opera.\n\t// case \"sdch\":  // Chrome, Android. Gzip output + dictionary header.\n\n\tcase strings.Contains(enc, \"gzip\"):\n\t\t// TODO: Exception for old MSIE browsers that can't handle non-HTML?\n\t\t// https://zoompf.com/blog/2012/02/lose-the-wait-http-compression\n\t\treturn encodingGzip\n\n\tcase strings.Contains(enc, \"deflate\"):\n\t\t// HTTP 1.1 \"deflate\" (RFC 2616) stands for DEFLATE data (RFC 1951)\n\t\t// wrapped with zlib (RFC 1950). The zlib wrapper uses Adler-32\n\t\t// checksum compared to CRC-32 used in \"gzip\" and thus is faster.\n\t\t//\n\t\t// But.. some old browsers (MSIE, Safari 5.1) incorrectly expect\n\t\t// raw DEFLATE data only, without the mentioned zlib wrapper.\n\t\t// Because of this major confusion, most modern browsers try it\n\t\t// both ways, first looking for zlib headers.\n\t\t// Quote by Mark Adler: http://stackoverflow.com/a/9186091/385548\n\t\t//\n\t\t// The list of browsers having problems is quite big, see:\n\t\t// http://zoompf.com/blog/2012/02/lose-the-wait-http-compression\n\t\t// https://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests/results\n\t\t//\n\t\t// That's why we prefer gzip over deflate. It's just more reliable\n\t\t// and not significantly slower than gzip.\n\t\treturn encodingDeflate\n\n\t\t// NOTE: Not implemented, intentionally:\n\t\t// case \"compress\": // LZW. Deprecated.\n\t\t// case \"bzip2\":    // Too slow on-the-fly.\n\t\t// case \"zopfli\":   // Too slow on-the-fly.\n\t\t// case \"xz\":       // Too slow on-the-fly.\n\t}\n\n\treturn encodingNone\n}\n\ntype maybeCompressResponseWriter struct {\n\thttp.ResponseWriter\n\tw            io.Writer\n\tencoding     encoding\n\tcontentTypes map[string]struct{}\n\tlevel        int\n\twroteHeader  bool\n}\n\nfunc (w *maybeCompressResponseWriter) WriteHeader(code int) {\n\tif w.wroteHeader {\n\t\treturn\n\t}\n\tw.wroteHeader = true\n\tdefer w.ResponseWriter.WriteHeader(code)\n\n\t// Already compressed data?\n\tif w.ResponseWriter.Header().Get(\"Content-Encoding\") != \"\" {\n\t\treturn\n\t}\n\t// The content-length after compression is unknown\n\tw.ResponseWriter.Header().Del(\"Content-Length\")\n\n\t// Parse the first part of the Content-Type response header.\n\tcontentType := \"\"\n\tparts := strings.Split(w.ResponseWriter.Header().Get(\"Content-Type\"), \";\")\n\tif len(parts) > 0 {\n\t\tcontentType = parts[0]\n\t}\n\n\t// Is the content type compressable?\n\tif _, ok := w.contentTypes[contentType]; !ok {\n\t\treturn\n\t}\n\n\t// Select the compress writer.\n\tswitch w.encoding {\n\tcase encodingGzip:\n\t\tgw, err := gzip.NewWriterLevel(w.ResponseWriter, w.level)\n\t\tif err != nil {\n\t\t\tw.w = w.ResponseWriter\n\t\t\treturn\n\t\t}\n\t\tw.w = gw\n\t\tw.ResponseWriter.Header().Set(\"Content-Encoding\", \"gzip\")\n\n\tcase encodingDeflate:\n\t\tdw, err := flate.NewWriter(w.ResponseWriter, w.level)\n\t\tif err != nil {\n\t\t\tw.w = w.ResponseWriter\n\t\t\treturn\n\t\t}\n\t\tw.w = dw\n\t\tw.ResponseWriter.Header().Set(\"Content-Encoding\", \"deflate\")\n\t}\n}\n\nfunc (w *maybeCompressResponseWriter) Write(p []byte) (int, error) {\n\tif !w.wroteHeader {\n\t\tw.WriteHeader(http.StatusOK)\n\t}\n\n\treturn w.w.Write(p)\n}\n\nfunc (w *maybeCompressResponseWriter) Flush() {\n\tif f, ok := w.w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n}\n\nfunc (w *maybeCompressResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\tif hj, ok := w.w.(http.Hijacker); ok {\n\t\treturn hj.Hijack()\n\t}\n\treturn nil, nil, errors.New(\"chi/middleware: http.Hijacker is unavailable on the writer\")\n}\n\nfunc (w *maybeCompressResponseWriter) CloseNotify() <-chan bool {\n\tif cn, ok := w.w.(http.CloseNotifier); ok {\n\t\treturn cn.CloseNotify()\n\t}\n\n\t// If the underlying writer does not implement http.CloseNotifier, return\n\t// a channel that never receives a value. The semantics here is that the\n\t// client never disconnnects before the request is processed by the\n\t// http.Handler, which is close enough to the default behavior (when\n\t// CloseNotify() is not even called).\n\treturn make(chan bool, 1)\n}\n\nfunc (w *maybeCompressResponseWriter) Close() error {\n\tif c, ok := w.w.(io.WriteCloser); ok {\n\t\treturn c.Close()\n\t}\n\treturn errors.New(\"chi/middleware: io.WriteCloser is unavailable on the writer\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/compress18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n)\n\nfunc (w *maybeCompressResponseWriter) Push(target string, opts *http.PushOptions) error {\n\tif ps, ok := w.w.(http.Pusher); ok {\n\t\treturn ps.Push(target, opts)\n\t}\n\treturn errors.New(\"chi/middleware: http.Pusher is unavailable on the writer\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/content_charset.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// ContentCharset generates a handler that writes a 415 Unsupported Media Type response if none of the charsets match.\n// An empty charset will allow requests with no Content-Type header or no specified charset.\nfunc ContentCharset(charsets ...string) func(next http.Handler) http.Handler {\n\tfor i, c := range charsets {\n\t\tcharsets[i] = strings.ToLower(c)\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif !contentEncoding(r.Header.Get(\"Content-Type\"), charsets...) {\n\t\t\t\tw.WriteHeader(http.StatusUnsupportedMediaType)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n}\n\n// Check the content encoding against a list of acceptable values.\nfunc contentEncoding(ce string, charsets ...string) bool {\n\t_, ce = split(strings.ToLower(ce), \";\")\n\t_, ce = split(ce, \"charset=\")\n\tce, _ = split(ce, \";\")\n\tfor _, c := range charsets {\n\t\tif ce == c {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Split a string in two parts, cleaning any whitespace.\nfunc split(str, sep string) (string, string) {\n\tvar a, b string\n\tvar parts = strings.SplitN(str, sep, 2)\n\ta = strings.TrimSpace(parts[0])\n\tif len(parts) == 2 {\n\t\tb = strings.TrimSpace(parts[1])\n\t}\n\n\treturn a, b\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/content_charset_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestContentCharset(t *testing.T) {\n\tt.Parallel()\n\n\tvar tests = []struct {\n\t\tname                string\n\t\tinputValue          string\n\t\tinputContentCharset []string\n\t\twant                int\n\t}{\n\t\t{\n\t\t\t\"should accept requests with a matching charset\",\n\t\t\t\"application/json; charset=UTF-8\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should be case-insensitive\",\n\t\t\t\"application/json; charset=utf-8\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with a matching charset with extra values\",\n\t\t\t\"application/json; foo=bar; charset=UTF-8; spam=eggs\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with a matching charset when multiple charsets are supported\",\n\t\t\t\"text/xml; charset=UTF-8\",\n\t\t\t[]string{\"UTF-8\", \"Latin-1\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with no charset if empty charset headers are allowed\",\n\t\t\t\"text/xml\",\n\t\t\t[]string{\"UTF-8\", \"\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with no charset if empty charset headers are not allowed\",\n\t\t\t\"text/xml\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with a mismatching charset\",\n\t\t\t\"text/plain; charset=Latin-1\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with a mismatching charset even if empty charsets are allowed\",\n\t\t\t\"text/plain; charset=Latin-1\",\n\t\t\t[]string{\"UTF-8\", \"\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tvar tt = tt\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tvar recorder = httptest.NewRecorder()\n\n\t\t\tvar r = chi.NewRouter()\n\t\t\tr.Use(ContentCharset(tt.inputContentCharset...))\n\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {})\n\n\t\t\tvar req, _ = http.NewRequest(\"GET\", \"/\", nil)\n\t\t\treq.Header.Set(\"Content-Type\", tt.inputValue)\n\n\t\t\tr.ServeHTTP(recorder, req)\n\t\t\tvar res = recorder.Result()\n\n\t\t\tif res.StatusCode != tt.want {\n\t\t\t\tt.Errorf(\"response is incorrect, got %d, want %d\", recorder.Code, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestSplit(t *testing.T) {\n\tt.Parallel()\n\n\tvar s1, s2 = split(\"  type1;type2  \", \";\")\n\n\tif s1 != \"type1\" || s2 != \"type2\" {\n\t\tt.Errorf(\"Want type1, type2 got %s, %s\", s1, s2)\n\t}\n\n\ts1, s2 = split(\"type1  \", \";\")\n\n\tif s1 != \"type1\" {\n\t\tt.Errorf(\"Want \\\"type1\\\" got \\\"%s\\\"\", s1)\n\t}\n}\n\nfunc TestContentEncoding(t *testing.T) {\n\tt.Parallel()\n\n\tif !contentEncoding(\"application/json; foo=bar; charset=utf-8; spam=eggs\", []string{\"utf-8\"}...) {\n\t\tt.Error(\"Want true, got false\")\n\t}\n\n\tif contentEncoding(\"text/plain; charset=latin-1\", []string{\"utf-8\"}...) {\n\t\tt.Error(\"Want false, got true\")\n\t}\n\n\tif !contentEncoding(\"text/xml; charset=UTF-8\", []string{\"latin-1\", \"utf-8\"}...) {\n\t\tt.Error(\"Want true, got false\")\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/content_type.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// SetHeader is a convenience handler to set a response header key/value\nfunc SetHeader(key, value string) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(key, value)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\n// AllowContentType enforces a whitelist of request Content-Types otherwise responds\n// with a 415 Unsupported Media Type status.\nfunc AllowContentType(contentTypes ...string) func(next http.Handler) http.Handler {\n\tcT := []string{}\n\tfor _, t := range contentTypes {\n\t\tcT = append(cT, strings.ToLower(t))\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\ts := strings.ToLower(strings.TrimSpace(r.Header.Get(\"Content-Type\")))\n\t\t\tif i := strings.Index(s, \";\"); i > -1 {\n\t\t\t\ts = s[0:i]\n\t\t\t}\n\n\t\t\tfor _, t := range cT {\n\t\t\t\tif t == s {\n\t\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tw.WriteHeader(http.StatusUnsupportedMediaType)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/get_head.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// GetHead automatically route undefined HEAD requests to GET handlers.\nfunc GetHead(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif r.Method == \"HEAD\" {\n\t\t\trctx := chi.RouteContext(r.Context())\n\t\t\troutePath := rctx.RoutePath\n\t\t\tif routePath == \"\" {\n\t\t\t\tif r.URL.RawPath != \"\" {\n\t\t\t\t\troutePath = r.URL.RawPath\n\t\t\t\t} else {\n\t\t\t\t\troutePath = r.URL.Path\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Temporary routing context to look-ahead before routing the request\n\t\t\ttctx := chi.NewRouteContext()\n\n\t\t\t// Attempt to find a HEAD handler for the routing path, if not found, traverse\n\t\t\t// the router as through its a GET route, but proceed with the request\n\t\t\t// with the HEAD method.\n\t\t\tif !rctx.Routes.Match(tctx, \"HEAD\", routePath) {\n\t\t\t\trctx.RouteMethod = \"GET\"\n\t\t\t\trctx.RoutePath = routePath\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/get_head_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestGetHead(t *testing.T) {\n\tr := chi.NewRouter()\n\tr.Use(GetHead)\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Test\", \"yes\")\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.Route(\"/articles\", func(r chi.Router) {\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := chi.URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-Article\", id)\n\t\t\tw.Write([]byte(\"article:\" + id))\n\t\t})\n\t})\n\tr.Route(\"/users\", func(r chi.Router) {\n\t\tr.Head(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"X-User\", \"-\")\n\t\t\tw.Write([]byte(\"user\"))\n\t\t})\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := chi.URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-User\", id)\n\t\t\tw.Write([]byte(\"user:\" + id))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/hi\", nil); body != \"\" || req.Header.Get(\"X-Test\") != \"yes\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"404 page not found\\n\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/\", nil); body != \"\" || req.StatusCode != 404 {\n\t\tt.Fatalf(body)\n\t}\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/articles/5\", nil); body != \"article:5\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/articles/5\", nil); body != \"\" || req.Header.Get(\"X-Article\") != \"5\" {\n\t\tt.Fatalf(\"expecting X-Article header '5' but got '%s'\", req.Header.Get(\"X-Article\"))\n\t}\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/users/1\", nil); body != \"user:1\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/users/1\", nil); body != \"\" || req.Header.Get(\"X-User\") != \"-\" {\n\t\tt.Fatalf(\"expecting X-User header '-' but got '%s'\", req.Header.Get(\"X-User\"))\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/heartbeat.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// Heartbeat endpoint middleware useful to setting up a path like\n// `/ping` that load balancers or uptime testing external services\n// can make a request before hitting any routes. It's also convenient\n// to place this above ACL middlewares as well.\nfunc Heartbeat(endpoint string) func(http.Handler) http.Handler {\n\tf := func(h http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif r.Method == \"GET\" && strings.EqualFold(r.URL.Path, endpoint) {\n\t\t\t\tw.Header().Set(\"Content-Type\", \"text/plain\")\n\t\t\t\tw.WriteHeader(http.StatusOK)\n\t\t\t\tw.Write([]byte(\".\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\th.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n\treturn f\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/logger.go",
    "content": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"time\"\n)\n\nvar (\n\t// LogEntryCtxKey is the context.Context key to store the request log entry.\n\tLogEntryCtxKey = &contextKey{\"LogEntry\"}\n\n\t// DefaultLogger is called by the Logger middleware handler to log each request.\n\t// Its made a package-level variable so that it can be reconfigured for custom\n\t// logging configurations.\n\tDefaultLogger = RequestLogger(&DefaultLogFormatter{Logger: log.New(os.Stdout, \"\", log.LstdFlags)})\n)\n\n// Logger is a middleware that logs the start and end of each request, along\n// with some useful data about what was requested, what the response status was,\n// and how long it took to return. When standard output is a TTY, Logger will\n// print in color, otherwise it will print in black and white. Logger prints a\n// request ID if one is provided.\n//\n// Alternatively, look at https://github.com/pressly/lg and the `lg.RequestLogger`\n// middleware pkg.\nfunc Logger(next http.Handler) http.Handler {\n\treturn DefaultLogger(next)\n}\n\n// RequestLogger returns a logger handler using a custom LogFormatter.\nfunc RequestLogger(f LogFormatter) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tentry := f.NewLogEntry(r)\n\t\t\tww := NewWrapResponseWriter(w, r.ProtoMajor)\n\n\t\t\tt1 := time.Now()\n\t\t\tdefer func() {\n\t\t\t\tentry.Write(ww.Status(), ww.BytesWritten(), time.Since(t1))\n\t\t\t}()\n\n\t\t\tnext.ServeHTTP(ww, WithLogEntry(r, entry))\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\n// LogFormatter initiates the beginning of a new LogEntry per request.\n// See DefaultLogFormatter for an example implementation.\ntype LogFormatter interface {\n\tNewLogEntry(r *http.Request) LogEntry\n}\n\n// LogEntry records the final log when a request completes.\n// See defaultLogEntry for an example implementation.\ntype LogEntry interface {\n\tWrite(status, bytes int, elapsed time.Duration)\n\tPanic(v interface{}, stack []byte)\n}\n\n// GetLogEntry returns the in-context LogEntry for a request.\nfunc GetLogEntry(r *http.Request) LogEntry {\n\tentry, _ := r.Context().Value(LogEntryCtxKey).(LogEntry)\n\treturn entry\n}\n\n// WithLogEntry sets the in-context LogEntry for a request.\nfunc WithLogEntry(r *http.Request, entry LogEntry) *http.Request {\n\tr = r.WithContext(context.WithValue(r.Context(), LogEntryCtxKey, entry))\n\treturn r\n}\n\n// LoggerInterface accepts printing to stdlib logger or compatible logger.\ntype LoggerInterface interface {\n\tPrint(v ...interface{})\n}\n\n// DefaultLogFormatter is a simple logger that implements a LogFormatter.\ntype DefaultLogFormatter struct {\n\tLogger LoggerInterface\n}\n\n// NewLogEntry creates a new LogEntry for the request.\nfunc (l *DefaultLogFormatter) NewLogEntry(r *http.Request) LogEntry {\n\tentry := &defaultLogEntry{\n\t\tDefaultLogFormatter: l,\n\t\trequest:             r,\n\t\tbuf:                 &bytes.Buffer{},\n\t}\n\n\treqID := GetReqID(r.Context())\n\tif reqID != \"\" {\n\t\tcW(entry.buf, nYellow, \"[%s] \", reqID)\n\t}\n\tcW(entry.buf, nCyan, \"\\\"\")\n\tcW(entry.buf, bMagenta, \"%s \", r.Method)\n\n\tscheme := \"http\"\n\tif r.TLS != nil {\n\t\tscheme = \"https\"\n\t}\n\tcW(entry.buf, nCyan, \"%s://%s%s %s\\\" \", scheme, r.Host, r.RequestURI, r.Proto)\n\n\tentry.buf.WriteString(\"from \")\n\tentry.buf.WriteString(r.RemoteAddr)\n\tentry.buf.WriteString(\" - \")\n\n\treturn entry\n}\n\ntype defaultLogEntry struct {\n\t*DefaultLogFormatter\n\trequest *http.Request\n\tbuf     *bytes.Buffer\n}\n\nfunc (l *defaultLogEntry) Write(status, bytes int, elapsed time.Duration) {\n\tswitch {\n\tcase status < 200:\n\t\tcW(l.buf, bBlue, \"%03d\", status)\n\tcase status < 300:\n\t\tcW(l.buf, bGreen, \"%03d\", status)\n\tcase status < 400:\n\t\tcW(l.buf, bCyan, \"%03d\", status)\n\tcase status < 500:\n\t\tcW(l.buf, bYellow, \"%03d\", status)\n\tdefault:\n\t\tcW(l.buf, bRed, \"%03d\", status)\n\t}\n\n\tcW(l.buf, bBlue, \" %dB\", bytes)\n\n\tl.buf.WriteString(\" in \")\n\tif elapsed < 500*time.Millisecond {\n\t\tcW(l.buf, nGreen, \"%s\", elapsed)\n\t} else if elapsed < 5*time.Second {\n\t\tcW(l.buf, nYellow, \"%s\", elapsed)\n\t} else {\n\t\tcW(l.buf, nRed, \"%s\", elapsed)\n\t}\n\n\tl.Logger.Print(l.buf.String())\n}\n\nfunc (l *defaultLogEntry) Panic(v interface{}, stack []byte) {\n\tpanicEntry := l.NewLogEntry(l.request).(*defaultLogEntry)\n\tcW(panicEntry.buf, bRed, \"panic: %+v\", v)\n\tl.Logger.Print(panicEntry.buf.String())\n\tl.Logger.Print(string(stack))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/middleware.go",
    "content": "package middleware\n\n// contextKey is a value for use with context.WithValue. It's used as\n// a pointer so it fits in an interface{} without allocation. This technique\n// for defining context keys was copied from Go 1.7's new use of context in net/http.\ntype contextKey struct {\n\tname string\n}\n\nfunc (k *contextKey) String() string {\n\treturn \"chi/middleware context value \" + k.name\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/middleware18_test.go",
    "content": "// +build go1.8\n\npackage middleware\n\nimport (\n\t\"crypto/tls\"\n\t\"io\"\n\t\"net/http\"\n\t\"testing\"\n\t\"time\"\n\n\t\"golang.org/x/net/http2\"\n)\n\n// NOTE: we must import `golang.org/x/net/http2` in order to explicitly enable\n// http2 transports for certain tests. The runtime pkg does not have this dependency\n// though as the transport configuration happens under the hood on go 1.7+.\n\nfunc TestWrapWriterHTTP2(t *testing.T) {\n\thandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t_, cn := w.(http.CloseNotifier)\n\t\tif !cn {\n\t\t\tt.Fatal(\"request should have been a http.CloseNotifier\")\n\t\t}\n\t\t_, fl := w.(http.Flusher)\n\t\tif !fl {\n\t\t\tt.Fatal(\"request should have been a http.Flusher\")\n\t\t}\n\t\t_, hj := w.(http.Hijacker)\n\t\tif hj {\n\t\t\tt.Fatal(\"request should not have been a http.Hijacker\")\n\t\t}\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif rf {\n\t\t\tt.Fatal(\"request should not have been a io.ReaderFrom\")\n\t\t}\n\t\t_, ps := w.(http.Pusher)\n\t\tif !ps {\n\t\t\tt.Fatal(\"request should have been a http.Pusher\")\n\t\t}\n\n\t\tw.Write([]byte(\"OK\"))\n\t})\n\n\twmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(NewWrapResponseWriter(w, r.ProtoMajor), r)\n\t\t})\n\t}\n\n\tserver := http.Server{\n\t\tAddr:    \":7072\",\n\t\tHandler: wmw(handler),\n\t}\n\t// By serving over TLS, we get HTTP2 requests\n\tgo server.ListenAndServeTLS(testdataDir+\"/cert.pem\", testdataDir+\"/key.pem\")\n\tdefer server.Close()\n\t// We need the server to start before making the request\n\ttime.Sleep(100 * time.Millisecond)\n\n\tclient := &http.Client{\n\t\tTransport: &http2.Transport{\n\t\t\tTLSClientConfig: &tls.Config{\n\t\t\t\t// The certificates we are using are self signed\n\t\t\t\tInsecureSkipVerify: true,\n\t\t\t},\n\t\t},\n\t}\n\n\tresp, err := client.Get(\"https://localhost:7072\")\n\tif err != nil {\n\t\tt.Fatalf(\"could not get server: %v\", err)\n\t}\n\tif resp.StatusCode != 200 {\n\t\tt.Fatalf(\"non 200 response: %v\", resp.StatusCode)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/middleware_test.go",
    "content": "package middleware\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"path\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"testing\"\n)\n\n// NOTE: we must import `golang.org/x/net/http2` in order to explicitly enable\n// http2 transports for certain tests. The runtime pkg does not have this dependency\n// though as the transport configuration happens under the hood on go 1.7+.\n\nvar testdataDir string\n\nfunc init() {\n\t_, filename, _, _ := runtime.Caller(0)\n\ttestdataDir = path.Join(path.Dir(filename), \"/../testdata\")\n}\n\nfunc testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\trespBody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\tdefer resp.Body.Close()\n\n\treturn resp, string(respBody)\n}\n\nfunc assertNoError(t *testing.T, err error) {\n\tif err != nil {\n\t\tt.Fatalf(\"expecting no error\")\n\t}\n}\n\nfunc assertError(t *testing.T, err error) {\n\tif err == nil {\n\t\tt.Fatalf(\"expecting error\")\n\t}\n}\n\nfunc assertEqual(t *testing.T, a, b interface{}) {\n\tif !reflect.DeepEqual(a, b) {\n\t\tt.Fatalf(\"expecting values to be equal but got: '%v' and '%v'\", a, b)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/nocache.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"net/http\"\n\t\"time\"\n)\n\n// Unix epoch time\nvar epoch = time.Unix(0, 0).Format(time.RFC1123)\n\n// Taken from https://github.com/mytrile/nocache\nvar noCacheHeaders = map[string]string{\n\t\"Expires\":         epoch,\n\t\"Cache-Control\":   \"no-cache, no-store, must-revalidate, private, max-age=0\",\n\t\"Pragma\":          \"no-cache\",\n\t\"X-Accel-Expires\": \"0\",\n}\n\nvar etagHeaders = []string{\n\t\"ETag\",\n\t\"If-Modified-Since\",\n\t\"If-Match\",\n\t\"If-None-Match\",\n\t\"If-Range\",\n\t\"If-Unmodified-Since\",\n}\n\n// NoCache is a simple piece of middleware that sets a number of HTTP headers to prevent\n// a router (or subrouter) from being cached by an upstream proxy and/or client.\n//\n// As per http://wiki.nginx.org/HttpProxyModule - NoCache sets:\n//      Expires: Thu, 01 Jan 1970 00:00:00 UTC\n//      Cache-Control: no-cache, private, max-age=0\n//      X-Accel-Expires: 0\n//      Pragma: no-cache (for HTTP/1.0 proxies/clients)\nfunc NoCache(h http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\n\t\t// Delete any ETag headers that may have been set\n\t\tfor _, v := range etagHeaders {\n\t\t\tif r.Header.Get(v) != \"\" {\n\t\t\t\tr.Header.Del(v)\n\t\t\t}\n\t\t}\n\n\t\t// Set our NoCache headers\n\t\tfor k, v := range noCacheHeaders {\n\t\t\tw.Header().Set(k, v)\n\t\t}\n\n\t\th.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/profiler.go",
    "content": "package middleware\n\nimport (\n\t\"expvar\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/pprof\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// Profiler is a convenient subrouter used for mounting net/http/pprof. ie.\n//\n//  func MyService() http.Handler {\n//    r := chi.NewRouter()\n//    // ..middlewares\n//    r.Mount(\"/debug\", middleware.Profiler())\n//    // ..routes\n//    return r\n//  }\nfunc Profiler() http.Handler {\n\tr := chi.NewRouter()\n\tr.Use(NoCache)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\thttp.Redirect(w, r, r.RequestURI+\"/pprof/\", 301)\n\t})\n\tr.HandleFunc(\"/pprof\", func(w http.ResponseWriter, r *http.Request) {\n\t\thttp.Redirect(w, r, r.RequestURI+\"/\", 301)\n\t})\n\n\tr.HandleFunc(\"/pprof/*\", pprof.Index)\n\tr.HandleFunc(\"/pprof/cmdline\", pprof.Cmdline)\n\tr.HandleFunc(\"/pprof/profile\", pprof.Profile)\n\tr.HandleFunc(\"/pprof/symbol\", pprof.Symbol)\n\tr.HandleFunc(\"/pprof/trace\", pprof.Trace)\n\tr.HandleFunc(\"/vars\", expVars)\n\n\treturn r\n}\n\n// Replicated from expvar.go as not public.\nfunc expVars(w http.ResponseWriter, r *http.Request) {\n\tfirst := true\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tfmt.Fprintf(w, \"{\\n\")\n\texpvar.Do(func(kv expvar.KeyValue) {\n\t\tif !first {\n\t\t\tfmt.Fprintf(w, \",\\n\")\n\t\t}\n\t\tfirst = false\n\t\tfmt.Fprintf(w, \"%q: %s\", kv.Key, kv.Value)\n\t})\n\tfmt.Fprintf(w, \"\\n}\\n\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/realip.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\nvar xForwardedFor = http.CanonicalHeaderKey(\"X-Forwarded-For\")\nvar xRealIP = http.CanonicalHeaderKey(\"X-Real-IP\")\n\n// RealIP is a middleware that sets a http.Request's RemoteAddr to the results\n// of parsing either the X-Forwarded-For header or the X-Real-IP header (in that\n// order).\n//\n// This middleware should be inserted fairly early in the middleware stack to\n// ensure that subsequent layers (e.g., request loggers) which examine the\n// RemoteAddr will see the intended value.\n//\n// You should only use this middleware if you can trust the headers passed to\n// you (in particular, the two headers this middleware uses), for example\n// because you have placed a reverse proxy like HAProxy or nginx in front of\n// Goji. If your reverse proxies are configured to pass along arbitrary header\n// values from the client, or if you use this middleware without a reverse\n// proxy, malicious clients will be able to make you very sad (or, depending on\n// how you're using RemoteAddr, vulnerable to an attack of some sort).\nfunc RealIP(h http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tif rip := realIP(r); rip != \"\" {\n\t\t\tr.RemoteAddr = rip\n\t\t}\n\t\th.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n\nfunc realIP(r *http.Request) string {\n\tvar ip string\n\n\tif xff := r.Header.Get(xForwardedFor); xff != \"\" {\n\t\ti := strings.Index(xff, \", \")\n\t\tif i == -1 {\n\t\t\ti = len(xff)\n\t\t}\n\t\tip = xff[:i]\n\t} else if xrip := r.Header.Get(xRealIP); xrip != \"\" {\n\t\tip = xrip\n\t}\n\n\treturn ip\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/realip_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestXRealIP(t *testing.T) {\n\treq, _ := http.NewRequest(\"GET\", \"/\", nil)\n\treq.Header.Add(\"X-Real-IP\", \"100.100.100.100\")\n\tw := httptest.NewRecorder()\n\n\tr := chi.NewRouter()\n\tr.Use(RealIP)\n\n\trealIP := \"\"\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\trealIP = r.RemoteAddr\n\t\tw.Write([]byte(\"Hello World\"))\n\t})\n\tr.ServeHTTP(w, req)\n\n\tif w.Code != 200 {\n\t\tt.Fatal(\"Response Code should be 200\")\n\t}\n\n\tif realIP != \"100.100.100.100\" {\n\t\tt.Fatal(\"Test get real IP error.\")\n\t}\n}\n\nfunc TestXForwardForIP(t *testing.T) {\n\treq, _ := http.NewRequest(\"GET\", \"/\", nil)\n\treq.Header.Add(\"X-Forwarded-For\", \"100.100.100.100\")\n\tw := httptest.NewRecorder()\n\n\tr := chi.NewRouter()\n\tr.Use(RealIP)\n\n\trealIP := \"\"\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\trealIP = r.RemoteAddr\n\t\tw.Write([]byte(\"Hello World\"))\n\t})\n\tr.ServeHTTP(w, req)\n\n\tif w.Code != 200 {\n\t\tt.Fatal(\"Response Code should be 200\")\n\t}\n\n\tif realIP != \"100.100.100.100\" {\n\t\tt.Fatal(\"Test get real IP error.\")\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/recoverer.go",
    "content": "package middleware\n\n// The original work was derived from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"runtime/debug\"\n)\n\n// Recoverer is a middleware that recovers from panics, logs the panic (and a\n// backtrace), and returns a HTTP 500 (Internal Server Error) status if\n// possible. Recoverer prints a request ID if one is provided.\n//\n// Alternatively, look at https://github.com/pressly/lg middleware pkgs.\nfunc Recoverer(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tdefer func() {\n\t\t\tif rvr := recover(); rvr != nil {\n\n\t\t\t\tlogEntry := GetLogEntry(r)\n\t\t\t\tif logEntry != nil {\n\t\t\t\t\tlogEntry.Panic(rvr, debug.Stack())\n\t\t\t\t} else {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"Panic: %+v\\n\", rvr)\n\t\t\t\t\tdebug.PrintStack()\n\t\t\t\t}\n\n\t\t\t\thttp.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)\n\t\t\t}\n\t\t}()\n\n\t\tnext.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/request_id.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\t\"sync/atomic\"\n)\n\n// Key to use when setting the request ID.\ntype ctxKeyRequestID int\n\n// RequestIDKey is the key that holds th unique request ID in a request context.\nconst RequestIDKey ctxKeyRequestID = 0\n\nvar prefix string\nvar reqid uint64\n\n// A quick note on the statistics here: we're trying to calculate the chance that\n// two randomly generated base62 prefixes will collide. We use the formula from\n// http://en.wikipedia.org/wiki/Birthday_problem\n//\n// P[m, n] \\approx 1 - e^{-m^2/2n}\n//\n// We ballpark an upper bound for $m$ by imagining (for whatever reason) a server\n// that restarts every second over 10 years, for $m = 86400 * 365 * 10 = 315360000$\n//\n// For a $k$ character base-62 identifier, we have $n(k) = 62^k$\n//\n// Plugging this in, we find $P[m, n(10)] \\approx 5.75%$, which is good enough for\n// our purposes, and is surely more than anyone would ever need in practice -- a\n// process that is rebooted a handful of times a day for a hundred years has less\n// than a millionth of a percent chance of generating two colliding IDs.\n\nfunc init() {\n\thostname, err := os.Hostname()\n\tif hostname == \"\" || err != nil {\n\t\thostname = \"localhost\"\n\t}\n\tvar buf [12]byte\n\tvar b64 string\n\tfor len(b64) < 10 {\n\t\trand.Read(buf[:])\n\t\tb64 = base64.StdEncoding.EncodeToString(buf[:])\n\t\tb64 = strings.NewReplacer(\"+\", \"\", \"/\", \"\").Replace(b64)\n\t}\n\n\tprefix = fmt.Sprintf(\"%s/%s\", hostname, b64[0:10])\n}\n\n// RequestID is a middleware that injects a request ID into the context of each\n// request. A request ID is a string of the form \"host.example.com/random-0001\",\n// where \"random\" is a base62 random string that uniquely identifies this go\n// process, and where the last number is an atomically incremented request\n// counter.\nfunc RequestID(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tmyid := atomic.AddUint64(&reqid, 1)\n\t\tctx := r.Context()\n\t\tctx = context.WithValue(ctx, RequestIDKey, fmt.Sprintf(\"%s-%06d\", prefix, myid))\n\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t}\n\treturn http.HandlerFunc(fn)\n}\n\n// GetReqID returns a request ID from the given context if one is present.\n// Returns the empty string if a request ID cannot be found.\nfunc GetReqID(ctx context.Context) string {\n\tif ctx == nil {\n\t\treturn \"\"\n\t}\n\tif reqID, ok := ctx.Value(RequestIDKey).(string); ok {\n\t\treturn reqID\n\t}\n\treturn \"\"\n}\n\n// NextRequestID generates the next request ID in the sequence.\nfunc NextRequestID() uint64 {\n\treturn atomic.AddUint64(&reqid, 1)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/strip.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// StripSlashes is a middleware that will match request paths with a trailing\n// slash, strip it from the path and continue routing through the mux, if a route\n// matches, then it will serve the handler.\nfunc StripSlashes(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tvar path string\n\t\trctx := chi.RouteContext(r.Context())\n\t\tif rctx.RoutePath != \"\" {\n\t\t\tpath = rctx.RoutePath\n\t\t} else {\n\t\t\tpath = r.URL.Path\n\t\t}\n\t\tif len(path) > 1 && path[len(path)-1] == '/' {\n\t\t\trctx.RoutePath = path[:len(path)-1]\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n\n// RedirectSlashes is a middleware that will match request paths with a trailing\n// slash and redirect to the same path, less the trailing slash.\nfunc RedirectSlashes(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tvar path string\n\t\trctx := chi.RouteContext(r.Context())\n\t\tif rctx.RoutePath != \"\" {\n\t\t\tpath = rctx.RoutePath\n\t\t} else {\n\t\t\tpath = r.URL.Path\n\t\t}\n\t\tif len(path) > 1 && path[len(path)-1] == '/' {\n\t\t\tpath = path[:len(path)-1]\n\t\t\thttp.Redirect(w, r, path, 301)\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/strip_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestStripSlashes(t *testing.T) {\n\tr := chi.NewRouter()\n\n\t// This middleware must be mounted at the top level of the router, not at the end-handler\n\t// because then it'll be too late and will end up in a 404\n\tr.Use(StripSlashes)\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, resp := testRequest(t, ts, \"GET\", \"/\", nil); resp != \"root\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"//\", nil); resp != \"root\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); resp != \"nothing here\" {\n\t\tt.Fatalf(resp)\n\t}\n}\n\nfunc TestStripSlashesInRoute(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Use(StripSlashes)\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"accounts index\"))\n\t\t})\n\t\tr.Get(\"/query\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, resp := testRequest(t, ts, \"GET\", \"/hi\", nil); resp != \"hi\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/hi/\", nil); resp != \"nothing here\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"accounts index\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"accounts index\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/query\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/query/\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n}\n\nfunc TestRedirectSlashes(t *testing.T) {\n\tr := chi.NewRouter()\n\n\t// This middleware must be mounted at the top level of the router, not at the end-handler\n\t// because then it'll be too late and will end up in a 404\n\tr.Use(RedirectSlashes)\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/\", nil); resp != \"root\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\t// NOTE: the testRequest client will follow the redirection..\n\tif req, resp := testRequest(t, ts, \"GET\", \"//\", nil); resp != \"root\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"admin\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\t// NOTE: the testRequest client will follow the redirection..\n\tif req, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"admin\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); resp != \"nothing here\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/terminal.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\nvar (\n\t// Normal colors\n\tnBlack   = []byte{'\\033', '[', '3', '0', 'm'}\n\tnRed     = []byte{'\\033', '[', '3', '1', 'm'}\n\tnGreen   = []byte{'\\033', '[', '3', '2', 'm'}\n\tnYellow  = []byte{'\\033', '[', '3', '3', 'm'}\n\tnBlue    = []byte{'\\033', '[', '3', '4', 'm'}\n\tnMagenta = []byte{'\\033', '[', '3', '5', 'm'}\n\tnCyan    = []byte{'\\033', '[', '3', '6', 'm'}\n\tnWhite   = []byte{'\\033', '[', '3', '7', 'm'}\n\t// Bright colors\n\tbBlack   = []byte{'\\033', '[', '3', '0', ';', '1', 'm'}\n\tbRed     = []byte{'\\033', '[', '3', '1', ';', '1', 'm'}\n\tbGreen   = []byte{'\\033', '[', '3', '2', ';', '1', 'm'}\n\tbYellow  = []byte{'\\033', '[', '3', '3', ';', '1', 'm'}\n\tbBlue    = []byte{'\\033', '[', '3', '4', ';', '1', 'm'}\n\tbMagenta = []byte{'\\033', '[', '3', '5', ';', '1', 'm'}\n\tbCyan    = []byte{'\\033', '[', '3', '6', ';', '1', 'm'}\n\tbWhite   = []byte{'\\033', '[', '3', '7', ';', '1', 'm'}\n\n\treset = []byte{'\\033', '[', '0', 'm'}\n)\n\nvar isTTY bool\n\nfunc init() {\n\t// This is sort of cheating: if stdout is a character device, we assume\n\t// that means it's a TTY. Unfortunately, there are many non-TTY\n\t// character devices, but fortunately stdout is rarely set to any of\n\t// them.\n\t//\n\t// We could solve this properly by pulling in a dependency on\n\t// code.google.com/p/go.crypto/ssh/terminal, for instance, but as a\n\t// heuristic for whether to print in color or in black-and-white, I'd\n\t// really rather not.\n\tfi, err := os.Stdout.Stat()\n\tif err == nil {\n\t\tm := os.ModeDevice | os.ModeCharDevice\n\t\tisTTY = fi.Mode()&m == m\n\t}\n}\n\n// colorWrite\nfunc cW(w io.Writer, color []byte, s string, args ...interface{}) {\n\tif isTTY {\n\t\tw.Write(color)\n\t}\n\tfmt.Fprintf(w, s, args...)\n\tif isTTY {\n\t\tw.Write(reset)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/throttle.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"time\"\n)\n\nconst (\n\terrCapacityExceeded = \"Server capacity exceeded.\"\n\terrTimedOut         = \"Timed out while waiting for a pending request to complete.\"\n\terrContextCanceled  = \"Context was canceled.\"\n)\n\nvar (\n\tdefaultBacklogTimeout = time.Second * 60\n)\n\n// Throttle is a middleware that limits number of currently processed requests\n// at a time.\nfunc Throttle(limit int) func(http.Handler) http.Handler {\n\treturn ThrottleBacklog(limit, 0, defaultBacklogTimeout)\n}\n\n// ThrottleBacklog is a middleware that limits number of currently processed\n// requests at a time and provides a backlog for holding a finite number of\n// pending requests.\nfunc ThrottleBacklog(limit int, backlogLimit int, backlogTimeout time.Duration) func(http.Handler) http.Handler {\n\tif limit < 1 {\n\t\tpanic(\"chi/middleware: Throttle expects limit > 0\")\n\t}\n\n\tif backlogLimit < 0 {\n\t\tpanic(\"chi/middleware: Throttle expects backlogLimit to be positive\")\n\t}\n\n\tt := throttler{\n\t\ttokens:         make(chan token, limit),\n\t\tbacklogTokens:  make(chan token, limit+backlogLimit),\n\t\tbacklogTimeout: backlogTimeout,\n\t}\n\n\t// Filling tokens.\n\tfor i := 0; i < limit+backlogLimit; i++ {\n\t\tif i < limit {\n\t\t\tt.tokens <- token{}\n\t\t}\n\t\tt.backlogTokens <- token{}\n\t}\n\n\tfn := func(h http.Handler) http.Handler {\n\t\tt.h = h\n\t\treturn &t\n\t}\n\n\treturn fn\n}\n\n// token represents a request that is being processed.\ntype token struct{}\n\n// throttler limits number of currently processed requests at a time.\ntype throttler struct {\n\th              http.Handler\n\ttokens         chan token\n\tbacklogTokens  chan token\n\tbacklogTimeout time.Duration\n}\n\n// ServeHTTP is the primary throttler request handler\nfunc (t *throttler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tctx := r.Context()\n\tselect {\n\tcase <-ctx.Done():\n\t\thttp.Error(w, errContextCanceled, http.StatusServiceUnavailable)\n\t\treturn\n\tcase btok := <-t.backlogTokens:\n\t\ttimer := time.NewTimer(t.backlogTimeout)\n\n\t\tdefer func() {\n\t\t\tt.backlogTokens <- btok\n\t\t}()\n\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\thttp.Error(w, errTimedOut, http.StatusServiceUnavailable)\n\t\t\treturn\n\t\tcase <-ctx.Done():\n\t\t\thttp.Error(w, errContextCanceled, http.StatusServiceUnavailable)\n\t\t\treturn\n\t\tcase tok := <-t.tokens:\n\t\t\tdefer func() {\n\t\t\t\tt.tokens <- tok\n\t\t\t}()\n\t\t\tt.h.ServeHTTP(w, r)\n\t\t}\n\t\treturn\n\tdefault:\n\t\thttp.Error(w, errCapacityExceeded, http.StatusServiceUnavailable)\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/throttle_test.go",
    "content": "package middleware\n\nimport (\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nvar testContent = []byte(\"Hello world!\")\n\nfunc TestThrottleBacklog(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(10, 50, time.Second*10))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 1) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 5, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\t// The throttler proccesses 10 consecutive requests, each one of those\n\t// requests lasts 1s. The maximum number of requests this can possible serve\n\t// before the clients time out (5s) is 40.\n\tfor i := 0; i < 40; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, testContent, buf)\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleClientTimeout(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(10, 50, time.Second*10))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 5) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 3, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\tfor i := 0; i < 10; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\t\t\t_, err := client.Get(server.URL)\n\t\t\tassertError(t, err)\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleTriggerGatewayTimeout(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(50, 100, time.Second*5))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 10) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 60, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\t// These requests will be processed normally until they finish.\n\tfor i := 0; i < 50; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\n\t\t}(i)\n\t}\n\n\ttime.Sleep(time.Second * 1)\n\n\t// These requests will wait for the first batch to complete but it will take\n\t// too much time, so they will eventually receive a timeout error.\n\tfor i := 0; i < 50; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusServiceUnavailable, res.StatusCode)\n\t\t\tassertEqual(t, errTimedOut, strings.TrimSpace(string(buf)))\n\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleMaximum(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(50, 50, time.Second*5))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 2) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 60, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, testContent, buf)\n\n\t\t}(i)\n\t}\n\n\t// Wait less time than what the server takes to reply.\n\ttime.Sleep(time.Second * 1)\n\n\t// At this point the server is still processing, all the following request\n\t// will be beyond the server capacity.\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusServiceUnavailable, res.StatusCode)\n\t\t\tassertEqual(t, errCapacityExceeded, strings.TrimSpace(string(buf)))\n\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/timeout.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Timeout is a middleware that cancels ctx after a given timeout and return\n// a 504 Gateway Timeout error to the client.\n//\n// It's required that you select the ctx.Done() channel to check for the signal\n// if the context has reached its deadline and return, otherwise the timeout\n// signal will be just ignored.\n//\n// ie. a route/handler may look like:\n//\n//  r.Get(\"/long\", func(ctx context.Context, w http.ResponseWriter, r *http.Request) {\n// \t processTime := time.Duration(rand.Intn(4)+1) * time.Second\n//\n// \t select {\n// \t case <-ctx.Done():\n// \t \treturn\n//\n// \t case <-time.After(processTime):\n// \t \t // The above channel simulates some hard work.\n// \t }\n//\n// \t w.Write([]byte(\"done\"))\n//  })\n//\nfunc Timeout(timeout time.Duration) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx, cancel := context.WithTimeout(r.Context(), timeout)\n\t\t\tdefer func() {\n\t\t\t\tcancel()\n\t\t\t\tif ctx.Err() == context.DeadlineExceeded {\n\t\t\t\t\tw.WriteHeader(http.StatusGatewayTimeout)\n\t\t\t\t}\n\t\t\t}()\n\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/url_format.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nvar (\n\t// URLFormatCtxKey is the context.Context key to store the URL format data\n\t// for a request.\n\tURLFormatCtxKey = &contextKey{\"URLFormat\"}\n)\n\n// URLFormat is a middleware that parses the url extension from a request path and stores it\n// on the context as a string under the key `middleware.URLFormatCtxKey`. The middleware will\n// trim the suffix from the routing path and continue routing.\n//\n// Routers should not include a url parameter for the suffix when using this middleware.\n//\n// Sample usage.. for url paths: `/articles/1`, `/articles/1.json` and `/articles/1.xml`\n//\n//  func routes() http.Handler {\n//    r := chi.NewRouter()\n//    r.Use(middleware.URLFormat)\n//\n//    r.Get(\"/articles/{id}\", ListArticles)\n//\n//    return r\n//  }\n//\n//  func ListArticles(w http.ResponseWriter, r *http.Request) {\n// \t  urlFormat, _ := r.Context().Value(middleware.URLFormatCtxKey).(string)\n//\n// \t  switch urlFormat {\n// \t  case \"json\":\n// \t  \trender.JSON(w, r, articles)\n// \t  case \"xml:\"\n// \t  \trender.XML(w, r, articles)\n// \t  default:\n// \t  \trender.JSON(w, r, articles)\n// \t  }\n// }\n//\nfunc URLFormat(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\n\t\tvar format string\n\t\tpath := r.URL.Path\n\n\t\tif strings.Index(path, \".\") > 0 {\n\t\t\tbase := strings.LastIndex(path, \"/\")\n\t\t\tidx := strings.Index(path[base:], \".\")\n\n\t\t\tif idx > 0 {\n\t\t\t\tidx += base\n\t\t\t\tformat = path[idx+1:]\n\n\t\t\t\trctx := chi.RouteContext(r.Context())\n\t\t\t\trctx.RoutePath = path[:idx]\n\t\t\t}\n\t\t}\n\n\t\tr = r.WithContext(context.WithValue(ctx, URLFormatCtxKey, format))\n\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/value.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// WithValue is a middleware that sets a given key/value in a context chain.\nfunc WithValue(key interface{}, val interface{}) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), key, val))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/wrap_writer.go",
    "content": "package middleware\n\n// The original work was derived from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// WrapResponseWriter is a proxy around an http.ResponseWriter that allows you to hook\n// into various parts of the response process.\ntype WrapResponseWriter interface {\n\thttp.ResponseWriter\n\t// Status returns the HTTP status of the request, or 0 if one has not\n\t// yet been sent.\n\tStatus() int\n\t// BytesWritten returns the total number of bytes sent to the client.\n\tBytesWritten() int\n\t// Tee causes the response body to be written to the given io.Writer in\n\t// addition to proxying the writes through. Only one io.Writer can be\n\t// tee'd to at once: setting a second one will overwrite the first.\n\t// Writes will be sent to the proxy before being written to this\n\t// io.Writer. It is illegal for the tee'd writer to be modified\n\t// concurrently with writes.\n\tTee(io.Writer)\n\t// Unwrap returns the original proxied target.\n\tUnwrap() http.ResponseWriter\n}\n\n// basicWriter wraps a http.ResponseWriter that implements the minimal\n// http.ResponseWriter interface.\ntype basicWriter struct {\n\thttp.ResponseWriter\n\twroteHeader bool\n\tcode        int\n\tbytes       int\n\ttee         io.Writer\n}\n\nfunc (b *basicWriter) WriteHeader(code int) {\n\tif !b.wroteHeader {\n\t\tb.code = code\n\t\tb.wroteHeader = true\n\t\tb.ResponseWriter.WriteHeader(code)\n\t}\n}\nfunc (b *basicWriter) Write(buf []byte) (int, error) {\n\tb.WriteHeader(http.StatusOK)\n\tn, err := b.ResponseWriter.Write(buf)\n\tif b.tee != nil {\n\t\t_, err2 := b.tee.Write(buf[:n])\n\t\t// Prefer errors generated by the proxied writer.\n\t\tif err == nil {\n\t\t\terr = err2\n\t\t}\n\t}\n\tb.bytes += n\n\treturn n, err\n}\nfunc (b *basicWriter) maybeWriteHeader() {\n\tif !b.wroteHeader {\n\t\tb.WriteHeader(http.StatusOK)\n\t}\n}\nfunc (b *basicWriter) Status() int {\n\treturn b.code\n}\nfunc (b *basicWriter) BytesWritten() int {\n\treturn b.bytes\n}\nfunc (b *basicWriter) Tee(w io.Writer) {\n\tb.tee = w\n}\nfunc (b *basicWriter) Unwrap() http.ResponseWriter {\n\treturn b.ResponseWriter\n}\n\ntype flushWriter struct {\n\tbasicWriter\n}\n\nfunc (f *flushWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\n\nvar _ http.Flusher = &flushWriter{}\n\n// httpFancyWriter is a HTTP writer that additionally satisfies http.CloseNotifier,\n// http.Flusher, http.Hijacker, and io.ReaderFrom. It exists for the common case\n// of wrapping the http.ResponseWriter that package http gives you, in order to\n// make the proxied object support the full method set of the proxied object.\ntype httpFancyWriter struct {\n\tbasicWriter\n}\n\nfunc (f *httpFancyWriter) CloseNotify() <-chan bool {\n\tcn := f.basicWriter.ResponseWriter.(http.CloseNotifier)\n\treturn cn.CloseNotify()\n}\nfunc (f *httpFancyWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\nfunc (f *httpFancyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\thj := f.basicWriter.ResponseWriter.(http.Hijacker)\n\treturn hj.Hijack()\n}\nfunc (f *httpFancyWriter) ReadFrom(r io.Reader) (int64, error) {\n\tif f.basicWriter.tee != nil {\n\t\tn, err := io.Copy(&f.basicWriter, r)\n\t\tf.basicWriter.bytes += int(n)\n\t\treturn n, err\n\t}\n\trf := f.basicWriter.ResponseWriter.(io.ReaderFrom)\n\tf.basicWriter.maybeWriteHeader()\n\tn, err := rf.ReadFrom(r)\n\tf.basicWriter.bytes += int(n)\n\treturn n, err\n}\n\nvar _ http.CloseNotifier = &httpFancyWriter{}\nvar _ http.Flusher = &httpFancyWriter{}\nvar _ http.Hijacker = &httpFancyWriter{}\nvar _ io.ReaderFrom = &httpFancyWriter{}\n\n// http2FancyWriter is a HTTP2 writer that additionally satisfies http.CloseNotifier,\n// http.Flusher, and io.ReaderFrom. It exists for the common case\n// of wrapping the http.ResponseWriter that package http gives you, in order to\n// make the proxied object support the full method set of the proxied object.\ntype http2FancyWriter struct {\n\tbasicWriter\n}\n\nfunc (f *http2FancyWriter) CloseNotify() <-chan bool {\n\tcn := f.basicWriter.ResponseWriter.(http.CloseNotifier)\n\treturn cn.CloseNotify()\n}\nfunc (f *http2FancyWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\n\nvar _ http.CloseNotifier = &http2FancyWriter{}\nvar _ http.Flusher = &http2FancyWriter{}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/wrap_writer17.go",
    "content": "// +build go1.7,!go1.8\n\npackage middleware\n\nimport (\n\t\"io\"\n\t\"net/http\"\n)\n\n// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to\n// hook into various parts of the response process.\nfunc NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {\n\t_, cn := w.(http.CloseNotifier)\n\t_, fl := w.(http.Flusher)\n\n\tbw := basicWriter{ResponseWriter: w}\n\n\tif protoMajor == 2 {\n\t\tif cn && fl {\n\t\t\treturn &http2FancyWriter{bw}\n\t\t}\n\t} else {\n\t\t_, hj := w.(http.Hijacker)\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif cn && fl && hj && rf {\n\t\t\treturn &httpFancyWriter{bw}\n\t\t}\n\t}\n\tif fl {\n\t\treturn &flushWriter{bw}\n\t}\n\n\treturn &bw\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/middleware/wrap_writer18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"io\"\n\t\"net/http\"\n)\n\n// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to\n// hook into various parts of the response process.\nfunc NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {\n\t_, cn := w.(http.CloseNotifier)\n\t_, fl := w.(http.Flusher)\n\n\tbw := basicWriter{ResponseWriter: w}\n\n\tif protoMajor == 2 {\n\t\t_, ps := w.(http.Pusher)\n\t\tif cn && fl && ps {\n\t\t\treturn &http2FancyWriter{bw}\n\t\t}\n\t} else {\n\t\t_, hj := w.(http.Hijacker)\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif cn && fl && hj && rf {\n\t\t\treturn &httpFancyWriter{bw}\n\t\t}\n\t}\n\tif fl {\n\t\treturn &flushWriter{bw}\n\t}\n\n\treturn &bw\n}\n\nfunc (f *http2FancyWriter) Push(target string, opts *http.PushOptions) error {\n\treturn f.basicWriter.ResponseWriter.(http.Pusher).Push(target, opts)\n}\n\nvar _ http.Pusher = &http2FancyWriter{}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/mux.go",
    "content": "package chi\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar _ Router = &Mux{}\n\n// Mux is a simple HTTP route multiplexer that parses a request path,\n// records any URL params, and executes an end handler. It implements\n// the http.Handler interface and is friendly with the standard library.\n//\n// Mux is designed to be fast, minimal and offer a powerful API for building\n// modular and composable HTTP services with a large set of handlers. It's\n// particularly useful for writing large REST API services that break a handler\n// into many smaller parts composed of middlewares and end handlers.\ntype Mux struct {\n\t// The radix trie router\n\ttree *node\n\n\t// The middleware stack\n\tmiddlewares []func(http.Handler) http.Handler\n\n\t// Controls the behaviour of middleware chain generation when a mux\n\t// is registered as an inline group inside another mux.\n\tinline bool\n\tparent *Mux\n\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler\n\n\t// Routing context pool\n\tpool *sync.Pool\n\n\t// Custom route not found handler\n\tnotFoundHandler http.HandlerFunc\n\n\t// Custom method not allowed handler\n\tmethodNotAllowedHandler http.HandlerFunc\n}\n\n// NewMux returns a newly initialized Mux object that implements the Router\n// interface.\nfunc NewMux() *Mux {\n\tmux := &Mux{tree: &node{}, pool: &sync.Pool{}}\n\tmux.pool.New = func() interface{} {\n\t\treturn NewRouteContext()\n\t}\n\treturn mux\n}\n\n// ServeHTTP is the single method of the http.Handler interface that makes\n// Mux interoperable with the standard library. It uses a sync.Pool to get and\n// reuse routing contexts for each request.\nfunc (mx *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\t// Ensure the mux has some routes defined on the mux\n\tif mx.handler == nil {\n\t\tpanic(\"chi: attempting to route to a mux with no handlers.\")\n\t}\n\n\t// Check if a routing context already exists from a parent router.\n\trctx, _ := r.Context().Value(RouteCtxKey).(*Context)\n\tif rctx != nil {\n\t\tmx.handler.ServeHTTP(w, r)\n\t\treturn\n\t}\n\n\t// Fetch a RouteContext object from the sync pool, and call the computed\n\t// mx.handler that is comprised of mx.middlewares + mx.routeHTTP.\n\t// Once the request is finished, reset the routing context and put it back\n\t// into the pool for reuse from another request.\n\trctx = mx.pool.Get().(*Context)\n\trctx.Reset()\n\trctx.Routes = mx\n\tr = r.WithContext(context.WithValue(r.Context(), RouteCtxKey, rctx))\n\tmx.handler.ServeHTTP(w, r)\n\tmx.pool.Put(rctx)\n}\n\n// Use appends a middleware handler to the Mux middleware stack.\n//\n// The middleware stack for any Mux will execute before searching for a matching\n// route to a specific handler, which provides opportunity to respond early,\n// change the course of the request execution, or set request-scoped values for\n// the next http.Handler.\nfunc (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler) {\n\tif mx.handler != nil {\n\t\tpanic(\"chi: all middlewares must be defined before routes on a mux\")\n\t}\n\tmx.middlewares = append(mx.middlewares, middlewares...)\n}\n\n// Handle adds the route `pattern` that matches any http method to\n// execute the `handler` http.Handler.\nfunc (mx *Mux) Handle(pattern string, handler http.Handler) {\n\tmx.handle(mALL, pattern, handler)\n}\n\n// HandleFunc adds the route `pattern` that matches any http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) HandleFunc(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mALL, pattern, handlerFn)\n}\n\n// Method adds the route `pattern` that matches `method` http method to\n// execute the `handler` http.Handler.\nfunc (mx *Mux) Method(method, pattern string, handler http.Handler) {\n\tm, ok := methodMap[strings.ToUpper(method)]\n\tif !ok {\n\t\tpanic(fmt.Sprintf(\"chi: '%s' http method is not supported.\", method))\n\t}\n\tmx.handle(m, pattern, handler)\n}\n\n// MethodFunc adds the route `pattern` that matches `method` http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) MethodFunc(method, pattern string, handlerFn http.HandlerFunc) {\n\tmx.Method(method, pattern, handlerFn)\n}\n\n// Connect adds the route `pattern` that matches a CONNECT http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Connect(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mCONNECT, pattern, handlerFn)\n}\n\n// Delete adds the route `pattern` that matches a DELETE http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Delete(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mDELETE, pattern, handlerFn)\n}\n\n// Get adds the route `pattern` that matches a GET http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Get(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mGET, pattern, handlerFn)\n}\n\n// Head adds the route `pattern` that matches a HEAD http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Head(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mHEAD, pattern, handlerFn)\n}\n\n// Options adds the route `pattern` that matches a OPTIONS http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Options(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mOPTIONS, pattern, handlerFn)\n}\n\n// Patch adds the route `pattern` that matches a PATCH http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Patch(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPATCH, pattern, handlerFn)\n}\n\n// Post adds the route `pattern` that matches a POST http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Post(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPOST, pattern, handlerFn)\n}\n\n// Put adds the route `pattern` that matches a PUT http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Put(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPUT, pattern, handlerFn)\n}\n\n// Trace adds the route `pattern` that matches a TRACE http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Trace(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mTRACE, pattern, handlerFn)\n}\n\n// NotFound sets a custom http.HandlerFunc for routing paths that could\n// not be found. The default 404 handler is `http.NotFound`.\nfunc (mx *Mux) NotFound(handlerFn http.HandlerFunc) {\n\t// Build NotFound handler chain\n\tm := mx\n\thFn := handlerFn\n\tif mx.inline && mx.parent != nil {\n\t\tm = mx.parent\n\t\thFn = Chain(mx.middlewares...).HandlerFunc(hFn).ServeHTTP\n\t}\n\n\t// Update the notFoundHandler from this point forward\n\tm.notFoundHandler = hFn\n\tm.updateSubRoutes(func(subMux *Mux) {\n\t\tif subMux.notFoundHandler == nil {\n\t\t\tsubMux.NotFound(hFn)\n\t\t}\n\t})\n}\n\n// MethodNotAllowed sets a custom http.HandlerFunc for routing paths where the\n// method is unresolved. The default handler returns a 405 with an empty body.\nfunc (mx *Mux) MethodNotAllowed(handlerFn http.HandlerFunc) {\n\t// Build MethodNotAllowed handler chain\n\tm := mx\n\thFn := handlerFn\n\tif mx.inline && mx.parent != nil {\n\t\tm = mx.parent\n\t\thFn = Chain(mx.middlewares...).HandlerFunc(hFn).ServeHTTP\n\t}\n\n\t// Update the methodNotAllowedHandler from this point forward\n\tm.methodNotAllowedHandler = hFn\n\tm.updateSubRoutes(func(subMux *Mux) {\n\t\tif subMux.methodNotAllowedHandler == nil {\n\t\t\tsubMux.MethodNotAllowed(hFn)\n\t\t}\n\t})\n}\n\n// With adds inline middlewares for an endpoint handler.\nfunc (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router {\n\t// Similarly as in handle(), we must build the mux handler once further\n\t// middleware registration isn't allowed for this stack, like now.\n\tif !mx.inline && mx.handler == nil {\n\t\tmx.buildRouteHandler()\n\t}\n\n\t// Copy middlewares from parent inline muxs\n\tvar mws Middlewares\n\tif mx.inline {\n\t\tmws = make(Middlewares, len(mx.middlewares))\n\t\tcopy(mws, mx.middlewares)\n\t}\n\tmws = append(mws, middlewares...)\n\n\tim := &Mux{pool: mx.pool, inline: true, parent: mx, tree: mx.tree, middlewares: mws}\n\n\treturn im\n}\n\n// Group creates a new inline-Mux with a fresh middleware stack. It's useful\n// for a group of handlers along the same routing path that use an additional\n// set of middlewares. See _examples/.\nfunc (mx *Mux) Group(fn func(r Router)) Router {\n\tim := mx.With().(*Mux)\n\tif fn != nil {\n\t\tfn(im)\n\t}\n\treturn im\n}\n\n// Route creates a new Mux with a fresh middleware stack and mounts it\n// along the `pattern` as a subrouter. Effectively, this is a short-hand\n// call to Mount. See _examples/.\nfunc (mx *Mux) Route(pattern string, fn func(r Router)) Router {\n\tsubRouter := NewRouter()\n\tif fn != nil {\n\t\tfn(subRouter)\n\t}\n\tmx.Mount(pattern, subRouter)\n\treturn subRouter\n}\n\n// Mount attaches another http.Handler or chi Router as a subrouter along a routing\n// path. It's very useful to split up a large API as many independent routers and\n// compose them as a single service using Mount. See _examples/.\n//\n// Note that Mount() simply sets a wildcard along the `pattern` that will continue\n// routing at the `handler`, which in most cases is another chi.Router. As a result,\n// if you define two Mount() routes on the exact same pattern the mount will panic.\nfunc (mx *Mux) Mount(pattern string, handler http.Handler) {\n\t// Provide runtime safety for ensuring a pattern isn't mounted on an existing\n\t// routing pattern.\n\tif mx.tree.findPattern(pattern+\"*\") || mx.tree.findPattern(pattern+\"/*\") {\n\t\tpanic(fmt.Sprintf(\"chi: attempting to Mount() a handler on an existing path, '%s'\", pattern))\n\t}\n\n\t// Assign sub-Router's with the parent not found & method not allowed handler if not specified.\n\tsubr, ok := handler.(*Mux)\n\tif ok && subr.notFoundHandler == nil && mx.notFoundHandler != nil {\n\t\tsubr.NotFound(mx.notFoundHandler)\n\t}\n\tif ok && subr.methodNotAllowedHandler == nil && mx.methodNotAllowedHandler != nil {\n\t\tsubr.MethodNotAllowed(mx.methodNotAllowedHandler)\n\t}\n\n\t// Wrap the sub-router in a handlerFunc to scope the request path for routing.\n\tmountHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\trctx := RouteContext(r.Context())\n\t\trctx.RoutePath = mx.nextRoutePath(rctx)\n\t\thandler.ServeHTTP(w, r)\n\t})\n\n\tif pattern == \"\" || pattern[len(pattern)-1] != '/' {\n\t\tmx.handle(mALL|mSTUB, pattern, mountHandler)\n\t\tmx.handle(mALL|mSTUB, pattern+\"/\", mountHandler)\n\t\tpattern += \"/\"\n\t}\n\n\tmethod := mALL\n\tsubroutes, _ := handler.(Routes)\n\tif subroutes != nil {\n\t\tmethod |= mSTUB\n\t}\n\tn := mx.handle(method, pattern+\"*\", mountHandler)\n\n\tif subroutes != nil {\n\t\tn.subroutes = subroutes\n\t}\n}\n\n// Routes returns a slice of routing information from the tree,\n// useful for traversing available routes of a router.\nfunc (mx *Mux) Routes() []Route {\n\treturn mx.tree.routes()\n}\n\n// Middlewares returns a slice of middleware handler functions.\nfunc (mx *Mux) Middlewares() Middlewares {\n\treturn mx.middlewares\n}\n\n// Match searches the routing tree for a handler that matches the method/path.\n// It's similar to routing a http request, but without executing the handler\n// thereafter.\n//\n// Note: the *Context state is updated during execution, so manage\n// the state carefully or make a NewRouteContext().\nfunc (mx *Mux) Match(rctx *Context, method, path string) bool {\n\tm, ok := methodMap[method]\n\tif !ok {\n\t\treturn false\n\t}\n\n\tnode, _, h := mx.tree.FindRoute(rctx, m, path)\n\n\tif node != nil && node.subroutes != nil {\n\t\trctx.RoutePath = mx.nextRoutePath(rctx)\n\t\treturn node.subroutes.Match(rctx, method, rctx.RoutePath)\n\t}\n\n\treturn h != nil\n}\n\n// NotFoundHandler returns the default Mux 404 responder whenever a route\n// cannot be found.\nfunc (mx *Mux) NotFoundHandler() http.HandlerFunc {\n\tif mx.notFoundHandler != nil {\n\t\treturn mx.notFoundHandler\n\t}\n\treturn http.NotFound\n}\n\n// MethodNotAllowedHandler returns the default Mux 405 responder whenever\n// a method cannot be resolved for a route.\nfunc (mx *Mux) MethodNotAllowedHandler() http.HandlerFunc {\n\tif mx.methodNotAllowedHandler != nil {\n\t\treturn mx.methodNotAllowedHandler\n\t}\n\treturn methodNotAllowedHandler\n}\n\n// buildRouteHandler builds the single mux handler that is a chain of the middleware\n// stack, as defined by calls to Use(), and the tree router (Mux) itself. After this\n// point, no other middlewares can be registered on this Mux's stack. But you can still\n// compose additional middlewares via Group()'s or using a chained middleware handler.\nfunc (mx *Mux) buildRouteHandler() {\n\tmx.handler = chain(mx.middlewares, http.HandlerFunc(mx.routeHTTP))\n}\n\n// handle registers a http.Handler in the routing tree for a particular http method\n// and routing pattern.\nfunc (mx *Mux) handle(method methodTyp, pattern string, handler http.Handler) *node {\n\tif len(pattern) == 0 || pattern[0] != '/' {\n\t\tpanic(fmt.Sprintf(\"chi: routing pattern must begin with '/' in '%s'\", pattern))\n\t}\n\n\t// Build the final routing handler for this Mux.\n\tif !mx.inline && mx.handler == nil {\n\t\tmx.buildRouteHandler()\n\t}\n\n\t// Build endpoint handler with inline middlewares for the route\n\tvar h http.Handler\n\tif mx.inline {\n\t\tmx.handler = http.HandlerFunc(mx.routeHTTP)\n\t\th = Chain(mx.middlewares...).Handler(handler)\n\t} else {\n\t\th = handler\n\t}\n\n\t// Add the endpoint to the tree and return the node\n\treturn mx.tree.InsertRoute(method, pattern, h)\n}\n\n// routeHTTP routes a http.Request through the Mux routing tree to serve\n// the matching handler for a particular http method.\nfunc (mx *Mux) routeHTTP(w http.ResponseWriter, r *http.Request) {\n\t// Grab the route context object\n\trctx := r.Context().Value(RouteCtxKey).(*Context)\n\n\t// The request routing path\n\troutePath := rctx.RoutePath\n\tif routePath == \"\" {\n\t\tif r.URL.RawPath != \"\" {\n\t\t\troutePath = r.URL.RawPath\n\t\t} else {\n\t\t\troutePath = r.URL.Path\n\t\t}\n\t}\n\n\t// Check if method is supported by chi\n\tif rctx.RouteMethod == \"\" {\n\t\trctx.RouteMethod = r.Method\n\t}\n\tmethod, ok := methodMap[rctx.RouteMethod]\n\tif !ok {\n\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)\n\t\treturn\n\t}\n\n\t// Find the route\n\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {\n\t\th.ServeHTTP(w, r)\n\t\treturn\n\t}\n\tif rctx.methodNotAllowed {\n\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)\n\t} else {\n\t\tmx.NotFoundHandler().ServeHTTP(w, r)\n\t}\n}\n\nfunc (mx *Mux) nextRoutePath(rctx *Context) string {\n\troutePath := \"/\"\n\tnx := len(rctx.routeParams.Keys) - 1 // index of last param in list\n\tif nx >= 0 && rctx.routeParams.Keys[nx] == \"*\" && len(rctx.routeParams.Values) > nx {\n\t\troutePath += rctx.routeParams.Values[nx]\n\t}\n\treturn routePath\n}\n\n// Recursively update data on child routers.\nfunc (mx *Mux) updateSubRoutes(fn func(subMux *Mux)) {\n\tfor _, r := range mx.tree.routes() {\n\t\tsubMux, ok := r.SubRoutes.(*Mux)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfn(subMux)\n\t}\n}\n\n// methodNotAllowedHandler is a helper function to respond with a 405,\n// method not allowed.\nfunc methodNotAllowedHandler(w http.ResponseWriter, r *http.Request) {\n\tw.WriteHeader(405)\n\tw.Write(nil)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/mux_test.go",
    "content": "package chi\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestMuxBasic(t *testing.T) {\n\tvar count uint64\n\tcountermw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcount++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tusermw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"user\"}, \"peter\")\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\texmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"ex\"}, \"a\")\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tlogbuf := bytes.NewBufferString(\"\")\n\tlogmsg := \"logmw test\"\n\tlogmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tlogbuf.WriteString(logmsg)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tcxindex := func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\t\tuser := ctx.Value(ctxKey{\"user\"}).(string)\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(fmt.Sprintf(\"hi %s\", user)))\n\t}\n\n\tping := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\".\"))\n\t}\n\n\theadPing := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Ping\", \"1\")\n\t\tw.WriteHeader(200)\n\t}\n\n\tcreatePing := func(w http.ResponseWriter, r *http.Request) {\n\t\t// create ....\n\t\tw.WriteHeader(201)\n\t}\n\n\tpingAll := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"ping all\"))\n\t}\n\n\tpingAll2 := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"ping all2\"))\n\t}\n\n\tpingOne := func(w http.ResponseWriter, r *http.Request) {\n\t\tidParam := URLParam(r, \"id\")\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(fmt.Sprintf(\"ping one id: %s\", idParam)))\n\t}\n\n\tpingWoop := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"woop.\" + URLParam(r, \"iidd\")))\n\t}\n\n\tcatchAll := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"catchall\"))\n\t}\n\n\tm := NewRouter()\n\tm.Use(countermw)\n\tm.Use(usermw)\n\tm.Use(exmw)\n\tm.Use(logmw)\n\tm.Get(\"/\", cxindex)\n\tm.Method(\"GET\", \"/ping\", http.HandlerFunc(ping))\n\tm.MethodFunc(\"GET\", \"/pingall\", pingAll)\n\tm.MethodFunc(\"get\", \"/ping/all\", pingAll)\n\tm.Get(\"/ping/all2\", pingAll2)\n\n\tm.Head(\"/ping\", headPing)\n\tm.Post(\"/ping\", createPing)\n\tm.Get(\"/ping/{id}\", pingWoop)\n\tm.Get(\"/ping/{id}\", pingOne) // expected to overwrite to pingOne handler\n\tm.Get(\"/ping/{iidd}/woop\", pingWoop)\n\tm.HandleFunc(\"/admin/*\", catchAll)\n\t// m.Post(\"/admin/*\", catchAll)\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\t// GET /\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"hi peter\" {\n\t\tt.Fatalf(body)\n\t}\n\ttlogmsg, _ := logbuf.ReadString(0)\n\tif tlogmsg != logmsg {\n\t\tt.Error(\"expecting log message from middleware:\", logmsg)\n\t}\n\n\t// GET /ping\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping\", nil); body != \".\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /pingall\n\tif _, body := testRequest(t, ts, \"GET\", \"/pingall\", nil); body != \"ping all\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/all\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/all\", nil); body != \"ping all\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/all2\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/all2\", nil); body != \"ping all2\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/123\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/123\", nil); body != \"ping one id: 123\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/allan\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/allan\", nil); body != \"ping one id: allan\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/1/woop\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/1/woop\", nil); body != \"woop.1\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// HEAD /ping\n\tresp, err := http.Head(ts.URL + \"/ping\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif resp.StatusCode != 200 {\n\t\tt.Error(\"head failed, should be 200\")\n\t}\n\tif resp.Header.Get(\"X-Ping\") == \"\" {\n\t\tt.Error(\"expecting X-Ping header\")\n\t}\n\n\t// GET /admin/catch-this\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin/catch-thazzzzz\", nil); body != \"catchall\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// POST /admin/catch-this\n\tresp, err = http.Post(ts.URL+\"/admin/casdfsadfs\", \"text/plain\", bytes.NewReader([]byte{}))\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tt.Error(\"POST failed, should be 200\")\n\t}\n\n\tif string(body) != \"catchall\" {\n\t\tt.Error(\"expecting response body: 'catchall'\")\n\t}\n\n\t// Custom http method DIE /ping/1/woop\n\tif resp, body := testRequest(t, ts, \"DIE\", \"/ping/1/woop\", nil); body != \"\" || resp.StatusCode != 405 {\n\t\tt.Fatalf(fmt.Sprintf(\"expecting 405 status and empty body, got %d '%s'\", resp.StatusCode, body))\n\t}\n}\n\nfunc TestMuxMounts(t *testing.T) {\n\tr := NewRouter()\n\n\tr.Get(\"/{hash}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tv := URLParam(r, \"hash\")\n\t\tw.Write([]byte(fmt.Sprintf(\"/%s\", v)))\n\t})\n\n\tr.Route(\"/{hash}/share\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tv := URLParam(r, \"hash\")\n\t\t\tw.Write([]byte(fmt.Sprintf(\"/%s/share\", v)))\n\t\t})\n\t\tr.Get(\"/{network}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tv := URLParam(r, \"hash\")\n\t\t\tn := URLParam(r, \"network\")\n\t\t\tw.Write([]byte(fmt.Sprintf(\"/%s/share/%s\", v, n)))\n\t\t})\n\t})\n\n\tm := NewRouter()\n\tm.Mount(\"/sharing\", r)\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc\", nil); body != \"/aBc\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc/share\", nil); body != \"/aBc/share\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc/share/twitter\", nil); body != \"/aBc/share/twitter\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxPlain(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxEmptyRoutes(t *testing.T) {\n\tmux := NewRouter()\n\n\tapiRouter := NewRouter()\n\t// oops, we forgot to declare any route handlers\n\n\tmux.Handle(\"/api*\", apiRouter)\n\n\tif _, body := testHandler(t, mux, \"GET\", \"/\", nil); body != \"404 page not found\\n\" {\n\t\tt.Fatalf(body)\n\t}\n\n\tfunc() {\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif r != `chi: attempting to route to a mux with no handlers.` {\n\t\t\t\t\tt.Fatalf(\"expecting empty route panic\")\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\t_, body := testHandler(t, mux, \"GET\", \"/api\", nil)\n\t\tt.Fatalf(\"oops, we are expecting a panic instead of getting resp: %s\", body)\n\t}()\n\n\tfunc() {\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif r != `chi: attempting to route to a mux with no handlers.` {\n\t\t\t\t\tt.Fatalf(\"expecting empty route panic\")\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\t_, body := testHandler(t, mux, \"GET\", \"/api/abc\", nil)\n\t\tt.Fatalf(\"oops, we are expecting a panic instead of getting resp: %s\", body)\n\t}()\n}\n\n// Test a mux that routes a trailing slash, see also middleware/strip_test.go\n// for an example of using a middleware to handle trailing slashes.\nfunc TestMuxTrailingSlash(t *testing.T) {\n\tr := NewRouter()\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tsubRoutes := NewRouter()\n\tindexHandler := func(w http.ResponseWriter, r *http.Request) {\n\t\taccountID := URLParam(r, \"accountID\")\n\t\tw.Write([]byte(accountID))\n\t}\n\tsubRoutes.Get(\"/\", indexHandler)\n\n\tr.Mount(\"/accounts/{accountID}\", subRoutes)\n\tr.Get(\"/accounts/{accountID}/\", indexHandler)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); body != \"admin\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); body != \"admin\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxNestedNotFound(t *testing.T) {\n\tr := NewRouter()\n\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"mw\"}, \"mw\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\n\tr.With(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"with\"}, \"with\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}).NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tchkMw := r.Context().Value(ctxKey{\"mw\"}).(string)\n\t\tchkWith := r.Context().Value(ctxKey{\"with\"}).(string)\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(fmt.Sprintf(\"root 404 %s %s\", chkMw, chkWith)))\n\t})\n\n\tsr1 := NewRouter()\n\n\tsr1.Get(\"/sub\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub\"))\n\t})\n\tsr1.Group(func(sr1 Router) {\n\t\tsr1.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"mw2\"}, \"mw2\"))\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t})\n\t\t})\n\t\tsr1.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tchkMw2 := r.Context().Value(ctxKey{\"mw2\"}).(string)\n\t\t\tw.WriteHeader(404)\n\t\t\tw.Write([]byte(fmt.Sprintf(\"sub 404 %s\", chkMw2)))\n\t\t})\n\t})\n\n\tsr2 := NewRouter()\n\tsr2.Get(\"/sub\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub2\"))\n\t})\n\n\tr.Mount(\"/admin1\", sr1)\n\tr.Mount(\"/admin2\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"root 404 mw with\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin1/sub\", nil); body != \"sub\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin1/nope\", nil); body != \"sub 404 mw2\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin2/sub\", nil); body != \"sub2\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// Not found pages should bubble up to the root.\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin2/nope\", nil); body != \"root 404 mw with\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxNestedMethodNotAllowed(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/root\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\tr.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(405)\n\t\tw.Write([]byte(\"root 405\"))\n\t})\n\n\tsr1 := NewRouter()\n\tsr1.Get(\"/sub1\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub1\"))\n\t})\n\tsr1.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(405)\n\t\tw.Write([]byte(\"sub1 405\"))\n\t})\n\n\tsr2 := NewRouter()\n\tsr2.Get(\"/sub2\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub2\"))\n\t})\n\n\tr.Mount(\"/prefix1\", sr1)\n\tr.Mount(\"/prefix2\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/root\", nil); body != \"root\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/root\", nil); body != \"root 405\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/prefix1/sub1\", nil); body != \"sub1\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/prefix1/sub1\", nil); body != \"sub1 405\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/prefix2/sub2\", nil); body != \"sub2\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/prefix2/sub2\", nil); body != \"root 405\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxComplicatedNotFound(t *testing.T) {\n\t// sub router with groups\n\tsub := NewRouter()\n\tsub.Route(\"/resource\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"private get\"))\n\t\t})\n\t})\n\n\t// Root router with groups\n\tr := NewRouter()\n\tr.Get(\"/auth\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"auth get\"))\n\t})\n\tr.Route(\"/public\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"public get\"))\n\t\t})\n\t})\n\tr.Mount(\"/private\", sub)\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom not-found\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\t// check that we didn't break correct routes\n\tif _, body := testRequest(t, ts, \"GET\", \"/auth\", nil); body != \"auth get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public\", nil); body != \"public get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public/\", nil); body != \"public get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/resource\", nil); body != \"private get\" {\n\t\tt.Fatalf(body)\n\t}\n\t// check custom not-found on all levels\n\tif _, body := testRequest(t, ts, \"GET\", \"/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/resource/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\t// check custom not-found on trailing slash routes\n\tif _, body := testRequest(t, ts, \"GET\", \"/auth/\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxWith(t *testing.T) {\n\tvar cmwInit1, cmwHandler1 uint64\n\tvar cmwInit2, cmwHandler2 uint64\n\tmw1 := func(next http.Handler) http.Handler {\n\t\tcmwInit1++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcmwHandler1++\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"inline1\"}, \"yes\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\tmw2 := func(next http.Handler) http.Handler {\n\t\tcmwInit2++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcmwHandler2++\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"inline2\"}, \"yes\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.With(mw1).With(mw2).Get(\"/inline\", func(w http.ResponseWriter, r *http.Request) {\n\t\tv1 := r.Context().Value(ctxKey{\"inline1\"}).(string)\n\t\tv2 := r.Context().Value(ctxKey{\"inline2\"}).(string)\n\t\tw.Write([]byte(fmt.Sprintf(\"inline %s %s\", v1, v2)))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/inline\", nil); body != \"inline yes yes\" {\n\t\tt.Fatalf(body)\n\t}\n\tif cmwInit1 != 1 {\n\t\tt.Fatalf(\"expecting cmwInit1 to be 1, got %d\", cmwInit1)\n\t}\n\tif cmwHandler1 != 1 {\n\t\tt.Fatalf(\"expecting cmwHandler1 to be 1, got %d\", cmwHandler1)\n\t}\n\tif cmwInit2 != 1 {\n\t\tt.Fatalf(\"expecting cmwInit2 to be 1, got %d\", cmwInit2)\n\t}\n\tif cmwHandler2 != 1 {\n\t\tt.Fatalf(\"expecting cmwHandler2 to be 1, got %d\", cmwHandler2)\n\t}\n}\n\nfunc TestRouterFromMuxWith(t *testing.T) {\n\tt.Parallel()\n\n\tr := NewRouter()\n\n\twith := r.With(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\twith.Get(\"/with_middleware\", func(w http.ResponseWriter, r *http.Request) {})\n\n\tts := httptest.NewServer(with)\n\tdefer ts.Close()\n\n\t// Without the fix this test was committed with, this causes a panic.\n\ttestRequest(t, ts, http.MethodGet, \"/with_middleware\", nil)\n}\n\nfunc TestMuxMiddlewareStack(t *testing.T) {\n\tvar stdmwInit, stdmwHandler uint64\n\tstdmw := func(next http.Handler) http.Handler {\n\t\tstdmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\t_ = stdmw\n\n\tvar ctxmwInit, ctxmwHandler uint64\n\tctxmw := func(next http.Handler) http.Handler {\n\t\tctxmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctxmwHandler++\n\t\t\tctx := r.Context()\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"count.ctxmwHandler\"}, ctxmwHandler)\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tvar inCtxmwInit, inCtxmwHandler uint64\n\tinCtxmw := func(next http.Handler) http.Handler {\n\t\tinCtxmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tinCtxmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Use(stdmw)\n\tr.Use(ctxmw)\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif r.URL.Path == \"/ping\" {\n\t\t\t\tw.Write([]byte(\"pong\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\tvar handlerCount uint64\n\n\tr.With(inCtxmw).Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\thandlerCount++\n\t\tctx := r.Context()\n\t\tctxmwHandlerCount := ctx.Value(ctxKey{\"count.ctxmwHandler\"}).(uint64)\n\t\tw.Write([]byte(fmt.Sprintf(\"inits:%d reqs:%d ctxValue:%d\", ctxmwInit, handlerCount, ctxmwHandlerCount)))\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"wooot\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\ttestRequest(t, ts, \"GET\", \"/\", nil)\n\ttestRequest(t, ts, \"GET\", \"/\", nil)\n\tvar body string\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\tif body != \"inits:1 reqs:3 ctxValue:3\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\n\t_, body = testRequest(t, ts, \"GET\", \"/ping\", nil)\n\tif body != \"pong\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n}\n\nfunc TestMuxRouteGroups(t *testing.T) {\n\tvar stdmwInit, stdmwHandler uint64\n\n\tstdmw := func(next http.Handler) http.Handler {\n\t\tstdmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tvar stdmwInit2, stdmwHandler2 uint64\n\tstdmw2 := func(next http.Handler) http.Handler {\n\t\tstdmwInit2++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler2++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Group(func(r Router) {\n\t\tr.Use(stdmw)\n\t\tr.Get(\"/group\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"root group\"))\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(stdmw2)\n\t\tr.Get(\"/group2\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"root group2\"))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\t// GET /group\n\t_, body := testRequest(t, ts, \"GET\", \"/group\", nil)\n\tif body != \"root group\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\tif stdmwInit != 1 || stdmwHandler != 1 {\n\t\tt.Logf(\"stdmw counters failed, should be 1:1, got %d:%d\", stdmwInit, stdmwHandler)\n\t}\n\n\t// GET /group2\n\t_, body = testRequest(t, ts, \"GET\", \"/group2\", nil)\n\tif body != \"root group2\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\tif stdmwInit2 != 1 || stdmwHandler2 != 1 {\n\t\tt.Fatalf(\"stdmw2 counters failed, should be 1:1, got %d:%d\", stdmwInit2, stdmwHandler2)\n\t}\n}\n\nfunc TestMuxBig(t *testing.T) {\n\tr := bigMux()\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/favicon.ico\", nil)\n\tif body != \"fav\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/4/view\", nil)\n\tif body != \"/hubs/4/view reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%v'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/4/view/index.html\", nil)\n\tif body != \"/hubs/4/view/index.html reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"POST\", \"/hubs/ethereumhub/view/index.html\", nil)\n\tif body != \"/hubs/ethereumhub/view/index.html reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\tif body != \"/ reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/suggestions\", nil)\n\tif body != \"/suggestions reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/woot/444/hiiii\", nil)\n\tif body != \"/woot/444/hiiii\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123\", nil)\n\texpected = \"/hubs/123 reqid:1 session:elvis\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/touch\", nil)\n\tif body != \"/hubs/123/touch reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/webhooks\", nil)\n\tif body != \"/hubs/123/webhooks reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/posts\", nil)\n\tif body != \"/hubs/123/posts reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders\", nil)\n\tif body != \"404 page not found\\n\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/\", nil)\n\tif body != \"/folders/ reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/public\", nil)\n\tif body != \"/folders/public reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/nothing\", nil)\n\tif body != \"404 page not found\\n\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n}\n\nfunc bigMux() Router {\n\tvar r, sr1, sr2, sr3, sr4, sr5, sr6 *Mux\n\tr = NewRouter()\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"requestID\"}, \"1\")\n\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t})\n\t})\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"session.user\"}, \"anonymous\")\n\t\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t\t})\n\t\t})\n\t\tr.Get(\"/favicon.ico\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"fav\"))\n\t\t})\n\t\tr.Get(\"/hubs/{hubID}/view\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Get(\"/hubs/{hubID}/view/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view/%s reqid:%s session:%s\", URLParamFromCtx(ctx, \"hubID\"),\n\t\t\t\tURLParam(r, \"*\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Post(\"/hubs/{hubSlug}/view/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view/%s reqid:%s session:%s\", URLParamFromCtx(ctx, \"hubSlug\"),\n\t\t\t\tURLParam(r, \"*\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"session.user\"}, \"elvis\")\n\t\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t\t})\n\t\t})\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/ reqid:%s session:%s\", ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Get(\"/suggestions\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/suggestions reqid:%s session:%s\", ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\n\t\tr.Get(\"/woot/{wootID}/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\ts := fmt.Sprintf(\"/woot/%s/%s\", URLParam(r, \"wootID\"), URLParam(r, \"*\"))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\n\t\tr.Route(\"/hubs\", func(r Router) {\n\t\t\tsr1 = r.(*Mux)\n\t\t\tr.Route(\"/{hubID}\", func(r Router) {\n\t\t\t\tsr2 = r.(*Mux)\n\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s reqid:%s session:%s\",\n\t\t\t\t\t\tURLParam(r, \"hubID\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\t\t\t\tr.Get(\"/touch\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/touch reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\n\t\t\t\tsr3 = NewRouter()\n\t\t\t\tsr3.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/webhooks reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\t\t\t\tsr3.Route(\"/{webhookID}\", func(r Router) {\n\t\t\t\t\tsr4 = r.(*Mux)\n\t\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tctx := r.Context()\n\t\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/webhooks/%s reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\t\tURLParam(r, \"webhookID\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\tr.Mount(\"/webhooks\", Chain(func(next http.Handler) http.Handler {\n\t\t\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tnext.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), ctxKey{\"hook\"}, true)))\n\t\t\t\t\t})\n\t\t\t\t}).Handler(sr3))\n\n\t\t\t\tr.Route(\"/posts\", func(r Router) {\n\t\t\t\t\tsr5 = r.(*Mux)\n\t\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tctx := r.Context()\n\t\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/posts reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\n\t\tr.Route(\"/folders/\", func(r Router) {\n\t\t\tsr6 = r.(*Mux)\n\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := r.Context()\n\t\t\t\ts := fmt.Sprintf(\"/folders/ reqid:%s session:%s\",\n\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\tw.Write([]byte(s))\n\t\t\t})\n\t\t\tr.Get(\"/public\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := r.Context()\n\t\t\t\ts := fmt.Sprintf(\"/folders/public reqid:%s session:%s\",\n\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\tw.Write([]byte(s))\n\t\t\t})\n\t\t})\n\t})\n\n\treturn r\n}\n\nfunc TestMuxSubroutesBasic(t *testing.T) {\n\thIndex := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"index\"))\n\t})\n\thArticlesList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"articles-list\"))\n\t})\n\thSearchArticles := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"search-articles\"))\n\t})\n\thGetArticle := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"get-article:%s\", URLParam(r, \"id\"))))\n\t})\n\thSyncArticle := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"sync-article:%s\", URLParam(r, \"id\"))))\n\t})\n\n\tr := NewRouter()\n\tvar rr1, rr2 *Mux\n\tr.Get(\"/\", hIndex)\n\tr.Route(\"/articles\", func(r Router) {\n\t\trr1 = r.(*Mux)\n\t\tr.Get(\"/\", hArticlesList)\n\t\tr.Get(\"/search\", hSearchArticles)\n\t\tr.Route(\"/{id}\", func(r Router) {\n\t\t\trr2 = r.(*Mux)\n\t\t\tr.Get(\"/\", hGetArticle)\n\t\t\tr.Get(\"/sync\", hSyncArticle)\n\t\t})\n\t})\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, r.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, rr1.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, rr2.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\texpected = \"index\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles\", nil)\n\texpected = \"articles-list\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/search\", nil)\n\texpected = \"search-articles\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/123\", nil)\n\texpected = \"get-article:123\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/123/sync\", nil)\n\texpected = \"sync-article:123\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n}\n\nfunc TestMuxSubroutes(t *testing.T) {\n\thHubView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub1\"))\n\t})\n\thHubView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub2\"))\n\t})\n\thHubView3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub3\"))\n\t})\n\thAccountView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"account1\"))\n\t})\n\thAccountView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"account2\"))\n\t})\n\n\tr := NewRouter()\n\tr.Get(\"/hubs/{hubID}/view\", hHubView1)\n\tr.Get(\"/hubs/{hubID}/view/*\", hHubView2)\n\n\tsr := NewRouter()\n\tsr.Get(\"/\", hHubView3)\n\tr.Mount(\"/hubs/{hubID}/users\", sr)\n\tr.Get(\"/hubs/{hubID}/users/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub3 override\"))\n\t})\n\n\tsr3 := NewRouter()\n\tsr3.Get(\"/\", hAccountView1)\n\tsr3.Get(\"/hi\", hAccountView2)\n\n\tvar sr2 *Mux\n\tr.Route(\"/accounts/{accountID}\", func(r Router) {\n\t\tsr2 = r.(*Mux)\n\t\t// r.Get(\"/\", hAccountView1)\n\t\tr.Mount(\"/\", sr3)\n\t})\n\n\t// This is the same as the r.Route() call mounted on sr2\n\t// sr2 := NewRouter()\n\t// sr2.Mount(\"/\", sr3)\n\t// r.Mount(\"/accounts/{accountID}\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/view\", nil)\n\texpected = \"hub1\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/view/index.html\", nil)\n\texpected = \"hub2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/users\", nil)\n\texpected = \"hub3\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/users/\", nil)\n\texpected = \"hub3 override\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/accounts/44\", nil)\n\texpected = \"account1\"\n\tif body != expected {\n\t\tt.Fatalf(\"request:%s expected:%s got:%s\", \"GET /accounts/44\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/accounts/44/hi\", nil)\n\texpected = \"account2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\n\t// Test that we're building the routingPatterns properly\n\trouter := r\n\treq, _ := http.NewRequest(\"GET\", \"/accounts/44/hi\", nil)\n\n\trctx := NewRouteContext()\n\treq = req.WithContext(context.WithValue(req.Context(), RouteCtxKey, rctx))\n\n\tw := httptest.NewRecorder()\n\trouter.ServeHTTP(w, req)\n\n\tbody = string(w.Body.Bytes())\n\texpected = \"account2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\n\troutePatterns := rctx.RoutePatterns\n\tif len(rctx.RoutePatterns) != 3 {\n\t\tt.Fatalf(\"expected 3 routing patterns, got:%d\", len(rctx.RoutePatterns))\n\t}\n\texpected = \"/accounts/{accountID}/*\"\n\tif routePatterns[0] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[0])\n\t}\n\texpected = \"/*\"\n\tif routePatterns[1] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[1])\n\t}\n\texpected = \"/hi\"\n\tif routePatterns[2] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[2])\n\t}\n\n}\n\nfunc TestSingleHandler(t *testing.T) {\n\th := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tname := URLParam(r, \"name\")\n\t\tw.Write([]byte(\"hi \" + name))\n\t})\n\n\tr, _ := http.NewRequest(\"GET\", \"/\", nil)\n\trctx := NewRouteContext()\n\tr = r.WithContext(context.WithValue(r.Context(), RouteCtxKey, rctx))\n\trctx.URLParams.Add(\"name\", \"joe\")\n\n\tw := httptest.NewRecorder()\n\th.ServeHTTP(w, r)\n\n\tbody := string(w.Body.Bytes())\n\texpected := \"hi joe\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n}\n\n// TODO: a Router wrapper test..\n//\n// type ACLMux struct {\n// \t*Mux\n// \tXX string\n// }\n//\n// func NewACLMux() *ACLMux {\n// \treturn &ACLMux{Mux: NewRouter(), XX: \"hihi\"}\n// }\n//\n// // TODO: this should be supported...\n// func TestWoot(t *testing.T) {\n// \tvar r Router = NewRouter()\n//\n// \tvar r2 Router = NewACLMux() //NewRouter()\n// \tr2.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n// \t\tw.Write([]byte(\"hi\"))\n// \t})\n//\n// \tr.Mount(\"/\", r2)\n// }\n\nfunc TestServeHTTPExistingContext(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\ts, _ := r.Context().Value(ctxKey{\"testCtx\"}).(string)\n\t\tw.Write([]byte(s))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\ts, _ := r.Context().Value(ctxKey{\"testCtx\"}).(string)\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(s))\n\t})\n\n\ttestcases := []struct {\n\t\tMethod         string\n\t\tPath           string\n\t\tCtx            context.Context\n\t\tExpectedStatus int\n\t\tExpectedBody   string\n\t}{\n\t\t{\n\t\t\tMethod:         \"GET\",\n\t\t\tPath:           \"/hi\",\n\t\t\tCtx:            context.WithValue(context.Background(), ctxKey{\"testCtx\"}, \"hi ctx\"),\n\t\t\tExpectedStatus: 200,\n\t\t\tExpectedBody:   \"hi ctx\",\n\t\t},\n\t\t{\n\t\t\tMethod:         \"GET\",\n\t\t\tPath:           \"/hello\",\n\t\t\tCtx:            context.WithValue(context.Background(), ctxKey{\"testCtx\"}, \"nothing here ctx\"),\n\t\t\tExpectedStatus: 404,\n\t\t\tExpectedBody:   \"nothing here ctx\",\n\t\t},\n\t}\n\n\tfor _, tc := range testcases {\n\t\tresp := httptest.NewRecorder()\n\t\treq, err := http.NewRequest(tc.Method, tc.Path, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"%v\", err)\n\t\t}\n\t\treq = req.WithContext(tc.Ctx)\n\t\tr.ServeHTTP(resp, req)\n\t\tb, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"%v\", err)\n\t\t}\n\t\tif resp.Code != tc.ExpectedStatus {\n\t\t\tt.Fatalf(\"%v != %v\", tc.ExpectedStatus, resp.Code)\n\t\t}\n\t\tif string(b) != tc.ExpectedBody {\n\t\t\tt.Fatalf(\"%s != %s\", tc.ExpectedBody, b)\n\t\t}\n\t}\n}\n\nfunc TestNestedGroups(t *testing.T) {\n\thandlerPrintCounter := func(w http.ResponseWriter, r *http.Request) {\n\t\tcounter, _ := r.Context().Value(ctxKey{\"counter\"}).(int)\n\t\tw.Write([]byte(fmt.Sprintf(\"%v\", counter)))\n\t}\n\n\tmwIncreaseCounter := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\tcounter, _ := ctx.Value(ctxKey{\"counter\"}).(int)\n\t\t\tcounter++\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"counter\"}, counter)\n\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t})\n\t}\n\n\t// Each route represents value of its counter (number of applied middlewares).\n\tr := NewRouter() // counter == 0\n\tr.Get(\"/0\", handlerPrintCounter)\n\tr.Group(func(r Router) {\n\t\tr.Use(mwIncreaseCounter) // counter == 1\n\t\tr.Get(\"/1\", handlerPrintCounter)\n\n\t\t// r.Handle(GET, \"/2\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\tr.With(mwIncreaseCounter).Get(\"/2\", handlerPrintCounter)\n\n\t\tr.Group(func(r Router) {\n\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 3\n\t\t\tr.Get(\"/3\", handlerPrintCounter)\n\t\t})\n\t\tr.Route(\"/\", func(r Router) {\n\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 3\n\n\t\t\t// r.Handle(GET, \"/4\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\t\tr.With(mwIncreaseCounter).Get(\"/4\", handlerPrintCounter)\n\n\t\t\tr.Group(func(r Router) {\n\t\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 5\n\t\t\t\tr.Get(\"/5\", handlerPrintCounter)\n\t\t\t\t// r.Handle(GET, \"/6\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\t\t\tr.With(mwIncreaseCounter).Get(\"/6\", handlerPrintCounter)\n\n\t\t\t})\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tfor _, route := range []string{\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\"} {\n\t\tif _, body := testRequest(t, ts, \"GET\", \"/\"+route, nil); body != route {\n\t\t\tt.Errorf(\"expected %v, got %v\", route, body)\n\t\t}\n\t}\n}\n\nfunc TestMiddlewarePanicOnLateUse(t *testing.T) {\n\thandler := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello\\n\"))\n\t}\n\n\tmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tdefer func() {\n\t\tif recover() == nil {\n\t\t\tt.Error(\"expected panic()\")\n\t\t}\n\t}()\n\n\tr := NewRouter()\n\tr.Get(\"/\", handler)\n\tr.Use(mw) // Too late to apply middleware, we're expecting panic().\n}\n\nfunc TestMountingExistingPath(t *testing.T) {\n\thandler := func(w http.ResponseWriter, r *http.Request) {}\n\n\tdefer func() {\n\t\tif recover() == nil {\n\t\t\tt.Error(\"expected panic()\")\n\t\t}\n\t}()\n\n\tr := NewRouter()\n\tr.Get(\"/\", handler)\n\tr.Mount(\"/hi\", http.HandlerFunc(handler))\n\tr.Mount(\"/hi\", http.HandlerFunc(handler))\n}\n\nfunc TestMountingSimilarPattern(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\n\tr2 := NewRouter()\n\tr2.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"foobar\"))\n\t})\n\n\tr3 := NewRouter()\n\tr3.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"foo\"))\n\t})\n\n\tr.Mount(\"/foobar\", r2)\n\tr.Mount(\"/foo\", r3)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxEmptyParams(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(`/users/{x}/{y}/{z}`, func(w http.ResponseWriter, r *http.Request) {\n\t\tx := URLParam(r, \"x\")\n\t\ty := URLParam(r, \"y\")\n\t\tz := URLParam(r, \"z\")\n\t\tw.Write([]byte(fmt.Sprintf(\"%s-%s-%s\", x, y, z)))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/users/a/b/c\", nil); body != \"a-b-c\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/users///c\", nil); body != \"--c\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxMissingParams(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(`/user/{userId:\\d+}`, func(w http.ResponseWriter, r *http.Request) {\n\t\tuserID := URLParam(r, \"userId\")\n\t\tw.Write([]byte(fmt.Sprintf(\"userId = '%s'\", userID)))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/user/123\", nil); body != \"userId = '123'\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/user/\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxContextIsThreadSafe(t *testing.T) {\n\trouter := NewRouter()\n\trouter.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tctx, cancel := context.WithTimeout(r.Context(), 1*time.Millisecond)\n\t\tdefer cancel()\n\n\t\t<-ctx.Done()\n\t})\n\n\twg := sync.WaitGroup{}\n\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor j := 0; j < 10000; j++ {\n\t\t\t\tw := httptest.NewRecorder()\n\t\t\t\tr, err := http.NewRequest(\"GET\", \"/ok\", nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatal(err)\n\t\t\t\t}\n\n\t\t\t\tctx, cancel := context.WithCancel(r.Context())\n\t\t\t\tr = r.WithContext(ctx)\n\n\t\t\t\tgo func() {\n\t\t\t\t\tcancel()\n\t\t\t\t}()\n\t\t\t\trouter.ServeHTTP(w, r)\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n}\n\nfunc TestEscapedURLParams(t *testing.T) {\n\tm := NewRouter()\n\tm.Get(\"/api/{identifier}/{region}/{size}/{rotation}/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\trctx := RouteContext(r.Context())\n\t\tif rctx == nil {\n\t\t\tt.Error(\"no context\")\n\t\t\treturn\n\t\t}\n\t\tidentifier := URLParam(r, \"identifier\")\n\t\tif identifier != \"http:%2f%2fexample.com%2fimage.png\" {\n\t\t\tt.Errorf(\"identifier path parameter incorrect %s\", identifier)\n\t\t\treturn\n\t\t}\n\t\tregion := URLParam(r, \"region\")\n\t\tif region != \"full\" {\n\t\t\tt.Errorf(\"region path parameter incorrect %s\", region)\n\t\t\treturn\n\t\t}\n\t\tsize := URLParam(r, \"size\")\n\t\tif size != \"max\" {\n\t\t\tt.Errorf(\"size path parameter incorrect %s\", size)\n\t\t\treturn\n\t\t}\n\t\trotation := URLParam(r, \"rotation\")\n\t\tif rotation != \"0\" {\n\t\t\tt.Errorf(\"rotation path parameter incorrect %s\", rotation)\n\t\t\treturn\n\t\t}\n\t\tw.Write([]byte(\"success\"))\n\t})\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/api/http:%2f%2fexample.com%2fimage.png/full/max/0/color.png\", nil); body != \"success\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxMatch(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Test\", \"yes\")\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.Route(\"/articles\", func(r Router) {\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-Article\", id)\n\t\t\tw.Write([]byte(\"article:\" + id))\n\t\t})\n\t})\n\tr.Route(\"/users\", func(r Router) {\n\t\tr.Head(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"X-User\", \"-\")\n\t\t\tw.Write([]byte(\"user\"))\n\t\t})\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-User\", id)\n\t\t\tw.Write([]byte(\"user:\" + id))\n\t\t})\n\t})\n\n\ttctx := NewRouteContext()\n\n\ttctx.Reset()\n\tif r.Match(tctx, \"GET\", \"/users/1\") == false {\n\t\tt.Fatal(\"expecting to find match for route:\", \"GET\", \"/users/1\")\n\t}\n\n\ttctx.Reset()\n\tif r.Match(tctx, \"HEAD\", \"/articles/10\") == true {\n\t\tt.Fatal(\"not expecting to find match for route:\", \"HEAD\", \"/articles/10\")\n\t}\n}\n\nfunc TestServerBaseContext(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tbaseYes := r.Context().Value(ctxKey{\"base\"}).(string)\n\t\tif _, ok := r.Context().Value(http.ServerContextKey).(*http.Server); !ok {\n\t\t\tpanic(\"missing server context\")\n\t\t}\n\t\tif _, ok := r.Context().Value(http.LocalAddrContextKey).(net.Addr); !ok {\n\t\t\tpanic(\"missing local addr context\")\n\t\t}\n\t\tw.Write([]byte(baseYes))\n\t})\n\n\t// Setup http Server with a base context\n\tctx := context.WithValue(context.Background(), ctxKey{\"base\"}, \"yes\")\n\tts := httptest.NewServer(ServerBaseContext(ctx, r))\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"yes\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\trespBody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\tdefer resp.Body.Close()\n\n\treturn resp, string(respBody)\n}\n\nfunc testHandler(t *testing.T, h http.Handler, method, path string, body io.Reader) (*http.Response, string) {\n\tr, _ := http.NewRequest(method, path, body)\n\tw := httptest.NewRecorder()\n\th.ServeHTTP(w, r)\n\treturn w.Result(), string(w.Body.Bytes())\n}\n\ntype testFileSystem struct {\n\topen func(name string) (http.File, error)\n}\n\nfunc (fs *testFileSystem) Open(name string) (http.File, error) {\n\treturn fs.open(name)\n}\n\ntype testFile struct {\n\tname     string\n\tcontents []byte\n}\n\nfunc (tf *testFile) Close() error {\n\treturn nil\n}\n\nfunc (tf *testFile) Read(p []byte) (n int, err error) {\n\tcopy(p, tf.contents)\n\treturn len(p), nil\n}\n\nfunc (tf *testFile) Seek(offset int64, whence int) (int64, error) {\n\treturn 0, nil\n}\n\nfunc (tf *testFile) Readdir(count int) ([]os.FileInfo, error) {\n\tstat, _ := tf.Stat()\n\treturn []os.FileInfo{stat}, nil\n}\n\nfunc (tf *testFile) Stat() (os.FileInfo, error) {\n\treturn &testFileInfo{tf.name, int64(len(tf.contents))}, nil\n}\n\ntype testFileInfo struct {\n\tname string\n\tsize int64\n}\n\nfunc (tfi *testFileInfo) Name() string       { return tfi.name }\nfunc (tfi *testFileInfo) Size() int64        { return tfi.size }\nfunc (tfi *testFileInfo) Mode() os.FileMode  { return 0755 }\nfunc (tfi *testFileInfo) ModTime() time.Time { return time.Now() }\nfunc (tfi *testFileInfo) IsDir() bool        { return false }\nfunc (tfi *testFileInfo) Sys() interface{}   { return nil }\n\ntype ctxKey struct {\n\tname string\n}\n\nfunc (k ctxKey) String() string {\n\treturn \"context value \" + k.name\n}\n\nfunc BenchmarkMux(b *testing.B) {\n\th1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\tmx := NewRouter()\n\tmx.Get(\"/\", h1)\n\tmx.Get(\"/hi\", h2)\n\tmx.Get(\"/sup/{id}/and/{this}\", h3)\n\n\tmx.Route(\"/sharing/{hash}\", func(mx Router) {\n\t\tmx.Get(\"/\", h4)          // subrouter-1\n\t\tmx.Get(\"/{network}\", h5) // subrouter-1\n\t\tmx.Get(\"/twitter\", h5)\n\t\tmx.Route(\"/direct\", func(mx Router) {\n\t\t\tmx.Get(\"/\", h6) // subrouter-2\n\t\t})\n\t})\n\n\troutes := []string{\n\t\t\"/\",\n\t\t\"/sup/123/and/this\",\n\t\t\"/sharing/aBc\",         // subrouter-1\n\t\t\"/sharing/aBc/twitter\", // subrouter-1\n\t\t\"/sharing/aBc/direct\",  // subrouter-2\n\t}\n\n\tfor _, path := range routes {\n\t\tb.Run(\"route:\"+path, func(b *testing.B) {\n\t\t\tw := httptest.NewRecorder()\n\t\t\tr, _ := http.NewRequest(\"GET\", path, nil)\n\n\t\t\tb.ReportAllocs()\n\t\t\tb.ResetTimer()\n\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tmx.ServeHTTP(w, r)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/testdata/cert.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIC/zCCAeegAwIBAgIRANioW0Re7DtpT4qZpJU1iK8wDQYJKoZIhvcNAQELBQAw\nEjEQMA4GA1UEChMHQWNtZSBDbzAeFw0xNjEyMzExNDU0MzBaFw0xNzEyMzExNDU0\nMzBaMBIxEDAOBgNVBAoTB0FjbWUgQ28wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\nggEKAoIBAQDpFfOsaXDYlL+ektfsqGYrSAsoTbe7zqjpow9nqUU4PmLRu2YMaaW8\nfAoneUnJxsJw7ql38+VMpphZUOmOWvsO7uV/lfnTIQfTwllHDdgAR5A11d84Zy/y\nTiNIFJduuaPtEhQs1dxPhU7TG8sEfFRhBoUDPv473akeGPNkVU756RVBYM6rUc3b\nYygD0PXGsQ2obrImbYUyyHH5YClCvGl1No57n3ugLqSSfwbgR3/Gw7kkGKy0PMOu\nTuHuJnTEmofJPkqEyFRVMlIAtfqFqJUfDHTOuQGWIUPnjDg+fqTI9EPJ+pElBqDQ\nIqW93BY5XePMdrTQc1h6xkduDfuLeA7TAgMBAAGjUDBOMA4GA1UdDwEB/wQEAwIF\noDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMBkGA1UdEQQSMBCC\nDmxvY2FsaG9zdDo3MDcyMA0GCSqGSIb3DQEBCwUAA4IBAQDnsWmZdf7209A/XHUe\nxoONCbU8jaYFVoA+CN9J+3CASzrzTQ4fh9RJdm2FZuv4sWnb5c5hDN7H/M/nLcb0\n+uu7ACBGhd7yACYCQm/z3Pm3CY2BRIo0vCCRioGx+6J3CPGWFm0vHwNBge0iBOKC\nWn+/YOlTDth/M3auHYlr7hdFmf57U4V/5iTr4wiKxwM9yMPcVRQF/1XpPd7A0VqM\nnFSEfDpFjrA7MvT3DrRqQGqF/ZXxDbro2nyki3YG8FwgKlFNVN9w55zNiriQ+WNA\nuz86lKg1FTc+m/R/0CD//7+7mme28N813EPVdV83TgxWNrfvAIRazkHE7YxETry0\nBJDg\n-----END CERTIFICATE-----"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/testdata/key.pem",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA6RXzrGlw2JS/npLX7KhmK0gLKE23u86o6aMPZ6lFOD5i0btm\nDGmlvHwKJ3lJycbCcO6pd/PlTKaYWVDpjlr7Du7lf5X50yEH08JZRw3YAEeQNdXf\nOGcv8k4jSBSXbrmj7RIULNXcT4VO0xvLBHxUYQaFAz7+O92pHhjzZFVO+ekVQWDO\nq1HN22MoA9D1xrENqG6yJm2FMshx+WApQrxpdTaOe597oC6kkn8G4Ed/xsO5JBis\ntDzDrk7h7iZ0xJqHyT5KhMhUVTJSALX6haiVHwx0zrkBliFD54w4Pn6kyPRDyfqR\nJQag0CKlvdwWOV3jzHa00HNYesZHbg37i3gO0wIDAQABAoIBAFvqYDE5U1rVLctm\ntOeKcN/YhS3bl/zjvhCEUOrcAYPwdh+m+tMiRk1RzN9MISEE1GCcfQ/kiiPz/lga\nZD/S+PYmlzH8/ouXlvKWzYYLm4ZgsinIsUIYzvuKfLdMB3uOkWpHmtUjcMGbHD57\n009tiAjK/WEOUkthWfOYe0KxsXczBn3PTAWZuiIkuA3RVWa7pCCFHUENkViP58wl\nKy1hYKnunKPApRwuiC6qIT5ZOCSukdCCbkmRnj/x+P8+nsosu+1d85MNZb8uLRi0\nRzMmuOfOK2poDsrNHQX7itKlu7rzMJQc3+RauqIZovNe/BmSq+tYBLboXvUp18g/\n+VqKeEECgYEA/LaD1tJepzD/1lhgunFcnDjxsDJqLUpfR5eDMX1qhGJphuPBLOXS\nushmVVjbVIn25Wxeoe4RYrZ6Tuu0FEJJgV44Lt42OOFgK2gyrCJpYmlxpRaw+7jc\nDbp1Sh3/9VqMZjR/mQIzTnfOtS2n4Fk1Q53hdJn5Pn+uPMmMO4hF87sCgYEA7B4V\nBACsd6eqVxKkEMc72VLeYb0Ri0bl0FwbvIKXImppwA0tbMDmeA+6yhcRm23dhd5v\ncfNhJepRIzkM2CkhnazlsAbDoJPqb7/sbNzodtW1P0op7YIFYbrkcX4yOu9O1DNI\nIj4PR8H1WcpPjhvr3q+iNO5agQX7bMQ1BnnJg8kCgYBA1tdm090DSrgpl81hqNpZ\nHucsDRNfAXkG1mIL3aDpzJJE0MTsrx7tW6Od/ElyHF/jp3V0WK/PQwCIpUMz+3n+\nnl0N8We6GmFhYb+2mLGvVVyaPgM04s5bG18ioCXfHtdtFcUzTfQ6CtVXeRpcnqbi\n7Ww+TY88sOfUouW/FIzWJwKBgQCsLauJhaw+fOc8I328NmywJzu+7g5TD9oZvHEF\nX/0xvYNr5rAPNANb3ayKHZRbURxOuEtwPtfCvEF6e+mf3y6COkgrumMBP5ue7cdM\nAzMJJQHMKxqz9TJTd+OJ10ptq4BCQTsCrVqbKxbs6RhmOnofoteX3Y/lsiULxXAd\nTsXh8QKBgQDQHosH8VoL7vIK+SqY5uoHAhMytSVNx4IaZZg4ho8oyjw12QXcidgV\nQJZQMdPEv8cAK78WcQdSthop+O/tu2cKLHyAmWmO3oU7gIQECui0aMXSqraO6Vde\nC5tqYlyLa7bHZS3AqrjRv9BRfwPKVkmBoYdA652rN/tE/K4UWsghnA==\n-----END RSA PRIVATE KEY-----"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/tree.go",
    "content": "package chi\n\n// Radix tree implementation below is a based on the original work by\n// Armon Dadgar in https://github.com/armon/go-radix/blob/master/radix.go\n// (MIT licensed). It's been heavily modified for use as a HTTP routing tree.\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"net/http\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype methodTyp int\n\nconst (\n\tmSTUB methodTyp = 1 << iota\n\tmCONNECT\n\tmDELETE\n\tmGET\n\tmHEAD\n\tmOPTIONS\n\tmPATCH\n\tmPOST\n\tmPUT\n\tmTRACE\n)\n\nvar mALL = mCONNECT | mDELETE | mGET | mHEAD |\n\tmOPTIONS | mPATCH | mPOST | mPUT | mTRACE\n\nvar methodMap = map[string]methodTyp{\n\t\"CONNECT\": mCONNECT,\n\t\"DELETE\":  mDELETE,\n\t\"GET\":     mGET,\n\t\"HEAD\":    mHEAD,\n\t\"OPTIONS\": mOPTIONS,\n\t\"PATCH\":   mPATCH,\n\t\"POST\":    mPOST,\n\t\"PUT\":     mPUT,\n\t\"TRACE\":   mTRACE,\n}\n\n// RegisterMethod adds support for custom HTTP method handlers, available\n// via Router#Method and Router#MethodFunc\nfunc RegisterMethod(method string) {\n\tif method == \"\" {\n\t\treturn\n\t}\n\tmethod = strings.ToUpper(method)\n\tif _, ok := methodMap[method]; ok {\n\t\treturn\n\t}\n\tn := len(methodMap)\n\tif n > strconv.IntSize {\n\t\tpanic(fmt.Sprintf(\"chi: max number of methods reached (%d)\", strconv.IntSize))\n\t}\n\tmt := methodTyp(math.Exp2(float64(n)))\n\tmethodMap[method] = mt\n\tmALL |= mt\n}\n\ntype nodeTyp uint8\n\nconst (\n\tntStatic   nodeTyp = iota // /home\n\tntRegexp                  // /{id:[0-9]+}\n\tntParam                   // /{user}\n\tntCatchAll                // /api/v1/*\n)\n\ntype node struct {\n\t// node type: static, regexp, param, catchAll\n\ttyp nodeTyp\n\n\t// first byte of the prefix\n\tlabel byte\n\n\t// first byte of the child prefix\n\ttail byte\n\n\t// prefix is the common prefix we ignore\n\tprefix string\n\n\t// regexp matcher for regexp nodes\n\trex *regexp.Regexp\n\n\t// HTTP handler endpoints on the leaf node\n\tendpoints endpoints\n\n\t// subroutes on the leaf node\n\tsubroutes Routes\n\n\t// child nodes should be stored in-order for iteration,\n\t// in groups of the node type.\n\tchildren [ntCatchAll + 1]nodes\n}\n\n// endpoints is a mapping of http method constants to handlers\n// for a given route.\ntype endpoints map[methodTyp]*endpoint\n\ntype endpoint struct {\n\t// endpoint handler\n\thandler http.Handler\n\n\t// pattern is the routing pattern for handler nodes\n\tpattern string\n\n\t// parameter keys recorded on handler nodes\n\tparamKeys []string\n}\n\nfunc (s endpoints) Value(method methodTyp) *endpoint {\n\tmh, ok := s[method]\n\tif !ok {\n\t\tmh = &endpoint{}\n\t\ts[method] = mh\n\t}\n\treturn mh\n}\n\nfunc (n *node) InsertRoute(method methodTyp, pattern string, handler http.Handler) *node {\n\tvar parent *node\n\tsearch := pattern\n\n\tfor {\n\t\t// Handle key exhaustion\n\t\tif len(search) == 0 {\n\t\t\t// Insert or update the node's leaf handler\n\t\t\tn.setEndpoint(method, handler, pattern)\n\t\t\treturn n\n\t\t}\n\n\t\t// We're going to be searching for a wild node next,\n\t\t// in this case, we need to get the tail\n\t\tvar label = search[0]\n\t\tvar segTail byte\n\t\tvar segEndIdx int\n\t\tvar segTyp nodeTyp\n\t\tvar segRexpat string\n\t\tif label == '{' || label == '*' {\n\t\t\tsegTyp, _, segRexpat, segTail, _, segEndIdx = patNextSegment(search)\n\t\t}\n\n\t\tvar prefix string\n\t\tif segTyp == ntRegexp {\n\t\t\tprefix = segRexpat\n\t\t}\n\n\t\t// Look for the edge to attach to\n\t\tparent = n\n\t\tn = n.getEdge(segTyp, label, segTail, prefix)\n\n\t\t// No edge, create one\n\t\tif n == nil {\n\t\t\tchild := &node{label: label, tail: segTail, prefix: search}\n\t\t\thn := parent.addChild(child, search)\n\t\t\thn.setEndpoint(method, handler, pattern)\n\n\t\t\treturn hn\n\t\t}\n\n\t\t// Found an edge to match the pattern\n\n\t\tif n.typ > ntStatic {\n\t\t\t// We found a param node, trim the param from the search path and continue.\n\t\t\t// This param/wild pattern segment would already be on the tree from a previous\n\t\t\t// call to addChild when creating a new node.\n\t\t\tsearch = search[segEndIdx:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Static nodes fall below here.\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\t// the common prefix is as long as the current node's prefix we're attempting to insert.\n\t\t\t// keep the search going.\n\t\t\tsearch = search[commonPrefix:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split the node\n\t\tchild := &node{\n\t\t\ttyp:    ntStatic,\n\t\t\tprefix: search[:commonPrefix],\n\t\t}\n\t\tparent.replaceChild(search[0], segTail, child)\n\n\t\t// Restore the existing node\n\t\tn.label = n.prefix[commonPrefix]\n\t\tn.prefix = n.prefix[commonPrefix:]\n\t\tchild.addChild(n, n.prefix)\n\n\t\t// If the new key is a subset, set the method/handler on this node and finish.\n\t\tsearch = search[commonPrefix:]\n\t\tif len(search) == 0 {\n\t\t\tchild.setEndpoint(method, handler, pattern)\n\t\t\treturn child\n\t\t}\n\n\t\t// Create a new edge for the node\n\t\tsubchild := &node{\n\t\t\ttyp:    ntStatic,\n\t\t\tlabel:  search[0],\n\t\t\tprefix: search,\n\t\t}\n\t\thn := child.addChild(subchild, search)\n\t\thn.setEndpoint(method, handler, pattern)\n\t\treturn hn\n\t}\n}\n\n// addChild appends the new `child` node to the tree using the `pattern` as the trie key.\n// For a URL router like chi's, we split the static, param, regexp and wildcard segments\n// into different nodes. In addition, addChild will recursively call itself until every\n// pattern segment is added to the url pattern tree as individual nodes, depending on type.\nfunc (n *node) addChild(child *node, prefix string) *node {\n\tsearch := prefix\n\n\t// handler leaf node added to the tree is the child.\n\t// this may be overridden later down the flow\n\thn := child\n\n\t// Parse next segment\n\tsegTyp, _, segRexpat, segTail, segStartIdx, segEndIdx := patNextSegment(search)\n\n\t// Add child depending on next up segment\n\tswitch segTyp {\n\n\tcase ntStatic:\n\t\t// Search prefix is all static (that is, has no params in path)\n\t\t// noop\n\n\tdefault:\n\t\t// Search prefix contains a param, regexp or wildcard\n\n\t\tif segTyp == ntRegexp {\n\t\t\trex, err := regexp.Compile(segRexpat)\n\t\t\tif err != nil {\n\t\t\t\tpanic(fmt.Sprintf(\"chi: invalid regexp pattern '%s' in route param\", segRexpat))\n\t\t\t}\n\t\t\tchild.prefix = segRexpat\n\t\t\tchild.rex = rex\n\t\t}\n\n\t\tif segStartIdx == 0 {\n\t\t\t// Route starts with a param\n\t\t\tchild.typ = segTyp\n\n\t\t\tif segTyp == ntCatchAll {\n\t\t\t\tsegStartIdx = -1\n\t\t\t} else {\n\t\t\t\tsegStartIdx = segEndIdx\n\t\t\t}\n\t\t\tif segStartIdx < 0 {\n\t\t\t\tsegStartIdx = len(search)\n\t\t\t}\n\t\t\tchild.tail = segTail // for params, we set the tail\n\n\t\t\tif segStartIdx != len(search) {\n\t\t\t\t// add static edge for the remaining part, split the end.\n\t\t\t\t// its not possible to have adjacent param nodes, so its certainly\n\t\t\t\t// going to be a static node next.\n\n\t\t\t\tsearch = search[segStartIdx:] // advance search position\n\n\t\t\t\tnn := &node{\n\t\t\t\t\ttyp:    ntStatic,\n\t\t\t\t\tlabel:  search[0],\n\t\t\t\t\tprefix: search,\n\t\t\t\t}\n\t\t\t\thn = child.addChild(nn, search)\n\t\t\t}\n\n\t\t} else if segStartIdx > 0 {\n\t\t\t// Route has some param\n\n\t\t\t// starts with a static segment\n\t\t\tchild.typ = ntStatic\n\t\t\tchild.prefix = search[:segStartIdx]\n\t\t\tchild.rex = nil\n\n\t\t\t// add the param edge node\n\t\t\tsearch = search[segStartIdx:]\n\n\t\t\tnn := &node{\n\t\t\t\ttyp:   segTyp,\n\t\t\t\tlabel: search[0],\n\t\t\t\ttail:  segTail,\n\t\t\t}\n\t\t\thn = child.addChild(nn, search)\n\n\t\t}\n\t}\n\n\tn.children[child.typ] = append(n.children[child.typ], child)\n\tn.children[child.typ].Sort()\n\treturn hn\n}\n\nfunc (n *node) replaceChild(label, tail byte, child *node) {\n\tfor i := 0; i < len(n.children[child.typ]); i++ {\n\t\tif n.children[child.typ][i].label == label && n.children[child.typ][i].tail == tail {\n\t\t\tn.children[child.typ][i] = child\n\t\t\tn.children[child.typ][i].label = label\n\t\t\tn.children[child.typ][i].tail = tail\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"chi: replacing missing child\")\n}\n\nfunc (n *node) getEdge(ntyp nodeTyp, label, tail byte, prefix string) *node {\n\tnds := n.children[ntyp]\n\tfor i := 0; i < len(nds); i++ {\n\t\tif nds[i].label == label && nds[i].tail == tail {\n\t\t\tif ntyp == ntRegexp && nds[i].prefix != prefix {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nds[i]\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (n *node) setEndpoint(method methodTyp, handler http.Handler, pattern string) {\n\t// Set the handler for the method type on the node\n\tif n.endpoints == nil {\n\t\tn.endpoints = make(endpoints, 0)\n\t}\n\n\tparamKeys := patParamKeys(pattern)\n\n\tif method&mSTUB == mSTUB {\n\t\tn.endpoints.Value(mSTUB).handler = handler\n\t}\n\tif method&mALL == mALL {\n\t\th := n.endpoints.Value(mALL)\n\t\th.handler = handler\n\t\th.pattern = pattern\n\t\th.paramKeys = paramKeys\n\t\tfor _, m := range methodMap {\n\t\t\th := n.endpoints.Value(m)\n\t\t\th.handler = handler\n\t\t\th.pattern = pattern\n\t\t\th.paramKeys = paramKeys\n\t\t}\n\t} else {\n\t\th := n.endpoints.Value(method)\n\t\th.handler = handler\n\t\th.pattern = pattern\n\t\th.paramKeys = paramKeys\n\t}\n}\n\nfunc (n *node) FindRoute(rctx *Context, method methodTyp, path string) (*node, endpoints, http.Handler) {\n\t// Reset the context routing pattern and params\n\trctx.routePattern = \"\"\n\trctx.routeParams.Keys = rctx.routeParams.Keys[:0]\n\trctx.routeParams.Values = rctx.routeParams.Values[:0]\n\n\t// Find the routing handlers for the path\n\trn := n.findRoute(rctx, method, path)\n\tif rn == nil {\n\t\treturn nil, nil, nil\n\t}\n\n\t// Record the routing params in the request lifecycle\n\trctx.URLParams.Keys = append(rctx.URLParams.Keys, rctx.routeParams.Keys...)\n\trctx.URLParams.Values = append(rctx.URLParams.Values, rctx.routeParams.Values...)\n\n\t// Record the routing pattern in the request lifecycle\n\tif rn.endpoints[method].pattern != \"\" {\n\t\trctx.routePattern = rn.endpoints[method].pattern\n\t\trctx.RoutePatterns = append(rctx.RoutePatterns, rctx.routePattern)\n\t}\n\n\treturn rn, rn.endpoints, rn.endpoints[method].handler\n}\n\n// Recursive edge traversal by checking all nodeTyp groups along the way.\n// It's like searching through a multi-dimensional radix trie.\nfunc (n *node) findRoute(rctx *Context, method methodTyp, path string) *node {\n\tnn := n\n\tsearch := path\n\n\tfor t, nds := range nn.children {\n\t\tntyp := nodeTyp(t)\n\t\tif len(nds) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar xn *node\n\t\txsearch := search\n\n\t\tvar label byte\n\t\tif search != \"\" {\n\t\t\tlabel = search[0]\n\t\t}\n\n\t\tswitch ntyp {\n\t\tcase ntStatic:\n\t\t\txn = nds.findEdge(label)\n\t\t\tif xn == nil || !strings.HasPrefix(xsearch, xn.prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\txsearch = xsearch[len(xn.prefix):]\n\n\t\tcase ntParam, ntRegexp:\n\t\t\t// short-circuit and return no matching route for empty param values\n\t\t\tif xsearch == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// serially loop through each node grouped by the tail delimiter\n\t\t\tfor idx := 0; idx < len(nds); idx++ {\n\t\t\t\txn = nds[idx]\n\n\t\t\t\t// label for param nodes is the delimiter byte\n\t\t\t\tp := strings.IndexByte(xsearch, xn.tail)\n\n\t\t\t\tif p < 0 {\n\t\t\t\t\tif xn.tail == '/' {\n\t\t\t\t\t\tp = len(xsearch)\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}\n\n\t\t\t\tif ntyp == ntRegexp && xn.rex != nil {\n\t\t\t\t\tif xn.rex.Match([]byte(xsearch[:p])) == false {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if strings.IndexByte(xsearch[:p], '/') != -1 {\n\t\t\t\t\t// avoid a match across path segments\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\trctx.routeParams.Values = append(rctx.routeParams.Values, xsearch[:p])\n\t\t\t\txsearch = xsearch[p:]\n\t\t\t\tbreak\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// catch-all nodes\n\t\t\trctx.routeParams.Values = append(rctx.routeParams.Values, search)\n\t\t\txn = nds[0]\n\t\t\txsearch = \"\"\n\t\t}\n\n\t\tif xn == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// did we find it yet?\n\t\tif len(xsearch) == 0 {\n\t\t\tif xn.isLeaf() {\n\t\t\t\th, _ := xn.endpoints[method]\n\t\t\t\tif h != nil && h.handler != nil {\n\t\t\t\t\trctx.routeParams.Keys = append(rctx.routeParams.Keys, h.paramKeys...)\n\t\t\t\t\treturn xn\n\t\t\t\t}\n\n\t\t\t\t// flag that the routing context found a route, but not a corresponding\n\t\t\t\t// supported method\n\t\t\t\trctx.methodNotAllowed = true\n\t\t\t}\n\t\t}\n\n\t\t// recursively find the next node..\n\t\tfin := xn.findRoute(rctx, method, xsearch)\n\t\tif fin != nil {\n\t\t\treturn fin\n\t\t}\n\n\t\t// Did not find final handler, let's remove the param here if it was set\n\t\tif xn.typ > ntStatic {\n\t\t\tif len(rctx.routeParams.Values) > 0 {\n\t\t\t\trctx.routeParams.Values = rctx.routeParams.Values[:len(rctx.routeParams.Values)-1]\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn nil\n}\n\nfunc (n *node) findEdge(ntyp nodeTyp, label byte) *node {\n\tnds := n.children[ntyp]\n\tnum := len(nds)\n\tidx := 0\n\n\tswitch ntyp {\n\tcase ntStatic, ntParam, ntRegexp:\n\t\ti, j := 0, num-1\n\t\tfor i <= j {\n\t\t\tidx = i + (j-i)/2\n\t\t\tif label > nds[idx].label {\n\t\t\t\ti = idx + 1\n\t\t\t} else if label < nds[idx].label {\n\t\t\t\tj = idx - 1\n\t\t\t} else {\n\t\t\t\ti = num // breaks cond\n\t\t\t}\n\t\t}\n\t\tif nds[idx].label != label {\n\t\t\treturn nil\n\t\t}\n\t\treturn nds[idx]\n\n\tdefault: // catch all\n\t\treturn nds[idx]\n\t}\n}\n\nfunc (n *node) isEmpty() bool {\n\tfor _, nds := range n.children {\n\t\tif len(nds) > 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (n *node) isLeaf() bool {\n\treturn n.endpoints != nil\n}\n\nfunc (n *node) findPattern(pattern string) bool {\n\tnn := n\n\tfor _, nds := range nn.children {\n\t\tif len(nds) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tn = nn.findEdge(nds[0].typ, pattern[0])\n\t\tif n == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar idx int\n\t\tvar xpattern string\n\n\t\tswitch n.typ {\n\t\tcase ntStatic:\n\t\t\tidx = longestPrefix(pattern, n.prefix)\n\t\t\tif idx < len(n.prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\tcase ntParam, ntRegexp:\n\t\t\tidx = strings.IndexByte(pattern, '}') + 1\n\n\t\tcase ntCatchAll:\n\t\t\tidx = longestPrefix(pattern, \"*\")\n\n\t\tdefault:\n\t\t\tpanic(\"chi: unknown node type\")\n\t\t}\n\n\t\txpattern = pattern[idx:]\n\t\tif len(xpattern) == 0 {\n\t\t\treturn true\n\t\t}\n\n\t\treturn n.findPattern(xpattern)\n\t}\n\treturn false\n}\n\nfunc (n *node) routes() []Route {\n\trts := []Route{}\n\n\tn.walk(func(eps endpoints, subroutes Routes) bool {\n\t\tif eps[mSTUB] != nil && eps[mSTUB].handler != nil && subroutes == nil {\n\t\t\treturn false\n\t\t}\n\n\t\t// Group methodHandlers by unique patterns\n\t\tpats := make(map[string]endpoints, 0)\n\n\t\tfor mt, h := range eps {\n\t\t\tif h.pattern == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := pats[h.pattern]\n\t\t\tif !ok {\n\t\t\t\tp = endpoints{}\n\t\t\t\tpats[h.pattern] = p\n\t\t\t}\n\t\t\tp[mt] = h\n\t\t}\n\n\t\tfor p, mh := range pats {\n\t\t\ths := make(map[string]http.Handler, 0)\n\t\t\tif mh[mALL] != nil && mh[mALL].handler != nil {\n\t\t\t\ths[\"*\"] = mh[mALL].handler\n\t\t\t}\n\n\t\t\tfor mt, h := range mh {\n\t\t\t\tif h.handler == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tm := methodTypString(mt)\n\t\t\t\tif m == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ths[m] = h.handler\n\t\t\t}\n\n\t\t\trt := Route{p, hs, subroutes}\n\t\t\trts = append(rts, rt)\n\t\t}\n\n\t\treturn false\n\t})\n\n\treturn rts\n}\n\nfunc (n *node) walk(fn func(eps endpoints, subroutes Routes) bool) bool {\n\t// Visit the leaf values if any\n\tif (n.endpoints != nil || n.subroutes != nil) && fn(n.endpoints, n.subroutes) {\n\t\treturn true\n\t}\n\n\t// Recurse on the children\n\tfor _, ns := range n.children {\n\t\tfor _, cn := range ns {\n\t\t\tif cn.walk(fn) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// patNextSegment returns the next segment details from a pattern:\n// node type, param key, regexp string, param tail byte, param starting index, param ending index\nfunc patNextSegment(pattern string) (nodeTyp, string, string, byte, int, int) {\n\tps := strings.Index(pattern, \"{\")\n\tws := strings.Index(pattern, \"*\")\n\n\tif ps < 0 && ws < 0 {\n\t\treturn ntStatic, \"\", \"\", 0, 0, len(pattern) // we return the entire thing\n\t}\n\n\t// Sanity check\n\tif ps >= 0 && ws >= 0 && ws < ps {\n\t\tpanic(\"chi: wildcard '*' must be the last pattern in a route, otherwise use a '{param}'\")\n\t}\n\n\tvar tail byte = '/' // Default endpoint tail to / byte\n\n\tif ps >= 0 {\n\t\t// Param/Regexp pattern is next\n\t\tnt := ntParam\n\n\t\t// Read to closing } taking into account opens and closes in curl count (cc)\n\t\tcc := 0\n\t\tpe := ps\n\t\tfor i, c := range pattern[ps:] {\n\t\t\tif c == '{' {\n\t\t\t\tcc++\n\t\t\t} else if c == '}' {\n\t\t\t\tcc--\n\t\t\t\tif cc == 0 {\n\t\t\t\t\tpe = ps + i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif pe == ps {\n\t\t\tpanic(\"chi: route param closing delimiter '}' is missing\")\n\t\t}\n\n\t\tkey := pattern[ps+1 : pe]\n\t\tpe++ // set end to next position\n\n\t\tif pe < len(pattern) {\n\t\t\ttail = pattern[pe]\n\t\t}\n\n\t\tvar rexpat string\n\t\tif idx := strings.Index(key, \":\"); idx >= 0 {\n\t\t\tnt = ntRegexp\n\t\t\trexpat = key[idx+1:]\n\t\t\tkey = key[:idx]\n\t\t}\n\n\t\tif len(rexpat) > 0 {\n\t\t\tif rexpat[0] != '^' {\n\t\t\t\trexpat = \"^\" + rexpat\n\t\t\t}\n\t\t\tif rexpat[len(rexpat)-1] != '$' {\n\t\t\t\trexpat = rexpat + \"$\"\n\t\t\t}\n\t\t}\n\n\t\treturn nt, key, rexpat, tail, ps, pe\n\t}\n\n\t// Wildcard pattern as finale\n\t// TODO: should we panic if there is stuff after the * ???\n\treturn ntCatchAll, \"*\", \"\", 0, ws, len(pattern)\n}\n\nfunc patParamKeys(pattern string) []string {\n\tpat := pattern\n\tparamKeys := []string{}\n\tfor {\n\t\tptyp, paramKey, _, _, _, e := patNextSegment(pat)\n\t\tif ptyp == ntStatic {\n\t\t\treturn paramKeys\n\t\t}\n\t\tfor i := 0; i < len(paramKeys); i++ {\n\t\t\tif paramKeys[i] == paramKey {\n\t\t\t\tpanic(fmt.Sprintf(\"chi: routing pattern '%s' contains duplicate param key, '%s'\", pattern, paramKey))\n\t\t\t}\n\t\t}\n\t\tparamKeys = append(paramKeys, paramKey)\n\t\tpat = pat[e:]\n\t}\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\nfunc methodTypString(method methodTyp) string {\n\tfor s, t := range methodMap {\n\t\tif method == t {\n\t\t\treturn s\n\t\t}\n\t}\n\treturn \"\"\n}\n\ntype nodes []*node\n\n// Sort the list of nodes by label\nfunc (ns nodes) Sort()              { sort.Sort(ns); ns.tailSort() }\nfunc (ns nodes) Len() int           { return len(ns) }\nfunc (ns nodes) Swap(i, j int)      { ns[i], ns[j] = ns[j], ns[i] }\nfunc (ns nodes) Less(i, j int) bool { return ns[i].label < ns[j].label }\n\n// tailSort pushes nodes with '/' as the tail to the end of the list for param nodes.\n// The list order determines the traversal order.\nfunc (ns nodes) tailSort() {\n\tfor i := len(ns) - 1; i >= 0; i-- {\n\t\tif ns[i].typ > ntStatic && ns[i].tail == '/' {\n\t\t\tns.Swap(i, len(ns)-1)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (ns nodes) findEdge(label byte) *node {\n\tnum := len(ns)\n\tidx := 0\n\ti, j := 0, num-1\n\tfor i <= j {\n\t\tidx = i + (j-i)/2\n\t\tif label > ns[idx].label {\n\t\t\ti = idx + 1\n\t\t} else if label < ns[idx].label {\n\t\t\tj = idx - 1\n\t\t} else {\n\t\t\ti = num // breaks cond\n\t\t}\n\t}\n\tif ns[idx].label != label {\n\t\treturn nil\n\t}\n\treturn ns[idx]\n}\n\n// Route describes the details of a routing handler.\ntype Route struct {\n\tPattern   string\n\tHandlers  map[string]http.Handler\n\tSubRoutes Routes\n}\n\n// WalkFunc is the type of the function called for each method and route visited by Walk.\ntype WalkFunc func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error\n\n// Walk walks any router tree that implements Routes interface.\nfunc Walk(r Routes, walkFn WalkFunc) error {\n\treturn walk(r, walkFn, \"\")\n}\n\nfunc walk(r Routes, walkFn WalkFunc, parentRoute string, parentMw ...func(http.Handler) http.Handler) error {\n\tfor _, route := range r.Routes() {\n\t\tmws := make([]func(http.Handler) http.Handler, len(parentMw))\n\t\tcopy(mws, parentMw)\n\t\tmws = append(mws, r.Middlewares()...)\n\n\t\tif route.SubRoutes != nil {\n\t\t\tif err := walk(route.SubRoutes, walkFn, parentRoute+route.Pattern, mws...); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tfor method, handler := range route.Handlers {\n\t\t\tif method == \"*\" {\n\t\t\t\t// Ignore a \"catchAll\" method, since we pass down all the specific methods for each route.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfullRoute := parentRoute + route.Pattern\n\n\t\t\tif chain, ok := handler.(*ChainHandler); ok {\n\t\t\t\tif err := walkFn(method, fullRoute, chain.Endpoint, append(mws, chain.Middlewares...)...); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := walkFn(method, fullRoute, handler, mws...); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/chi/tree_test.go",
    "content": "package chi\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"testing\"\n)\n\nfunc TestTree(t *testing.T) {\n\thStub := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thIndex := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thFavicon := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleNear := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShowRelated := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShowOpts := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleSlug := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleByUser := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminCatchall := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminAppShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminAppShowCatchall := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserProfile := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserSuper := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserAll := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\n\ttr.InsertRoute(mGET, \"/\", hIndex)\n\ttr.InsertRoute(mGET, \"/favicon.ico\", hFavicon)\n\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub)\n\n\ttr.InsertRoute(mGET, \"/article\", hArticleList)\n\ttr.InsertRoute(mGET, \"/article/\", hArticleList)\n\n\ttr.InsertRoute(mGET, \"/article/near\", hArticleNear)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hStub)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hArticleShow)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hArticleShow) // duplicate will have no effect\n\ttr.InsertRoute(mGET, \"/article/@{user}\", hArticleByUser)\n\n\ttr.InsertRoute(mGET, \"/article/{sup}/{opts}\", hArticleShowOpts)\n\ttr.InsertRoute(mGET, \"/article/{id}/{opts}\", hArticleShowOpts) // overwrite above route, latest wins\n\n\ttr.InsertRoute(mGET, \"/article/{iffd}/edit\", hStub)\n\ttr.InsertRoute(mGET, \"/article/{id}//related\", hArticleShowRelated)\n\ttr.InsertRoute(mGET, \"/article/slug/{month}/-/{day}/{year}\", hArticleSlug)\n\n\ttr.InsertRoute(mGET, \"/admin/user\", hUserList)\n\ttr.InsertRoute(mGET, \"/admin/user/\", hStub) // will get replaced by next route\n\ttr.InsertRoute(mGET, \"/admin/user/\", hUserList)\n\n\ttr.InsertRoute(mGET, \"/admin/user//{id}\", hUserShow)\n\ttr.InsertRoute(mGET, \"/admin/user/{id}\", hUserShow)\n\n\ttr.InsertRoute(mGET, \"/admin/apps/{id}\", hAdminAppShow)\n\ttr.InsertRoute(mGET, \"/admin/apps/{id}/*ff\", hAdminAppShowCatchall) // TODO: ALLOWED...? prob not.. panic..?\n\n\ttr.InsertRoute(mGET, \"/admin/*ff\", hStub) // catchall segment will get replaced by next route\n\ttr.InsertRoute(mGET, \"/admin/*\", hAdminCatchall)\n\n\ttr.InsertRoute(mGET, \"/users/{userID}/profile\", hUserProfile)\n\ttr.InsertRoute(mGET, \"/users/super/*\", hUserSuper)\n\ttr.InsertRoute(mGET, \"/users/*\", hUserAll)\n\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/view\", hHubView1)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/view/*\", hHubView2)\n\tsr := NewRouter()\n\tsr.Get(\"/users\", hHubView3)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/*\", sr)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/users\", hHubView3)\n\n\ttests := []struct {\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{r: \"/\", h: hIndex, k: []string{}, v: []string{}},\n\t\t{r: \"/favicon.ico\", h: hFavicon, k: []string{}, v: []string{}},\n\n\t\t{r: \"/pages\", h: nil, k: []string{}, v: []string{}},\n\t\t{r: \"/pages/\", h: hStub, k: []string{\"*\"}, v: []string{\"\"}},\n\t\t{r: \"/pages/yes\", h: hStub, k: []string{\"*\"}, v: []string{\"yes\"}},\n\n\t\t{r: \"/article\", h: hArticleList, k: []string{}, v: []string{}},\n\t\t{r: \"/article/\", h: hArticleList, k: []string{}, v: []string{}},\n\t\t{r: \"/article/near\", h: hArticleNear, k: []string{}, v: []string{}},\n\t\t{r: \"/article/neard\", h: hArticleShow, k: []string{\"id\"}, v: []string{\"neard\"}},\n\t\t{r: \"/article/123\", h: hArticleShow, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{r: \"/article/123/456\", h: hArticleShowOpts, k: []string{\"id\", \"opts\"}, v: []string{\"123\", \"456\"}},\n\t\t{r: \"/article/@peter\", h: hArticleByUser, k: []string{\"user\"}, v: []string{\"peter\"}},\n\t\t{r: \"/article/22//related\", h: hArticleShowRelated, k: []string{\"id\"}, v: []string{\"22\"}},\n\t\t{r: \"/article/111/edit\", h: hStub, k: []string{\"iffd\"}, v: []string{\"111\"}},\n\t\t{r: \"/article/slug/sept/-/4/2015\", h: hArticleSlug, k: []string{\"month\", \"day\", \"year\"}, v: []string{\"sept\", \"4\", \"2015\"}},\n\t\t{r: \"/article/:id\", h: hArticleShow, k: []string{\"id\"}, v: []string{\":id\"}},\n\n\t\t{r: \"/admin/user\", h: hUserList, k: []string{}, v: []string{}},\n\t\t{r: \"/admin/user/\", h: hUserList, k: []string{}, v: []string{}},\n\t\t{r: \"/admin/user/1\", h: hUserShow, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{r: \"/admin/user//1\", h: hUserShow, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{r: \"/admin/hi\", h: hAdminCatchall, k: []string{\"*\"}, v: []string{\"hi\"}},\n\t\t{r: \"/admin/lots/of/:fun\", h: hAdminCatchall, k: []string{\"*\"}, v: []string{\"lots/of/:fun\"}},\n\t\t{r: \"/admin/apps/333\", h: hAdminAppShow, k: []string{\"id\"}, v: []string{\"333\"}},\n\t\t{r: \"/admin/apps/333/woot\", h: hAdminAppShowCatchall, k: []string{\"id\", \"*\"}, v: []string{\"333\", \"woot\"}},\n\n\t\t{r: \"/hubs/123/view\", h: hHubView1, k: []string{\"hubID\"}, v: []string{\"123\"}},\n\t\t{r: \"/hubs/123/view/index.html\", h: hHubView2, k: []string{\"hubID\", \"*\"}, v: []string{\"123\", \"index.html\"}},\n\t\t{r: \"/hubs/123/users\", h: hHubView3, k: []string{\"hubID\"}, v: []string{\"123\"}},\n\n\t\t{r: \"/users/123/profile\", h: hUserProfile, k: []string{\"userID\"}, v: []string{\"123\"}},\n\t\t{r: \"/users/super/123/okay/yes\", h: hUserSuper, k: []string{\"*\"}, v: []string{\"123/okay/yes\"}},\n\t\t{r: \"/users/123/okay/yes\", h: hUserAll, k: []string{\"*\"}, v: []string{\"123/okay/yes\"}},\n\t}\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, mGET, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[mGET]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeMoar(t *testing.T) {\n\thStub := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub7 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub8 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub9 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub10 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub11 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub12 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub13 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub14 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub15 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub16 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\t// TODO: panic if we see {id}{x} because we're missing a delimiter, its not possible.\n\t// also {:id}* is not possible.\n\n\ttr := &node{}\n\n\ttr.InsertRoute(mGET, \"/articlefun\", hStub5)\n\ttr.InsertRoute(mGET, \"/articles/{id}\", hStub)\n\ttr.InsertRoute(mDELETE, \"/articles/{slug}\", hStub8)\n\ttr.InsertRoute(mGET, \"/articles/search\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id}:delete\", hStub8)\n\ttr.InsertRoute(mGET, \"/articles/{iidd}!sup\", hStub4)\n\ttr.InsertRoute(mGET, \"/articles/{id}:{op}\", hStub3)\n\ttr.InsertRoute(mGET, \"/articles/{id}:{op}\", hStub2)                              // this route sets a new handler for the above route\n\ttr.InsertRoute(mGET, \"/articles/{slug:^[a-z]+}/posts\", hStub)                    // up to tail '/' will only match if contents match the rex\n\ttr.InsertRoute(mGET, \"/articles/{id}/posts/{pid}\", hStub6)                       // /articles/123/posts/1\n\ttr.InsertRoute(mGET, \"/articles/{id}/posts/{month}/{day}/{year}/{slug}\", hStub7) // /articles/123/posts/09/04/1984/juice\n\ttr.InsertRoute(mGET, \"/articles/{id}.json\", hStub10)\n\ttr.InsertRoute(mGET, \"/articles/{id}/data.json\", hStub11)\n\ttr.InsertRoute(mGET, \"/articles/files/{file}.{ext}\", hStub12)\n\ttr.InsertRoute(mPUT, \"/articles/me\", hStub13)\n\n\t// TODO: make a separate test case for this one..\n\t// tr.InsertRoute(mGET, \"/articles/{id}/{id}\", hStub1)                              // panic expected, we're duplicating param keys\n\n\ttr.InsertRoute(mGET, \"/pages/*ff\", hStub) // TODO: panic, allow it..?\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub9)\n\n\ttr.InsertRoute(mGET, \"/users/{id}\", hStub14)\n\ttr.InsertRoute(mGET, \"/users/{id}/settings/{key}\", hStub15)\n\ttr.InsertRoute(mGET, \"/users/{id}/settings/*\", hStub16)\n\n\ttests := []struct {\n\t\tm methodTyp    // input request http method\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{m: mGET, r: \"/articles/search\", h: hStub1, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articlefun\", h: hStub5, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articles/123\", h: hStub, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{m: mDELETE, r: \"/articles/123mm\", h: hStub8, k: []string{\"slug\"}, v: []string{\"123mm\"}},\n\t\t{m: mGET, r: \"/articles/789:delete\", h: hStub8, k: []string{\"id\"}, v: []string{\"789\"}},\n\t\t{m: mGET, r: \"/articles/789!sup\", h: hStub4, k: []string{\"iidd\"}, v: []string{\"789\"}},\n\t\t{m: mGET, r: \"/articles/123:sync\", h: hStub2, k: []string{\"id\", \"op\"}, v: []string{\"123\", \"sync\"}},\n\t\t{m: mGET, r: \"/articles/456/posts/1\", h: hStub6, k: []string{\"id\", \"pid\"}, v: []string{\"456\", \"1\"}},\n\t\t{m: mGET, r: \"/articles/456/posts/09/04/1984/juice\", h: hStub7, k: []string{\"id\", \"month\", \"day\", \"year\", \"slug\"}, v: []string{\"456\", \"09\", \"04\", \"1984\", \"juice\"}},\n\t\t{m: mGET, r: \"/articles/456.json\", h: hStub10, k: []string{\"id\"}, v: []string{\"456\"}},\n\t\t{m: mGET, r: \"/articles/456/data.json\", h: hStub11, k: []string{\"id\"}, v: []string{\"456\"}},\n\n\t\t{m: mGET, r: \"/articles/files/file.zip\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"file\", \"zip\"}},\n\t\t{m: mGET, r: \"/articles/files/photos.tar.gz\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"photos\", \"tar.gz\"}},\n\t\t{m: mGET, r: \"/articles/files/photos.tar.gz\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"photos\", \"tar.gz\"}},\n\n\t\t{m: mPUT, r: \"/articles/me\", h: hStub13, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articles/me\", h: hStub, k: []string{\"id\"}, v: []string{\"me\"}},\n\t\t{m: mGET, r: \"/pages\", h: nil, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/pages/\", h: hStub9, k: []string{\"*\"}, v: []string{\"\"}},\n\t\t{m: mGET, r: \"/pages/yes\", h: hStub9, k: []string{\"*\"}, v: []string{\"yes\"}},\n\n\t\t{m: mGET, r: \"/users/1\", h: hStub14, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{m: mGET, r: \"/users/\", h: nil, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/users/2/settings/password\", h: hStub15, k: []string{\"id\", \"key\"}, v: []string{\"2\", \"password\"}},\n\t\t{m: mGET, r: \"/users/2/settings/\", h: hStub16, k: []string{\"id\", \"*\"}, v: []string{\"2\", \"\"}},\n\t}\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, tt.m, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[tt.m]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeRegexp(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub7 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/articles/{rid:^[0-9]{5,6}}\", hStub7)\n\ttr.InsertRoute(mGET, \"/articles/{zid:^0[0-9]+}\", hStub3)\n\ttr.InsertRoute(mGET, \"/articles/{name:^@[a-z]+}/posts\", hStub4)\n\ttr.InsertRoute(mGET, \"/articles/{op:^[0-9]+}/run\", hStub5)\n\ttr.InsertRoute(mGET, \"/articles/{id:^[0-9]+}\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id:^[1-9]+}-{aux}\", hStub6)\n\ttr.InsertRoute(mGET, \"/articles/{slug}\", hStub2)\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\ttests := []struct {\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{r: \"/articles\", h: nil, k: []string{}, v: []string{}},\n\t\t{r: \"/articles/12345\", h: hStub7, k: []string{\"rid\"}, v: []string{\"12345\"}},\n\t\t{r: \"/articles/123\", h: hStub1, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{r: \"/articles/how-to-build-a-router\", h: hStub2, k: []string{\"slug\"}, v: []string{\"how-to-build-a-router\"}},\n\t\t{r: \"/articles/0456\", h: hStub3, k: []string{\"zid\"}, v: []string{\"0456\"}},\n\t\t{r: \"/articles/@pk/posts\", h: hStub4, k: []string{\"name\"}, v: []string{\"@pk\"}},\n\t\t{r: \"/articles/1/run\", h: hStub5, k: []string{\"op\"}, v: []string{\"1\"}},\n\t\t{r: \"/articles/1122\", h: hStub1, k: []string{\"id\"}, v: []string{\"1122\"}},\n\t\t{r: \"/articles/1122-yes\", h: hStub6, k: []string{\"id\", \"aux\"}, v: []string{\"1122\", \"yes\"}},\n\t}\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, mGET, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[mGET]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeRegexMatchWholeParam(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\trctx := NewRouteContext()\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/{id:[0-9]+}\", hStub1)\n\n\ttests := []struct {\n\t\turl             string\n\t\texpectedHandler http.Handler\n\t}{\n\t\t{url: \"/13\", expectedHandler: hStub1},\n\t\t{url: \"/a13\", expectedHandler: nil},\n\t\t{url: \"/13.jpg\", expectedHandler: nil},\n\t\t{url: \"/a13.jpg\", expectedHandler: nil},\n\t}\n\n\tfor _, tc := range tests {\n\t\t_, _, handler := tr.FindRoute(rctx, mGET, tc.url)\n\t\tif fmt.Sprintf(\"%v\", tc.expectedHandler) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"expecting handler:%v , got:%v\", tc.expectedHandler, handler)\n\t\t}\n\t}\n}\n\nfunc TestTreeFindPattern(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id}/*\", hStub2)\n\ttr.InsertRoute(mGET, \"/articles/{slug}/{uid}/*\", hStub3)\n\n\tif tr.findPattern(\"/pages\") != false {\n\t\tt.Errorf(\"find /pages failed\")\n\t}\n\tif tr.findPattern(\"/pages*\") != false {\n\t\tt.Errorf(\"find /pages* failed - should be nil\")\n\t}\n\tif tr.findPattern(\"/pages/*\") == false {\n\t\tt.Errorf(\"find /pages/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{id}/*\") == false {\n\t\tt.Errorf(\"find /articles/{id}/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{something}/*\") == false {\n\t\tt.Errorf(\"find /articles/{something}/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{slug}/{uid}/*\") == false {\n\t\tt.Errorf(\"find /articles/{slug}/{uid}/* failed\")\n\t}\n}\n\nfunc debugPrintTree(parent int, i int, n *node, label byte) bool {\n\tnumEdges := 0\n\tfor _, nds := range n.children {\n\t\tnumEdges += len(nds)\n\t}\n\n\t// if n.handlers != nil {\n\t// \tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v handler:%v pat:%s keys:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.handlers, n.pattern, n.paramKeys)\n\t// } else {\n\t// \tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v pat:%s keys:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.pattern, n.paramKeys)\n\t// }\n\tif n.endpoints != nil {\n\t\tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v handler:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.endpoints)\n\t} else {\n\t\tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf())\n\t}\n\tparent = i\n\tfor _, nds := range n.children {\n\t\tfor _, e := range nds {\n\t\t\ti++\n\t\t\tif debugPrintTree(parent, i, e, e.label) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc stringSliceEqual(a, b []string) bool {\n\tif len(a) != len(b) {\n\t\treturn false\n\t}\n\tfor i := range a {\n\t\tif b[i] != a[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc BenchmarkTreeGet(b *testing.B) {\n\th1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/\", h1)\n\ttr.InsertRoute(mGET, \"/ping\", h2)\n\ttr.InsertRoute(mGET, \"/pingall\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}/woop\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}/{opt}\", h2)\n\ttr.InsertRoute(mGET, \"/pinggggg\", h2)\n\ttr.InsertRoute(mGET, \"/hello\", h1)\n\n\tmctx := NewRouteContext()\n\n\tb.ReportAllocs()\n\tb.ResetTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tmctx.Reset()\n\t\ttr.FindRoute(mctx, mGET, \"/ping/123/456\")\n\t}\n}\n\nfunc TestWalker(t *testing.T) {\n\tr := bigMux()\n\n\t// Walk the muxBig router tree.\n\tif err := Walk(r, func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {\n\t\tt.Logf(\"%v %v\", method, route)\n\n\t\treturn nil\n\t}); err != nil {\n\t\tt.Error(err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/cors/README.md",
    "content": "# CORS net/http middleware\n\n(fork of github.com/rs/cors)\n\n## Usage\n\n```go\nfunc main() {\n  r := chi.NewRouter()\n\n  // Basic CORS\n  // for more ideas, see: https://developer.github.com/v3/#cross-origin-resource-sharing\n  cors := cors.New(cors.Options{\n    // AllowedOrigins: []string{\"https://foo.com\"}, // Use this to allow specific origin hosts\n    AllowedOrigins:   []string{\"*\"},\n    // AllowOriginFunc:  func(r *http.Request, origin string) bool { return true },\n    AllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"},\n    AllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n    ExposedHeaders:   []string{\"Link\"},\n    AllowCredentials: true,\n    MaxAge:           300, // Maximum value not ignored by any of major browsers\n  })\n  r.Use(cors.Handler)\n  \n  r.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte(\"welcome\"))\n  })\n  \n  http.ListenAndServe(\":3000\", r)\n}\n```\n\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/cors/_example/main.go",
    "content": "// cors example\n//\n// ie.\n//\n// Unsuccessful Preflight request:\n// ===============================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://no.com\" -H \"Access-Control-Request-Method: GET\" -X OPTIONS\n// HTTP/1.1 200 OK\n// Vary: Origin\n// Vary: Access-Control-Request-Method\n// Vary: Access-Control-Request-Headers\n// Date: Fri, 28 Jul 2017 17:55:47 GMT\n// Content-Length: 0\n// Content-Type: text/plain; charset=utf-8\n//\n//\n// Successful Preflight request:\n// =============================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://example.com\" -H \"Access-Control-Request-Method: GET\" -X OPTIONS\n// HTTP/1.1 200 OK\n// Access-Control-Allow-Credentials: true\n// Access-Control-Allow-Methods: GET\n// Access-Control-Allow-Origin: http://example.com\n// Access-Control-Max-Age: 300\n// Vary: Origin\n// Vary: Access-Control-Request-Method\n// Vary: Access-Control-Request-Headers\n// Date: Fri, 28 Jul 2017 17:56:44 GMT\n// Content-Length: 0\n// Content-Type: text/plain; charset=utf-8\n//\n//\n// Content request (after a successful preflight):\n// ===============================================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://example.com\"\n// HTTP/1.1 200 OK\n// Access-Control-Allow-Credentials: true\n// Access-Control-Allow-Origin: http://example.com\n// Access-Control-Expose-Headers: Link\n// Vary: Origin\n// Date: Fri, 28 Jul 2017 17:57:52 GMT\n// Content-Length: 7\n// Content-Type: text/plain; charset=utf-8\n//\n// welcome%\n//\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/cors\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\t// Basic CORS\n\t// for more ideas, see: https://developer.github.com/v3/#cross-origin-resource-sharing\n\tcors := cors.New(cors.Options{\n\t\tAllowOriginFunc:  AllowOriginFunc,\n\t\tAllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"},\n\t\tAllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n\t\tExposedHeaders:   []string{\"Link\"},\n\t\tAllowCredentials: true,\n\t\tMaxAge:           300, // Maximum value not ignored by any of major browsers\n\t})\n\tr.Use(cors.Handler)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\n\thttp.ListenAndServe(\":3000\", r)\n}\n\nfunc AllowOriginFunc(r *http.Request, origin string) bool {\n\tif origin == \"http://example.com\" {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/cors/cors.go",
    "content": "// cors package is net/http handler to handle CORS related requests\n// as defined by http://www.w3.org/TR/cors/\n//\n// You can configure it by passing an option struct to cors.New:\n//\n//     c := cors.New(cors.Options{\n//         AllowedOrigins: []string{\"foo.com\"},\n//         AllowedMethods: []string{\"GET\", \"POST\", \"DELETE\"},\n//         AllowCredentials: true,\n//     })\n//\n// Then insert the handler in the chain:\n//\n//     handler = c.Handler(handler)\n//\n// See Options documentation for more options.\n//\n// The resulting handler is a standard net/http handler.\npackage cors\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Options is a configuration container to setup the CORS middleware.\ntype Options struct {\n\t// AllowedOrigins is a list of origins a cross-domain request can be executed from.\n\t// If the special \"*\" value is present in the list, all origins will be allowed.\n\t// An origin may contain a wildcard (*) to replace 0 or more characters\n\t// (i.e.: http://*.domain.com). Usage of wildcards implies a small performance penality.\n\t// Only one wildcard can be used per origin.\n\t// Default value is [\"*\"]\n\tAllowedOrigins []string\n\n\t// AllowOriginFunc is a custom function to validate the origin. It take the origin\n\t// as argument and returns true if allowed or false otherwise. If this option is\n\t// set, the content of AllowedOrigins is ignored.\n\tAllowOriginFunc func(r *http.Request, origin string) bool\n\n\t// AllowedMethods is a list of methods the client is allowed to use with\n\t// cross-domain requests. Default value is simple methods (GET and POST)\n\tAllowedMethods []string\n\n\t// AllowedHeaders is list of non simple headers the client is allowed to use with\n\t// cross-domain requests.\n\t// If the special \"*\" value is present in the list, all headers will be allowed.\n\t// Default value is [] but \"Origin\" is always appended to the list.\n\tAllowedHeaders []string\n\n\t// ExposedHeaders indicates which headers are safe to expose to the API of a CORS\n\t// API specification\n\tExposedHeaders []string\n\n\t// AllowCredentials indicates whether the request can include user credentials like\n\t// cookies, HTTP authentication or client side SSL certificates.\n\tAllowCredentials bool\n\n\t// MaxAge indicates how long (in seconds) the results of a preflight request\n\t// can be cached\n\tMaxAge int\n\n\t// OptionsPassthrough instructs preflight to let other potential next handlers to\n\t// process the OPTIONS method. Turn this on if your application handles OPTIONS.\n\tOptionsPassthrough bool\n\n\t// Debugging flag adds additional output to debug server side CORS issues\n\tDebug bool\n}\n\n// Cors http handler\ntype Cors struct {\n\t// Debug logger\n\tlog *log.Logger\n\n\t// Set to true when allowed origins contains a \"*\"\n\tallowedOriginsAll bool\n\n\t// Normalized list of plain allowed origins\n\tallowedOrigins []string\n\n\t// List of allowed origins containing wildcards\n\tallowedWOrigins []wildcard\n\n\t// Optional origin validator function\n\tallowOriginFunc func(r *http.Request, origin string) bool\n\n\t// Set to true when allowed headers contains a \"*\"\n\tallowedHeadersAll bool\n\n\t// Normalized list of allowed headers\n\tallowedHeaders []string\n\n\t// Normalized list of allowed methods\n\tallowedMethods []string\n\n\t// Normalized list of exposed headers\n\texposedHeaders    []string\n\tallowCredentials  bool\n\tmaxAge            int\n\toptionPassthrough bool\n}\n\n// New creates a new Cors handler with the provided options.\nfunc New(options Options) *Cors {\n\tc := &Cors{\n\t\texposedHeaders:    convert(options.ExposedHeaders, http.CanonicalHeaderKey),\n\t\tallowOriginFunc:   options.AllowOriginFunc,\n\t\tallowCredentials:  options.AllowCredentials,\n\t\tmaxAge:            options.MaxAge,\n\t\toptionPassthrough: options.OptionsPassthrough,\n\t}\n\tif options.Debug {\n\t\tc.log = log.New(os.Stdout, \"[cors] \", log.LstdFlags)\n\t}\n\n\t// Normalize options\n\t// Note: for origins and methods matching, the spec requires a case-sensitive matching.\n\t// As it may error prone, we chose to ignore the spec here.\n\n\t// Allowed Origins\n\tif len(options.AllowedOrigins) == 0 {\n\t\t// Default is all origins\n\t\tc.allowedOriginsAll = true\n\t} else {\n\t\tc.allowedOrigins = []string{}\n\t\tc.allowedWOrigins = []wildcard{}\n\t\tfor _, origin := range options.AllowedOrigins {\n\t\t\t// Normalize\n\t\t\torigin = strings.ToLower(origin)\n\t\t\tif origin == \"*\" {\n\t\t\t\t// If \"*\" is present in the list, turn the whole list into a match all\n\t\t\t\tc.allowedOriginsAll = true\n\t\t\t\tc.allowedOrigins = nil\n\t\t\t\tc.allowedWOrigins = nil\n\t\t\t\tbreak\n\t\t\t} else if i := strings.IndexByte(origin, '*'); i >= 0 {\n\t\t\t\t// Split the origin in two: start and end string without the *\n\t\t\t\tw := wildcard{origin[0:i], origin[i+1 : len(origin)]}\n\t\t\t\tc.allowedWOrigins = append(c.allowedWOrigins, w)\n\t\t\t} else {\n\t\t\t\tc.allowedOrigins = append(c.allowedOrigins, origin)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allowed Headers\n\tif len(options.AllowedHeaders) == 0 {\n\t\t// Use sensible defaults\n\t\tc.allowedHeaders = []string{\"Origin\", \"Accept\", \"Content-Type\"}\n\t} else {\n\t\t// Origin is always appended as some browsers will always request for this header at preflight\n\t\tc.allowedHeaders = convert(append(options.AllowedHeaders, \"Origin\"), http.CanonicalHeaderKey)\n\t\tfor _, h := range options.AllowedHeaders {\n\t\t\tif h == \"*\" {\n\t\t\t\tc.allowedHeadersAll = true\n\t\t\t\tc.allowedHeaders = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allowed Methods\n\tif len(options.AllowedMethods) == 0 {\n\t\t// Default is spec's \"simple\" methods\n\t\tc.allowedMethods = []string{\"GET\", \"POST\"}\n\t} else {\n\t\tc.allowedMethods = convert(options.AllowedMethods, strings.ToUpper)\n\t}\n\n\treturn c\n}\n\n// Default creates a new Cors handler with default options\nfunc Default() *Cors {\n\treturn New(Options{})\n}\n\n// Handler apply the CORS specification on the request, and add relevant CORS headers\n// as necessary.\nfunc (c *Cors) Handler(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif r.Method == \"OPTIONS\" {\n\t\t\tc.logf(\"Handler: Preflight request\")\n\t\t\tc.handlePreflight(w, r)\n\t\t\t// Preflight requests are standalone and should stop the chain as some other\n\t\t\t// middleware may not handle OPTIONS requests correctly. One typical example\n\t\t\t// is authentication middleware ; OPTIONS requests won't carry authentication\n\t\t\t// headers (see #1)\n\t\t\tif c.optionPassthrough {\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t}\n\t\t} else {\n\t\t\tc.logf(\"Handler: Actual request\")\n\t\t\tc.handleActualRequest(w, r)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t})\n}\n\n// handlePreflight handles pre-flight CORS requests\nfunc (c *Cors) handlePreflight(w http.ResponseWriter, r *http.Request) {\n\theaders := w.Header()\n\torigin := r.Header.Get(\"Origin\")\n\n\tif r.Method != \"OPTIONS\" {\n\t\tc.logf(\"Preflight aborted: %s!=OPTIONS\", r.Method)\n\t\treturn\n\t}\n\t// Always set Vary headers\n\t// see https://github.com/rs/cors/issues/10,\n\t//     https://github.com/rs/cors/commit/dbdca4d95feaa7511a46e6f1efb3b3aa505bc43f#commitcomment-12352001\n\theaders.Add(\"Vary\", \"Origin\")\n\theaders.Add(\"Vary\", \"Access-Control-Request-Method\")\n\theaders.Add(\"Vary\", \"Access-Control-Request-Headers\")\n\n\tif origin == \"\" {\n\t\tc.logf(\"Preflight aborted: empty origin\")\n\t\treturn\n\t}\n\tif !c.isOriginAllowed(r, origin) {\n\t\tc.logf(\"Preflight aborted: origin '%s' not allowed\", origin)\n\t\treturn\n\t}\n\n\treqMethod := r.Header.Get(\"Access-Control-Request-Method\")\n\tif !c.isMethodAllowed(reqMethod) {\n\t\tc.logf(\"Preflight aborted: method '%s' not allowed\", reqMethod)\n\t\treturn\n\t}\n\treqHeaders := parseHeaderList(r.Header.Get(\"Access-Control-Request-Headers\"))\n\tif !c.areHeadersAllowed(reqHeaders) {\n\t\tc.logf(\"Preflight aborted: headers '%v' not allowed\", reqHeaders)\n\t\treturn\n\t}\n\theaders.Set(\"Access-Control-Allow-Origin\", origin)\n\t// Spec says: Since the list of methods can be unbounded, simply returning the method indicated\n\t// by Access-Control-Request-Method (if supported) can be enough\n\theaders.Set(\"Access-Control-Allow-Methods\", strings.ToUpper(reqMethod))\n\tif len(reqHeaders) > 0 {\n\n\t\t// Spec says: Since the list of headers can be unbounded, simply returning supported headers\n\t\t// from Access-Control-Request-Headers can be enough\n\t\theaders.Set(\"Access-Control-Allow-Headers\", strings.Join(reqHeaders, \", \"))\n\t}\n\tif c.allowCredentials {\n\t\theaders.Set(\"Access-Control-Allow-Credentials\", \"true\")\n\t}\n\tif c.maxAge > 0 {\n\t\theaders.Set(\"Access-Control-Max-Age\", strconv.Itoa(c.maxAge))\n\t}\n\tc.logf(\"Preflight response headers: %v\", headers)\n}\n\n// handleActualRequest handles simple cross-origin requests, actual request or redirects\nfunc (c *Cors) handleActualRequest(w http.ResponseWriter, r *http.Request) {\n\theaders := w.Header()\n\torigin := r.Header.Get(\"Origin\")\n\n\tif r.Method == \"OPTIONS\" {\n\t\tc.logf(\"Actual request no headers added: method == %s\", r.Method)\n\t\treturn\n\t}\n\t// Always set Vary, see https://github.com/rs/cors/issues/10\n\theaders.Add(\"Vary\", \"Origin\")\n\tif origin == \"\" {\n\t\tc.logf(\"Actual request no headers added: missing origin\")\n\t\treturn\n\t}\n\tif !c.isOriginAllowed(r, origin) {\n\t\tc.logf(\"Actual request no headers added: origin '%s' not allowed\", origin)\n\t\treturn\n\t}\n\n\t// Note that spec does define a way to specifically disallow a simple method like GET or\n\t// POST. Access-Control-Allow-Methods is only used for pre-flight requests and the\n\t// spec doesn't instruct to check the allowed methods for simple cross-origin requests.\n\t// We think it's a nice feature to be able to have control on those methods though.\n\tif !c.isMethodAllowed(r.Method) {\n\t\tif c.log != nil {\n\t\t\tc.logf(\"Actual request no headers added: method '%s' not allowed\",\n\t\t\t\tr.Method)\n\t\t}\n\n\t\treturn\n\t}\n\theaders.Set(\"Access-Control-Allow-Origin\", origin)\n\tif len(c.exposedHeaders) > 0 {\n\t\theaders.Set(\"Access-Control-Expose-Headers\", strings.Join(c.exposedHeaders, \", \"))\n\t}\n\tif c.allowCredentials {\n\t\theaders.Set(\"Access-Control-Allow-Credentials\", \"true\")\n\t}\n\tc.logf(\"Actual response added headers: %v\", headers)\n}\n\n// convenience method. checks if debugging is turned on before printing\nfunc (c *Cors) logf(format string, a ...interface{}) {\n\tif c.log != nil {\n\t\tc.log.Printf(format, a...)\n\t}\n}\n\n// isOriginAllowed checks if a given origin is allowed to perform cross-domain requests\n// on the endpoint\nfunc (c *Cors) isOriginAllowed(r *http.Request, origin string) bool {\n\tif c.allowOriginFunc != nil {\n\t\treturn c.allowOriginFunc(r, origin)\n\t}\n\tif c.allowedOriginsAll {\n\t\treturn true\n\t}\n\torigin = strings.ToLower(origin)\n\tfor _, o := range c.allowedOrigins {\n\t\tif o == origin {\n\t\t\treturn true\n\t\t}\n\t}\n\tfor _, w := range c.allowedWOrigins {\n\t\tif w.match(origin) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// isMethodAllowed checks if a given method can be used as part of a cross-domain request\n// on the endpoing\nfunc (c *Cors) isMethodAllowed(method string) bool {\n\tif len(c.allowedMethods) == 0 {\n\t\t// If no method allowed, always return false, even for preflight request\n\t\treturn false\n\t}\n\tmethod = strings.ToUpper(method)\n\tif method == \"OPTIONS\" {\n\t\t// Always allow preflight requests\n\t\treturn true\n\t}\n\tfor _, m := range c.allowedMethods {\n\t\tif m == method {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// areHeadersAllowed checks if a given list of headers are allowed to used within\n// a cross-domain request.\nfunc (c *Cors) areHeadersAllowed(requestedHeaders []string) bool {\n\tif c.allowedHeadersAll || len(requestedHeaders) == 0 {\n\t\treturn true\n\t}\n\tfor _, header := range requestedHeaders {\n\t\theader = http.CanonicalHeaderKey(header)\n\t\tfound := false\n\t\tfor _, h := range c.allowedHeaders {\n\t\t\tif h == header {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "api-foundations/chapter4b/vendor/github.com/go-chi/cors/utils.go",
    "content": "package cors\n\nimport \"strings\"\n\nconst toLower = 'a' - 'A'\n\ntype converter func(string) string\n\ntype wildcard struct {\n\tprefix string\n\tsuffix string\n}\n\nfunc (w wildcard) match(s string) bool {\n\treturn len(s) >= len(w.prefix+w.suffix) && strings.HasPrefix(s, w.prefix) && strings.HasSuffix(s, w.suffix)\n}\n\n// convert converts a list of string using the passed converter function\nfunc convert(s []string, c converter) []string {\n\tout := []string{}\n\tfor _, i := range s {\n\t\tout = append(out, c(i))\n\t}\n\treturn out\n}\n\n// parseHeaderList tokenize + normalize a string containing a list of headers\nfunc parseHeaderList(headerList string) []string {\n\tl := len(headerList)\n\th := make([]byte, 0, l)\n\tupper := true\n\t// Estimate the number headers in order to allocate the right splice size\n\tt := 0\n\tfor i := 0; i < l; i++ {\n\t\tif headerList[i] == ',' {\n\t\t\tt++\n\t\t}\n\t}\n\theaders := make([]string, 0, t)\n\tfor i := 0; i < l; i++ {\n\t\tb := headerList[i]\n\t\tif b >= 'a' && b <= 'z' {\n\t\t\tif upper {\n\t\t\t\th = append(h, b-toLower)\n\t\t\t} else {\n\t\t\t\th = append(h, b)\n\t\t\t}\n\t\t} else if b >= 'A' && b <= 'Z' {\n\t\t\tif !upper {\n\t\t\t\th = append(h, b+toLower)\n\t\t\t} else {\n\t\t\t\th = append(h, b)\n\t\t\t}\n\t\t} else if b == '-' || (b >= '0' && b <= '9') {\n\t\t\th = append(h, b)\n\t\t}\n\n\t\tif b == ' ' || b == ',' || i == l-1 {\n\t\t\tif len(h) > 0 {\n\t\t\t\t// Flush the found header\n\t\t\t\theaders = append(headers, string(h))\n\t\t\t\th = h[:0]\n\t\t\t\tupper = true\n\t\t\t}\n\t\t} else {\n\t\t\tupper = b == '-'\n\t\t}\n\t}\n\treturn headers\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/Gopkg.toml",
    "content": "# Gopkg.toml example\n#\n# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md\n# for detailed Gopkg.toml documentation.\n#\n# required = [\"github.com/user/thing/cmd/thing\"]\n# ignored = [\"github.com/user/project/pkgX\", \"bitbucket.org/user/project/pkgA/pkgY\"]\n#\n# [[constraint]]\n#   name = \"github.com/user/project\"\n#   version = \"1.0.0\"\n#\n# [[constraint]]\n#   name = \"github.com/user/project2\"\n#   branch = \"dev\"\n#   source = \"github.com/myfork/project2\"\n#\n# [[override]]\n#  name = \"github.com/x/y\"\n#  version = \"2.4.0\"\n\n\n[[constraint]]\n  name = \"github.com/go-chi/chi\"\n  version = \"3.3.2\"\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/jwt.go",
    "content": "package main\n\nimport (\n\t\"log\"\n\t\"time\"\n\n\t\"net/http\"\n\n\t\"github.com/go-chi/jwtauth\"\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/titpetric/factory/resputil\"\n)\n\ntype JWT struct {\n\ttokenClaim string\n\ttokenAuth  *jwtauth.JWTAuth\n}\n\nfunc (JWT) new() *JWT {\n\tjwt := &JWT{\n\t\ttokenClaim: \"user_id\",\n\t\ttokenAuth:  jwtauth.New(\"HS256\", []byte(\"K8UeMDPyb9AwFkzS\"), nil),\n\t}\n\tlog.Println(\"DEBUG JWT:\", jwt.Encode(\"1\"))\n\treturn jwt\n}\n\nfunc (jwt *JWT) Encode(id string) string {\n\tclaims := jwtauth.Claims{}.\n\t\tSet(jwt.tokenClaim, id).\n\t\tSetExpiryIn(30 * time.Second).\n\t\tSetIssuedNow()\n\t_, tokenString, _ := jwt.tokenAuth.Encode(claims)\n\treturn tokenString\n}\n\nfunc (jwt *JWT) Verifier() func(http.Handler) http.Handler {\n\treturn jwtauth.Verifier(jwt.tokenAuth)\n}\n\nfunc (jwt *JWT) Decode(r *http.Request) string {\n\tval, _ := jwt.Authenticate(r)\n\treturn val\n}\n\nfunc (jwt *JWT) Authenticate(r *http.Request) (string, error) {\n\ttoken, claims, err := jwtauth.FromContext(r.Context())\n\tif err != nil || token == nil {\n\t\treturn \"\", errors.Wrap(err, \"Empty or invalid JWT\")\n\t}\n\tif !token.Valid {\n\t\treturn \"\", errors.New(\"Invalid JWT\")\n\t}\n\treturn claims[jwt.tokenClaim].(string), nil\n}\n\nfunc (jwt *JWT) Authenticator() func(http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t_, err := jwt.Authenticate(r)\n\t\t\tif err != nil {\n\t\t\t\tresputil.JSON(w, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/cors\"\n\t\"github.com/pkg/errors\"\n\n\t\"github.com/titpetric/factory/resputil\"\n)\n\nfunc requestTime(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintf(w, \"The current time is: %s\\n\", time.Now())\n}\n\nfunc requestSay(w http.ResponseWriter, r *http.Request) {\n\tval := chi.URLParam(r, \"name\")\n\tif val != \"\" {\n\t\tfmt.Fprintf(w, \"Hello %s!\\n\", val)\n\t} else {\n\t\tfmt.Fprintf(w, \"Hello ... you.\\n\")\n\t}\n}\n\nfunc main() {\n\tfmt.Println(\"Starting server on port :3000\")\n\n\tcors := cors.New(cors.Options{\n\t\tAllowedOrigins:   []string{\"*\"},\n\t\tAllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"},\n\t\tAllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n\t\tAllowCredentials: true,\n\t\tMaxAge:           300, // Maximum value not ignored by any of major browsers\n\t})\n\tlogin := JWT{}.new()\n\n\tmux := chi.NewRouter()\n\tmux.Use(cors.Handler)\n\tmux.Use(middleware.Logger)\n\tmux.Use(login.Verifier())\n\n\t// Protected API endpoints\n\tmux.Group(func(mux chi.Router) {\n\t\t// Error out on invalid/empty JWT here\n\t\tmux.Use(login.Authenticator())\n\t\t{\n\t\t\tmux.Get(\"/time\", requestTime)\n\t\t\tmux.Route(\"/say\", func(mux chi.Router) {\n\t\t\t\tmux.Get(\"/{name}\", requestSay)\n\t\t\t\tmux.Get(\"/\", requestSay)\n\t\t\t})\n\t\t}\n\t})\n\n\t// Public API endpoints\n\tmux.Group(func(mux chi.Router) {\n\t\t// Print info about claim\n\t\tmux.Get(\"/info\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\towner := login.Decode(r)\n\t\t\tresputil.JSON(w, owner, errors.New(\"Not logged in\"))\n\t\t})\n\t})\n\n\terr := http.ListenAndServe(\":3000\", mux)\n\tif err != nil {\n\t\tfmt.Println(\"ListenAndServe:\", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/run.sh",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n# dep ensure -update -v\ngo run *.go\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/.gitignore",
    "content": ".DS_Store\nbin\n\n\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/.travis.yml",
    "content": "language: go\n\nscript:\n    - go vet ./...\n    - go test -v ./...\n\ngo:\n  - 1.3\n  - 1.4\n  - 1.5\n  - 1.6\n  - 1.7\n  - tip\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/LICENSE",
    "content": "Copyright (c) 2012 Dave Grijalva\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\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md",
    "content": "## Migration Guide from v2 -> v3\n\nVersion 3 adds several new, frequently requested features.  To do so, it introduces a few breaking changes.  We've worked to keep these as minimal as possible.  This guide explains the breaking changes and how you can quickly update your code.\n\n### `Token.Claims` is now an interface type\n\nThe most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`.  We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`.\n\n`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior.  It is the default claims type when using `Parse`.  The usage is unchanged except you must type cast the claims property.\n\nThe old example for parsing a token looked like this..\n\n```go\n\tif token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil {\n\t\tfmt.Printf(\"Token for user %v expires %v\", token.Claims[\"user\"], token.Claims[\"exp\"])\n\t}\n```\n\nis now directly mapped to...\n\n```go\n\tif token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil {\n\t\tclaims := token.Claims.(jwt.MapClaims)\n\t\tfmt.Printf(\"Token for user %v expires %v\", claims[\"user\"], claims[\"exp\"])\n\t}\n```\n\n`StandardClaims` is designed to be embedded in your custom type.  You can supply a custom claims type with the new `ParseWithClaims` function.  Here's an example of using a custom claims type.\n\n```go\n\ttype MyCustomClaims struct {\n\t\tUser string\n\t\t*StandardClaims\n\t}\n\t\n\tif token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil {\n\t\tclaims := token.Claims.(*MyCustomClaims)\n\t\tfmt.Printf(\"Token for user %v expires %v\", claims.User, claims.StandardClaims.ExpiresAt)\n\t}\n```\n\n### `ParseFromRequest` has been moved\n\nTo keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`.  The method signatues have also been augmented to receive a new argument: `Extractor`.\n\n`Extractors` do the work of picking the token string out of a request.  The interface is simple and composable.\n\nThis simple parsing example:\n\n```go\n\tif token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil {\n\t\tfmt.Printf(\"Token for user %v expires %v\", token.Claims[\"user\"], token.Claims[\"exp\"])\n\t}\n```\n\nis directly mapped to:\n\n```go\n\tif token, err := request.ParseFromRequest(req, request.OAuth2Extractor, keyLookupFunc); err == nil {\n\t\tclaims := token.Claims.(jwt.MapClaims)\n\t\tfmt.Printf(\"Token for user %v expires %v\", claims[\"user\"], claims[\"exp\"])\n\t}\n```\n\nThere are several concrete `Extractor` types provided for your convenience:\n\n* `HeaderExtractor` will search a list of headers until one contains content.\n* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content.\n* `MultiExtractor` will try a list of `Extractors` in order until one returns content.\n* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token.\n* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument\n* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed.  A simple example is stripping the `Bearer ` text from a header\n\n\n### RSA signing methods no longer accept `[]byte` keys\n\nDue to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse.\n\nTo replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`.  These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types.\n\n```go \n\tfunc keyLookupFunc(*Token) (interface{}, error) {\n\t\t// Don't forget to validate the alg is what you expect:\n\t\tif _, ok := token.Method.(*jwt.SigningMethodRSA); !ok {\n\t\t\treturn nil, fmt.Errorf(\"Unexpected signing method: %v\", token.Header[\"alg\"])\n\t\t}\n\t\t\n\t\t// Look up key \n\t\tkey, err := lookupPublicKey(token.Header[\"kid\"])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t\n\t\t// Unpack key from PEM encoded PKCS8\n\t\treturn jwt.ParseRSAPublicKeyFromPEM(key)\n\t}\n```\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/README.md",
    "content": "# jwt-go\n\n[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go)\n[![GoDoc](https://godoc.org/github.com/dgrijalva/jwt-go?status.svg)](https://godoc.org/github.com/dgrijalva/jwt-go)\n\nA [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html)\n\n**NEW VERSION COMING:** There have been a lot of improvements suggested since the version 3.0.0 released in 2016. I'm working now on cutting two different releases: 3.2.0 will contain any non-breaking changes or enhancements. 4.0.0 will follow shortly which will include breaking changes. See the 4.0.0 milestone to get an idea of what's coming. If you have other ideas, or would like to participate in 4.0.0, now's the time. If you depend on this library and don't want to be interrupted, I recommend you use your dependency mangement tool to pin to version 3. \n\n**SECURITY NOTICE:** Some older versions of Go have a security issue in the cryotp/elliptic. Recommendation is to upgrade to at least 1.8.3. See issue #216 for more detail.\n\n**SECURITY NOTICE:** It's important that you [validate the `alg` presented is what you expect](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). This library attempts to make it easy to do the right thing by requiring key types match the expected alg, but you should take the extra step to verify it in your usage.  See the examples provided.\n\n## What the heck is a JWT?\n\nJWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens.\n\nIn short, it's a signed JSON object that does something useful (for example, authentication).  It's commonly used for `Bearer` tokens in Oauth 2.  A token is made of three parts, separated by `.`'s.  The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded.  The last part is the signature, encoded the same way.\n\nThe first part is called the header.  It contains the necessary information for verifying the last part, the signature.  For example, which encryption method was used for signing and what key was used.\n\nThe part in the middle is the interesting bit.  It's called the Claims and contains the actual stuff you care about.  Refer to [the RFC](http://self-issued.info/docs/draft-jones-json-web-token.html) for information about reserved keys and the proper way to add your own.\n\n## What's in the box?\n\nThis library supports the parsing and verification as well as the generation and signing of JWTs.  Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own.\n\n## Examples\n\nSee [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage:\n\n* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-Parse--Hmac)\n* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac)\n* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples)\n\n## Extensions\n\nThis library publishes all the necessary components for adding your own signing methods.  Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`.  \n\nHere's an example of an extension that integrates with the Google App Engine signing tools: https://github.com/someone1/gcp-jwt-go\n\n## Compliance\n\nThis library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences:\n\n* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key.\n\n## Project Status & Versioning\n\nThis library is considered production ready.  Feedback and feature requests are appreciated.  The API should be considered stable.  There should be very few backwards-incompatible changes outside of major version updates (and only with good reason).\n\nThis project uses [Semantic Versioning 2.0.0](http://semver.org).  Accepted pull requests will land on `master`.  Periodically, versions will be tagged from `master`.  You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases).\n\nWhile we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users.  You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v3`.  It will do the right thing WRT semantic versioning.\n\n**BREAKING CHANGES:*** \n* Version 3.0.0 includes _a lot_ of changes from the 2.x line, including a few that break the API.  We've tried to break as few things as possible, so there should just be a few type signature changes.  A full list of breaking changes is available in `VERSION_HISTORY.md`.  See `MIGRATION_GUIDE.md` for more information on updating your code.\n\n## Usage Tips\n\n### Signing vs Encryption\n\nA token is simply a JSON object that is signed by its author. this tells you exactly two things about the data:\n\n* The author of the token was in the possession of the signing secret\n* The data has not been modified since it was signed\n\nIt's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library.\n\n### Choosing a Signing Method\n\nThere are several signing methods available, and you should probably take the time to learn about the various options before choosing one.  The principal design decision is most likely going to be symmetric vs asymmetric.\n\nSymmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation.\n\nAsymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification.\n\n### Signing Methods and Key Types\n\nEach signing method expects a different object type for its signing keys. See the package documentation for details. Here are the most common ones:\n\n* The [HMAC signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodHMAC) (`HS256`,`HS384`,`HS512`) expect `[]byte` values for signing and validation\n* The [RSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodRSA) (`RS256`,`RS384`,`RS512`) expect `*rsa.PrivateKey` for signing and `*rsa.PublicKey` for validation\n* The [ECDSA signing method](https://godoc.org/github.com/dgrijalva/jwt-go#SigningMethodECDSA) (`ES256`,`ES384`,`ES512`) expect `*ecdsa.PrivateKey` for signing and `*ecdsa.PublicKey` for validation\n\n### JWT and OAuth\n\nIt's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication.\n\nWithout going too far down the rabbit hole, here's a description of the interaction of these technologies:\n\n* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth.\n* OAuth defines several options for passing around authentication data. One popular method is called a \"bearer token\". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token.\n* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL.\n\n## More\n\nDocumentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go).\n\nThe command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in the documentation.\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md",
    "content": "## `jwt-go` Version History\n\n#### 3.2.0\n\n* Added method `ParseUnverified` to allow users to split up the tasks of parsing and validation\n* HMAC signing method returns `ErrInvalidKeyType` instead of `ErrInvalidKey` where appropriate\n* Added options to `request.ParseFromRequest`, which allows for an arbitrary list of modifiers to parsing behavior. Initial set include `WithClaims` and `WithParser`. Existing usage of this function will continue to work as before.\n* Deprecated `ParseFromRequestWithClaims` to simplify API in the future.\n\n#### 3.1.0\n\n* Improvements to `jwt` command line tool\n* Added `SkipClaimsValidation` option to `Parser`\n* Documentation updates\n\n#### 3.0.0\n\n* **Compatibility Breaking Changes**: See MIGRATION_GUIDE.md for tips on updating your code\n\t* Dropped support for `[]byte` keys when using RSA signing methods.  This convenience feature could contribute to security vulnerabilities involving mismatched key types with signing methods.\n\t* `ParseFromRequest` has been moved to `request` subpackage and usage has changed\n\t* The `Claims` property on `Token` is now type `Claims` instead of `map[string]interface{}`.  The default value is type `MapClaims`, which is an alias to `map[string]interface{}`.  This makes it possible to use a custom type when decoding claims.\n* Other Additions and Changes\n\t* Added `Claims` interface type to allow users to decode the claims into a custom type\n\t* Added `ParseWithClaims`, which takes a third argument of type `Claims`.  Use this function instead of `Parse` if you have a custom type you'd like to decode into.\n\t* Dramatically improved the functionality and flexibility of `ParseFromRequest`, which is now in the `request` subpackage\n\t* Added `ParseFromRequestWithClaims` which is the `FromRequest` equivalent of `ParseWithClaims`\n\t* Added new interface type `Extractor`, which is used for extracting JWT strings from http requests.  Used with `ParseFromRequest` and `ParseFromRequestWithClaims`.\n\t* Added several new, more specific, validation errors to error type bitmask\n\t* Moved examples from README to executable example files\n\t* Signing method registry is now thread safe\n\t* Added new property to `ValidationError`, which contains the raw error returned by calls made by parse/verify (such as those returned by keyfunc or json parser)\n\n#### 2.7.0\n\nThis will likely be the last backwards compatible release before 3.0.0, excluding essential bug fixes.\n\n* Added new option `-show` to the `jwt` command that will just output the decoded token without verifying\n* Error text for expired tokens includes how long it's been expired\n* Fixed incorrect error returned from `ParseRSAPublicKeyFromPEM`\n* Documentation updates\n\n#### 2.6.0\n\n* Exposed inner error within ValidationError\n* Fixed validation errors when using UseJSONNumber flag\n* Added several unit tests\n\n#### 2.5.0\n\n* Added support for signing method none.  You shouldn't use this.  The API tries to make this clear.\n* Updated/fixed some documentation\n* Added more helpful error message when trying to parse tokens that begin with `BEARER `\n\n#### 2.4.0\n\n* Added new type, Parser, to allow for configuration of various parsing parameters\n\t* You can now specify a list of valid signing methods.  Anything outside this set will be rejected.\n\t* You can now opt to use the `json.Number` type instead of `float64` when parsing token JSON\n* Added support for [Travis CI](https://travis-ci.org/dgrijalva/jwt-go)\n* Fixed some bugs with ECDSA parsing\n\n#### 2.3.0\n\n* Added support for ECDSA signing methods\n* Added support for RSA PSS signing methods (requires go v1.4)\n\n#### 2.2.0\n\n* Gracefully handle a `nil` `Keyfunc` being passed to `Parse`.  Result will now be the parsed token and an error, instead of a panic.\n\n#### 2.1.0\n\nBackwards compatible API change that was missed in 2.0.0.\n\n* The `SignedString` method on `Token` now takes `interface{}` instead of `[]byte`\n\n#### 2.0.0\n\nThere were two major reasons for breaking backwards compatibility with this update.  The first was a refactor required to expand the width of the RSA and HMAC-SHA signing implementations.  There will likely be no required code changes to support this change.\n\nThe second update, while unfortunately requiring a small change in integration, is required to open up this library to other signing methods.  Not all keys used for all signing methods have a single standard on-disk representation.  Requiring `[]byte` as the type for all keys proved too limiting.  Additionally, this implementation allows for pre-parsed tokens to be reused, which might matter in an application that parses a high volume of tokens with a small set of keys.  Backwards compatibilty has been maintained for passing `[]byte` to the RSA signing methods, but they will also accept `*rsa.PublicKey` and `*rsa.PrivateKey`.\n\nIt is likely the only integration change required here will be to change `func(t *jwt.Token) ([]byte, error)` to `func(t *jwt.Token) (interface{}, error)` when calling `Parse`.\n\n* **Compatibility Breaking Changes**\n\t* `SigningMethodHS256` is now `*SigningMethodHMAC` instead of `type struct`\n\t* `SigningMethodRS256` is now `*SigningMethodRSA` instead of `type struct`\n\t* `KeyFunc` now returns `interface{}` instead of `[]byte`\n\t* `SigningMethod.Sign` now takes `interface{}` instead of `[]byte` for the key\n\t* `SigningMethod.Verify` now takes `interface{}` instead of `[]byte` for the key\n* Renamed type `SigningMethodHS256` to `SigningMethodHMAC`.  Specific sizes are now just instances of this type.\n    * Added public package global `SigningMethodHS256`\n    * Added public package global `SigningMethodHS384`\n    * Added public package global `SigningMethodHS512`\n* Renamed type `SigningMethodRS256` to `SigningMethodRSA`.  Specific sizes are now just instances of this type.\n    * Added public package global `SigningMethodRS256`\n    * Added public package global `SigningMethodRS384`\n    * Added public package global `SigningMethodRS512`\n* Moved sample private key for HMAC tests from an inline value to a file on disk.  Value is unchanged.\n* Refactored the RSA implementation to be easier to read\n* Exposed helper methods `ParseRSAPrivateKeyFromPEM` and `ParseRSAPublicKeyFromPEM`\n\n#### 1.0.2\n\n* Fixed bug in parsing public keys from certificates\n* Added more tests around the parsing of keys for RS256\n* Code refactoring in RS256 implementation.  No functional changes\n\n#### 1.0.1\n\n* Fixed panic if RS256 signing method was passed an invalid key\n\n#### 1.0.0\n\n* First versioned release\n* API stabilized\n* Supports creating, signing, parsing, and validating JWT tokens\n* Supports RS256 and HS256 signing methods"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/claims.go",
    "content": "package jwt\n\nimport (\n\t\"crypto/subtle\"\n\t\"fmt\"\n\t\"time\"\n)\n\n// For a type to be a Claims object, it must just have a Valid method that determines\n// if the token is invalid for any supported reason\ntype Claims interface {\n\tValid() error\n}\n\n// Structured version of Claims Section, as referenced at\n// https://tools.ietf.org/html/rfc7519#section-4.1\n// See examples for how to use this with your own claim types\ntype StandardClaims struct {\n\tAudience  string `json:\"aud,omitempty\"`\n\tExpiresAt int64  `json:\"exp,omitempty\"`\n\tId        string `json:\"jti,omitempty\"`\n\tIssuedAt  int64  `json:\"iat,omitempty\"`\n\tIssuer    string `json:\"iss,omitempty\"`\n\tNotBefore int64  `json:\"nbf,omitempty\"`\n\tSubject   string `json:\"sub,omitempty\"`\n}\n\n// Validates time based claims \"exp, iat, nbf\".\n// There is no accounting for clock skew.\n// As well, if any of the above claims are not in the token, it will still\n// be considered a valid claim.\nfunc (c StandardClaims) Valid() error {\n\tvErr := new(ValidationError)\n\tnow := TimeFunc().Unix()\n\n\t// The claims below are optional, by default, so if they are set to the\n\t// default value in Go, let's not fail the verification for them.\n\tif c.VerifyExpiresAt(now, false) == false {\n\t\tdelta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0))\n\t\tvErr.Inner = fmt.Errorf(\"token is expired by %v\", delta)\n\t\tvErr.Errors |= ValidationErrorExpired\n\t}\n\n\tif c.VerifyIssuedAt(now, false) == false {\n\t\tvErr.Inner = fmt.Errorf(\"Token used before issued\")\n\t\tvErr.Errors |= ValidationErrorIssuedAt\n\t}\n\n\tif c.VerifyNotBefore(now, false) == false {\n\t\tvErr.Inner = fmt.Errorf(\"token is not valid yet\")\n\t\tvErr.Errors |= ValidationErrorNotValidYet\n\t}\n\n\tif vErr.valid() {\n\t\treturn nil\n\t}\n\n\treturn vErr\n}\n\n// Compares the aud claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (c *StandardClaims) VerifyAudience(cmp string, req bool) bool {\n\treturn verifyAud(c.Audience, cmp, req)\n}\n\n// Compares the exp claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool {\n\treturn verifyExp(c.ExpiresAt, cmp, req)\n}\n\n// Compares the iat claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool {\n\treturn verifyIat(c.IssuedAt, cmp, req)\n}\n\n// Compares the iss claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool {\n\treturn verifyIss(c.Issuer, cmp, req)\n}\n\n// Compares the nbf claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool {\n\treturn verifyNbf(c.NotBefore, cmp, req)\n}\n\n// ----- helpers\n\nfunc verifyAud(aud string, cmp string, required bool) bool {\n\tif aud == \"\" {\n\t\treturn !required\n\t}\n\tif subtle.ConstantTimeCompare([]byte(aud), []byte(cmp)) != 0 {\n\t\treturn true\n\t} else {\n\t\treturn false\n\t}\n}\n\nfunc verifyExp(exp int64, now int64, required bool) bool {\n\tif exp == 0 {\n\t\treturn !required\n\t}\n\treturn now <= exp\n}\n\nfunc verifyIat(iat int64, now int64, required bool) bool {\n\tif iat == 0 {\n\t\treturn !required\n\t}\n\treturn now >= iat\n}\n\nfunc verifyIss(iss string, cmp string, required bool) bool {\n\tif iss == \"\" {\n\t\treturn !required\n\t}\n\tif subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 {\n\t\treturn true\n\t} else {\n\t\treturn false\n\t}\n}\n\nfunc verifyNbf(nbf int64, now int64, required bool) bool {\n\tif nbf == 0 {\n\t\treturn !required\n\t}\n\treturn now >= nbf\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/README.md",
    "content": "`jwt` command-line tool\n=======================\n\nThis is a simple tool to sign, verify and show JSON Web Tokens from\nthe command line.\n\nThe following will create and sign a token, then verify it and output the original claims:\n\n     echo {\\\"foo\\\":\\\"bar\\\"} | ./jwt -key ../../test/sample_key -alg RS256 -sign - | ./jwt -key ../../test/sample_key.pub -alg RS256 -verify -\n\nTo simply display a token, use:\n\n    echo $JWT | ./jwt -show -\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/app.go",
    "content": "// A useful example app.  You can use this to debug your tokens on the command line.\n// This is also a great place to look at how you might use this library.\n//\n// Example usage:\n// The following will create and sign a token, then verify it and output the original claims.\n//     echo {\\\"foo\\\":\\\"bar\\\"} | bin/jwt -key test/sample_key -alg RS256 -sign - | bin/jwt -key test/sample_key.pub -verify -\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\n\tjwt \"github.com/dgrijalva/jwt-go\"\n)\n\nvar (\n\t// Options\n\tflagAlg     = flag.String(\"alg\", \"\", \"signing algorithm identifier\")\n\tflagKey     = flag.String(\"key\", \"\", \"path to key file or '-' to read from stdin\")\n\tflagCompact = flag.Bool(\"compact\", false, \"output compact JSON\")\n\tflagDebug   = flag.Bool(\"debug\", false, \"print out all kinds of debug data\")\n\tflagClaims  = make(ArgList)\n\tflagHead    = make(ArgList)\n\n\t// Modes - exactly one of these is required\n\tflagSign   = flag.String(\"sign\", \"\", \"path to claims object to sign, '-' to read from stdin, or '+' to use only -claim args\")\n\tflagVerify = flag.String(\"verify\", \"\", \"path to JWT token to verify or '-' to read from stdin\")\n\tflagShow   = flag.String(\"show\", \"\", \"path to JWT file or '-' to read from stdin\")\n)\n\nfunc main() {\n\t// Plug in Var flags\n\tflag.Var(flagClaims, \"claim\", \"add additional claims. may be used more than once\")\n\tflag.Var(flagHead, \"header\", \"add additional header params. may be used more than once\")\n\n\t// Usage message if you ask for -help or if you mess up inputs.\n\tflag.Usage = func() {\n\t\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\t\tfmt.Fprintf(os.Stderr, \"  One of the following flags is required: sign, verify\\n\")\n\t\tflag.PrintDefaults()\n\t}\n\n\t// Parse command line options\n\tflag.Parse()\n\n\t// Do the thing.  If something goes wrong, print error to stderr\n\t// and exit with a non-zero status code\n\tif err := start(); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Error: %v\\n\", err)\n\t\tos.Exit(1)\n\t}\n}\n\n// Figure out which thing to do and then do that\nfunc start() error {\n\tif *flagSign != \"\" {\n\t\treturn signToken()\n\t} else if *flagVerify != \"\" {\n\t\treturn verifyToken()\n\t} else if *flagShow != \"\" {\n\t\treturn showToken()\n\t} else {\n\t\tflag.Usage()\n\t\treturn fmt.Errorf(\"None of the required flags are present.  What do you want me to do?\")\n\t}\n}\n\n// Helper func:  Read input from specified file or stdin\nfunc loadData(p string) ([]byte, error) {\n\tif p == \"\" {\n\t\treturn nil, fmt.Errorf(\"No path specified\")\n\t}\n\n\tvar rdr io.Reader\n\tif p == \"-\" {\n\t\trdr = os.Stdin\n\t} else if p == \"+\" {\n\t\treturn []byte(\"{}\"), nil\n\t} else {\n\t\tif f, err := os.Open(p); err == nil {\n\t\t\trdr = f\n\t\t\tdefer f.Close()\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn ioutil.ReadAll(rdr)\n}\n\n// Print a json object in accordance with the prophecy (or the command line options)\nfunc printJSON(j interface{}) error {\n\tvar out []byte\n\tvar err error\n\n\tif *flagCompact == false {\n\t\tout, err = json.MarshalIndent(j, \"\", \"    \")\n\t} else {\n\t\tout, err = json.Marshal(j)\n\t}\n\n\tif err == nil {\n\t\tfmt.Println(string(out))\n\t}\n\n\treturn err\n}\n\n// Verify a token and output the claims.  This is a great example\n// of how to verify and view a token.\nfunc verifyToken() error {\n\t// get the token\n\ttokData, err := loadData(*flagVerify)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Couldn't read token: %v\", err)\n\t}\n\n\t// trim possible whitespace from token\n\ttokData = regexp.MustCompile(`\\s*$`).ReplaceAll(tokData, []byte{})\n\tif *flagDebug {\n\t\tfmt.Fprintf(os.Stderr, \"Token len: %v bytes\\n\", len(tokData))\n\t}\n\n\t// Parse the token.  Load the key from command line option\n\ttoken, err := jwt.Parse(string(tokData), func(t *jwt.Token) (interface{}, error) {\n\t\tdata, err := loadData(*flagKey)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isEs() {\n\t\t\treturn jwt.ParseECPublicKeyFromPEM(data)\n\t\t} else if isRs() {\n\t\t\treturn jwt.ParseRSAPublicKeyFromPEM(data)\n\t\t}\n\t\treturn data, nil\n\t})\n\n\t// Print some debug data\n\tif *flagDebug && token != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Header:\\n%v\\n\", token.Header)\n\t\tfmt.Fprintf(os.Stderr, \"Claims:\\n%v\\n\", token.Claims)\n\t}\n\n\t// Print an error if we can't parse for some reason\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Couldn't parse token: %v\", err)\n\t}\n\n\t// Is token invalid?\n\tif !token.Valid {\n\t\treturn fmt.Errorf(\"Token is invalid\")\n\t}\n\n\t// Print the token details\n\tif err := printJSON(token.Claims); err != nil {\n\t\treturn fmt.Errorf(\"Failed to output claims: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// Create, sign, and output a token.  This is a great, simple example of\n// how to use this library to create and sign a token.\nfunc signToken() error {\n\t// get the token data from command line arguments\n\ttokData, err := loadData(*flagSign)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Couldn't read token: %v\", err)\n\t} else if *flagDebug {\n\t\tfmt.Fprintf(os.Stderr, \"Token: %v bytes\", len(tokData))\n\t}\n\n\t// parse the JSON of the claims\n\tvar claims jwt.MapClaims\n\tif err := json.Unmarshal(tokData, &claims); err != nil {\n\t\treturn fmt.Errorf(\"Couldn't parse claims JSON: %v\", err)\n\t}\n\n\t// add command line claims\n\tif len(flagClaims) > 0 {\n\t\tfor k, v := range flagClaims {\n\t\t\tclaims[k] = v\n\t\t}\n\t}\n\n\t// get the key\n\tvar key interface{}\n\tkey, err = loadData(*flagKey)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Couldn't read key: %v\", err)\n\t}\n\n\t// get the signing alg\n\talg := jwt.GetSigningMethod(*flagAlg)\n\tif alg == nil {\n\t\treturn fmt.Errorf(\"Couldn't find signing method: %v\", *flagAlg)\n\t}\n\n\t// create a new token\n\ttoken := jwt.NewWithClaims(alg, claims)\n\n\t// add command line headers\n\tif len(flagHead) > 0 {\n\t\tfor k, v := range flagHead {\n\t\t\ttoken.Header[k] = v\n\t\t}\n\t}\n\n\tif isEs() {\n\t\tif k, ok := key.([]byte); !ok {\n\t\t\treturn fmt.Errorf(\"Couldn't convert key data to key\")\n\t\t} else {\n\t\t\tkey, err = jwt.ParseECPrivateKeyFromPEM(k)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else if isRs() {\n\t\tif k, ok := key.([]byte); !ok {\n\t\t\treturn fmt.Errorf(\"Couldn't convert key data to key\")\n\t\t} else {\n\t\t\tkey, err = jwt.ParseRSAPrivateKeyFromPEM(k)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif out, err := token.SignedString(key); err == nil {\n\t\tfmt.Println(out)\n\t} else {\n\t\treturn fmt.Errorf(\"Error signing token: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// showToken pretty-prints the token on the command line.\nfunc showToken() error {\n\t// get the token\n\ttokData, err := loadData(*flagShow)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Couldn't read token: %v\", err)\n\t}\n\n\t// trim possible whitespace from token\n\ttokData = regexp.MustCompile(`\\s*$`).ReplaceAll(tokData, []byte{})\n\tif *flagDebug {\n\t\tfmt.Fprintf(os.Stderr, \"Token len: %v bytes\\n\", len(tokData))\n\t}\n\n\ttoken, err := jwt.Parse(string(tokData), nil)\n\tif token == nil {\n\t\treturn fmt.Errorf(\"malformed token: %v\", err)\n\t}\n\n\t// Print the token details\n\tfmt.Println(\"Header:\")\n\tif err := printJSON(token.Header); err != nil {\n\t\treturn fmt.Errorf(\"Failed to output header: %v\", err)\n\t}\n\n\tfmt.Println(\"Claims:\")\n\tif err := printJSON(token.Claims); err != nil {\n\t\treturn fmt.Errorf(\"Failed to output claims: %v\", err)\n\t}\n\n\treturn nil\n}\n\nfunc isEs() bool {\n\treturn strings.HasPrefix(*flagAlg, \"ES\")\n}\n\nfunc isRs() bool {\n\treturn strings.HasPrefix(*flagAlg, \"RS\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/cmd/jwt/args.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype ArgList map[string]string\n\nfunc (l ArgList) String() string {\n\tdata, _ := json.Marshal(l)\n\treturn string(data)\n}\n\nfunc (l ArgList) Set(arg string) error {\n\tparts := strings.SplitN(arg, \"=\", 2)\n\tif len(parts) != 2 {\n\t\treturn fmt.Errorf(\"Invalid argument '%v'.  Must use format 'key=value'. %v\", arg, parts)\n\t}\n\tl[parts[0]] = parts[1]\n\treturn nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/doc.go",
    "content": "// Package jwt is a Go implementation of JSON Web Tokens: http://self-issued.info/docs/draft-jones-json-web-token.html\n//\n// See README.md for more info.\npackage jwt\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/ecdsa.go",
    "content": "package jwt\n\nimport (\n\t\"crypto\"\n\t\"crypto/ecdsa\"\n\t\"crypto/rand\"\n\t\"errors\"\n\t\"math/big\"\n)\n\nvar (\n\t// Sadly this is missing from crypto/ecdsa compared to crypto/rsa\n\tErrECDSAVerification = errors.New(\"crypto/ecdsa: verification error\")\n)\n\n// Implements the ECDSA family of signing methods signing methods\n// Expects *ecdsa.PrivateKey for signing and *ecdsa.PublicKey for verification\ntype SigningMethodECDSA struct {\n\tName      string\n\tHash      crypto.Hash\n\tKeySize   int\n\tCurveBits int\n}\n\n// Specific instances for EC256 and company\nvar (\n\tSigningMethodES256 *SigningMethodECDSA\n\tSigningMethodES384 *SigningMethodECDSA\n\tSigningMethodES512 *SigningMethodECDSA\n)\n\nfunc init() {\n\t// ES256\n\tSigningMethodES256 = &SigningMethodECDSA{\"ES256\", crypto.SHA256, 32, 256}\n\tRegisterSigningMethod(SigningMethodES256.Alg(), func() SigningMethod {\n\t\treturn SigningMethodES256\n\t})\n\n\t// ES384\n\tSigningMethodES384 = &SigningMethodECDSA{\"ES384\", crypto.SHA384, 48, 384}\n\tRegisterSigningMethod(SigningMethodES384.Alg(), func() SigningMethod {\n\t\treturn SigningMethodES384\n\t})\n\n\t// ES512\n\tSigningMethodES512 = &SigningMethodECDSA{\"ES512\", crypto.SHA512, 66, 521}\n\tRegisterSigningMethod(SigningMethodES512.Alg(), func() SigningMethod {\n\t\treturn SigningMethodES512\n\t})\n}\n\nfunc (m *SigningMethodECDSA) Alg() string {\n\treturn m.Name\n}\n\n// Implements the Verify method from SigningMethod\n// For this verify method, key must be an ecdsa.PublicKey struct\nfunc (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error {\n\tvar err error\n\n\t// Decode the signature\n\tvar sig []byte\n\tif sig, err = DecodeSegment(signature); err != nil {\n\t\treturn err\n\t}\n\n\t// Get the key\n\tvar ecdsaKey *ecdsa.PublicKey\n\tswitch k := key.(type) {\n\tcase *ecdsa.PublicKey:\n\t\tecdsaKey = k\n\tdefault:\n\t\treturn ErrInvalidKeyType\n\t}\n\n\tif len(sig) != 2*m.KeySize {\n\t\treturn ErrECDSAVerification\n\t}\n\n\tr := big.NewInt(0).SetBytes(sig[:m.KeySize])\n\ts := big.NewInt(0).SetBytes(sig[m.KeySize:])\n\n\t// Create hasher\n\tif !m.Hash.Available() {\n\t\treturn ErrHashUnavailable\n\t}\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\t// Verify the signature\n\tif verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true {\n\t\treturn nil\n\t} else {\n\t\treturn ErrECDSAVerification\n\t}\n}\n\n// Implements the Sign method from SigningMethod\n// For this signing method, key must be an ecdsa.PrivateKey struct\nfunc (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) {\n\t// Get the key\n\tvar ecdsaKey *ecdsa.PrivateKey\n\tswitch k := key.(type) {\n\tcase *ecdsa.PrivateKey:\n\t\tecdsaKey = k\n\tdefault:\n\t\treturn \"\", ErrInvalidKeyType\n\t}\n\n\t// Create the hasher\n\tif !m.Hash.Available() {\n\t\treturn \"\", ErrHashUnavailable\n\t}\n\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\t// Sign the string and return r, s\n\tif r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, hasher.Sum(nil)); err == nil {\n\t\tcurveBits := ecdsaKey.Curve.Params().BitSize\n\n\t\tif m.CurveBits != curveBits {\n\t\t\treturn \"\", ErrInvalidKey\n\t\t}\n\n\t\tkeyBytes := curveBits / 8\n\t\tif curveBits%8 > 0 {\n\t\t\tkeyBytes += 1\n\t\t}\n\n\t\t// We serialize the outpus (r and s) into big-endian byte arrays and pad\n\t\t// them with zeros on the left to make sure the sizes work out. Both arrays\n\t\t// must be keyBytes long, and the output must be 2*keyBytes long.\n\t\trBytes := r.Bytes()\n\t\trBytesPadded := make([]byte, keyBytes)\n\t\tcopy(rBytesPadded[keyBytes-len(rBytes):], rBytes)\n\n\t\tsBytes := s.Bytes()\n\t\tsBytesPadded := make([]byte, keyBytes)\n\t\tcopy(sBytesPadded[keyBytes-len(sBytes):], sBytes)\n\n\t\tout := append(rBytesPadded, sBytesPadded...)\n\n\t\treturn EncodeSegment(out), nil\n\t} else {\n\t\treturn \"\", err\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/ecdsa_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/dgrijalva/jwt-go\"\n)\n\nvar ecdsaTestData = []struct {\n\tname        string\n\tkeys        map[string]string\n\ttokenString string\n\talg         string\n\tclaims      map[string]interface{}\n\tvalid       bool\n}{\n\t{\n\t\t\"Basic ES256\",\n\t\tmap[string]string{\"private\": \"test/ec256-private.pem\", \"public\": \"test/ec256-public.pem\"},\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJmb28iOiJiYXIifQ.feG39E-bn8HXAKhzDZq7yEAPWYDhZlwTn3sePJnU9VrGMmwdXAIEyoOnrjreYlVM_Z4N13eK9-TmMTWyfKJtHQ\",\n\t\t\"ES256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic ES384\",\n\t\tmap[string]string{\"private\": \"test/ec384-private.pem\", \"public\": \"test/ec384-public.pem\"},\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzM4NCJ9.eyJmb28iOiJiYXIifQ.ngAfKMbJUh0WWubSIYe5GMsA-aHNKwFbJk_wq3lq23aPp8H2anb1rRILIzVR0gUf4a8WzDtrzmiikuPWyCS6CN4-PwdgTk-5nehC7JXqlaBZU05p3toM3nWCwm_LXcld\",\n\t\t\"ES384\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic ES512\",\n\t\tmap[string]string{\"private\": \"test/ec512-private.pem\", \"public\": \"test/ec512-public.pem\"},\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzUxMiJ9.eyJmb28iOiJiYXIifQ.AAU0TvGQOcdg2OvrwY73NHKgfk26UDekh9Prz-L_iWuTBIBqOFCWwwLsRiHB1JOddfKAls5do1W0jR_F30JpVd-6AJeTjGKA4C1A1H6gIKwRY0o_tFDIydZCl_lMBMeG5VNFAjO86-WCSKwc3hqaGkq1MugPRq_qrF9AVbuEB4JPLyL5\",\n\t\t\"ES512\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"basic ES256 invalid: foo => bar\",\n\t\tmap[string]string{\"private\": \"test/ec256-private.pem\", \"public\": \"test/ec256-public.pem\"},\n\t\t\"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.MEQCIHoSJnmGlPaVQDqacx_2XlXEhhqtWceVopjomc2PJLtdAiAUTeGPoNYxZw0z8mgOnnIcjoxRuNDVZvybRZF3wR1l8W\",\n\t\t\"ES256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\tfalse,\n\t},\n}\n\nfunc TestECDSAVerify(t *testing.T) {\n\tfor _, data := range ecdsaTestData {\n\t\tvar err error\n\n\t\tkey, _ := ioutil.ReadFile(data.keys[\"public\"])\n\n\t\tvar ecdsaKey *ecdsa.PublicKey\n\t\tif ecdsaKey, err = jwt.ParseECPublicKeyFromPEM(key); err != nil {\n\t\t\tt.Errorf(\"Unable to parse ECDSA public key: %v\", err)\n\t\t}\n\n\t\tparts := strings.Split(data.tokenString, \".\")\n\n\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\terr = method.Verify(strings.Join(parts[0:2], \".\"), parts[2], ecdsaKey)\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying key: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid key passed validation\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestECDSASign(t *testing.T) {\n\tfor _, data := range ecdsaTestData {\n\t\tvar err error\n\t\tkey, _ := ioutil.ReadFile(data.keys[\"private\"])\n\n\t\tvar ecdsaKey *ecdsa.PrivateKey\n\t\tif ecdsaKey, err = jwt.ParseECPrivateKeyFromPEM(key); err != nil {\n\t\t\tt.Errorf(\"Unable to parse ECDSA private key: %v\", err)\n\t\t}\n\n\t\tif data.valid {\n\t\t\tparts := strings.Split(data.tokenString, \".\")\n\t\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\t\tsig, err := method.Sign(strings.Join(parts[0:2], \".\"), ecdsaKey)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"[%v] Error signing token: %v\", data.name, err)\n\t\t\t}\n\t\t\tif sig == parts[2] {\n\t\t\t\tt.Errorf(\"[%v] Identical signatures\\nbefore:\\n%v\\nafter:\\n%v\", data.name, parts[2], sig)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go",
    "content": "package jwt\n\nimport (\n\t\"crypto/ecdsa\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"errors\"\n)\n\nvar (\n\tErrNotECPublicKey  = errors.New(\"Key is not a valid ECDSA public key\")\n\tErrNotECPrivateKey = errors.New(\"Key is not a valid ECDSA private key\")\n)\n\n// Parse PEM encoded Elliptic Curve Private Key Structure\nfunc ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) {\n\tvar err error\n\n\t// Parse PEM block\n\tvar block *pem.Block\n\tif block, _ = pem.Decode(key); block == nil {\n\t\treturn nil, ErrKeyMustBePEMEncoded\n\t}\n\n\t// Parse the key\n\tvar parsedKey interface{}\n\tif parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar pkey *ecdsa.PrivateKey\n\tvar ok bool\n\tif pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok {\n\t\treturn nil, ErrNotECPrivateKey\n\t}\n\n\treturn pkey, nil\n}\n\n// Parse PEM encoded PKCS1 or PKCS8 public key\nfunc ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) {\n\tvar err error\n\n\t// Parse PEM block\n\tvar block *pem.Block\n\tif block, _ = pem.Decode(key); block == nil {\n\t\treturn nil, ErrKeyMustBePEMEncoded\n\t}\n\n\t// Parse the key\n\tvar parsedKey interface{}\n\tif parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {\n\t\tif cert, err := x509.ParseCertificate(block.Bytes); err == nil {\n\t\t\tparsedKey = cert.PublicKey\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar pkey *ecdsa.PublicKey\n\tvar ok bool\n\tif pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok {\n\t\treturn nil, ErrNotECPublicKey\n\t}\n\n\treturn pkey, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/errors.go",
    "content": "package jwt\n\nimport (\n\t\"errors\"\n)\n\n// Error constants\nvar (\n\tErrInvalidKey      = errors.New(\"key is invalid\")\n\tErrInvalidKeyType  = errors.New(\"key is of invalid type\")\n\tErrHashUnavailable = errors.New(\"the requested hash function is unavailable\")\n)\n\n// The errors that might occur when parsing and validating a token\nconst (\n\tValidationErrorMalformed        uint32 = 1 << iota // Token is malformed\n\tValidationErrorUnverifiable                        // Token could not be verified because of signing problems\n\tValidationErrorSignatureInvalid                    // Signature validation failed\n\n\t// Standard Claim validation errors\n\tValidationErrorAudience      // AUD validation failed\n\tValidationErrorExpired       // EXP validation failed\n\tValidationErrorIssuedAt      // IAT validation failed\n\tValidationErrorIssuer        // ISS validation failed\n\tValidationErrorNotValidYet   // NBF validation failed\n\tValidationErrorId            // JTI validation failed\n\tValidationErrorClaimsInvalid // Generic claims validation error\n)\n\n// Helper for constructing a ValidationError with a string error message\nfunc NewValidationError(errorText string, errorFlags uint32) *ValidationError {\n\treturn &ValidationError{\n\t\ttext:   errorText,\n\t\tErrors: errorFlags,\n\t}\n}\n\n// The error from Parse if token is not valid\ntype ValidationError struct {\n\tInner  error  // stores the error returned by external dependencies, i.e.: KeyFunc\n\tErrors uint32 // bitfield.  see ValidationError... constants\n\ttext   string // errors that do not have a valid error just have text\n}\n\n// Validation error is an error type\nfunc (e ValidationError) Error() string {\n\tif e.Inner != nil {\n\t\treturn e.Inner.Error()\n\t} else if e.text != \"\" {\n\t\treturn e.text\n\t} else {\n\t\treturn \"token is invalid\"\n\t}\n}\n\n// No errors\nfunc (e *ValidationError) valid() bool {\n\treturn e.Errors == 0\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/example_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"fmt\"\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"time\"\n)\n\n// Example (atypical) using the StandardClaims type by itself to parse a token.\n// The StandardClaims type is designed to be embedded into your custom types\n// to provide standard validation features.  You can use it alone, but there's\n// no way to retrieve other fields after parsing.\n// See the CustomClaimsType example for intended usage.\nfunc ExampleNewWithClaims_standardClaims() {\n\tmySigningKey := []byte(\"AllYourBase\")\n\n\t// Create the Claims\n\tclaims := &jwt.StandardClaims{\n\t\tExpiresAt: 15000,\n\t\tIssuer:    \"test\",\n\t}\n\n\ttoken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n\tss, err := token.SignedString(mySigningKey)\n\tfmt.Printf(\"%v %v\", ss, err)\n\t//Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.QsODzZu3lUZMVdhbO76u3Jv02iYCvEHcYVUI1kOWEU0 <nil>\n}\n\n// Example creating a token using a custom claims type.  The StandardClaim is embedded\n// in the custom type to allow for easy encoding, parsing and validation of standard claims.\nfunc ExampleNewWithClaims_customClaimsType() {\n\tmySigningKey := []byte(\"AllYourBase\")\n\n\ttype MyCustomClaims struct {\n\t\tFoo string `json:\"foo\"`\n\t\tjwt.StandardClaims\n\t}\n\n\t// Create the Claims\n\tclaims := MyCustomClaims{\n\t\t\"bar\",\n\t\tjwt.StandardClaims{\n\t\t\tExpiresAt: 15000,\n\t\t\tIssuer:    \"test\",\n\t\t},\n\t}\n\n\ttoken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n\tss, err := token.SignedString(mySigningKey)\n\tfmt.Printf(\"%v %v\", ss, err)\n\t//Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c <nil>\n}\n\n// Example creating a token using a custom claims type.  The StandardClaim is embedded\n// in the custom type to allow for easy encoding, parsing and validation of standard claims.\nfunc ExampleParseWithClaims_customClaimsType() {\n\ttokenString := \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c\"\n\n\ttype MyCustomClaims struct {\n\t\tFoo string `json:\"foo\"`\n\t\tjwt.StandardClaims\n\t}\n\n\t// sample token is expired.  override time so it parses as valid\n\tat(time.Unix(0, 0), func() {\n\t\ttoken, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {\n\t\t\treturn []byte(\"AllYourBase\"), nil\n\t\t})\n\n\t\tif claims, ok := token.Claims.(*MyCustomClaims); ok && token.Valid {\n\t\t\tfmt.Printf(\"%v %v\", claims.Foo, claims.StandardClaims.ExpiresAt)\n\t\t} else {\n\t\t\tfmt.Println(err)\n\t\t}\n\t})\n\n\t// Output: bar 15000\n}\n\n// Override time value for tests.  Restore default value after.\nfunc at(t time.Time, f func()) {\n\tjwt.TimeFunc = func() time.Time {\n\t\treturn t\n\t}\n\tf()\n\tjwt.TimeFunc = time.Now\n}\n\n// An example of parsing the error types using bitfield checks\nfunc ExampleParse_errorChecking() {\n\t// Token from another example.  This token is expired\n\tvar tokenString = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c\"\n\n\ttoken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {\n\t\treturn []byte(\"AllYourBase\"), nil\n\t})\n\n\tif token.Valid {\n\t\tfmt.Println(\"You look nice today\")\n\t} else if ve, ok := err.(*jwt.ValidationError); ok {\n\t\tif ve.Errors&jwt.ValidationErrorMalformed != 0 {\n\t\t\tfmt.Println(\"That's not even a token\")\n\t\t} else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {\n\t\t\t// Token is either expired or not active yet\n\t\t\tfmt.Println(\"Timing is everything\")\n\t\t} else {\n\t\t\tfmt.Println(\"Couldn't handle this token:\", err)\n\t\t}\n\t} else {\n\t\tfmt.Println(\"Couldn't handle this token:\", err)\n\t}\n\n\t// Output: Timing is everything\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/hmac.go",
    "content": "package jwt\n\nimport (\n\t\"crypto\"\n\t\"crypto/hmac\"\n\t\"errors\"\n)\n\n// Implements the HMAC-SHA family of signing methods signing methods\n// Expects key type of []byte for both signing and validation\ntype SigningMethodHMAC struct {\n\tName string\n\tHash crypto.Hash\n}\n\n// Specific instances for HS256 and company\nvar (\n\tSigningMethodHS256  *SigningMethodHMAC\n\tSigningMethodHS384  *SigningMethodHMAC\n\tSigningMethodHS512  *SigningMethodHMAC\n\tErrSignatureInvalid = errors.New(\"signature is invalid\")\n)\n\nfunc init() {\n\t// HS256\n\tSigningMethodHS256 = &SigningMethodHMAC{\"HS256\", crypto.SHA256}\n\tRegisterSigningMethod(SigningMethodHS256.Alg(), func() SigningMethod {\n\t\treturn SigningMethodHS256\n\t})\n\n\t// HS384\n\tSigningMethodHS384 = &SigningMethodHMAC{\"HS384\", crypto.SHA384}\n\tRegisterSigningMethod(SigningMethodHS384.Alg(), func() SigningMethod {\n\t\treturn SigningMethodHS384\n\t})\n\n\t// HS512\n\tSigningMethodHS512 = &SigningMethodHMAC{\"HS512\", crypto.SHA512}\n\tRegisterSigningMethod(SigningMethodHS512.Alg(), func() SigningMethod {\n\t\treturn SigningMethodHS512\n\t})\n}\n\nfunc (m *SigningMethodHMAC) Alg() string {\n\treturn m.Name\n}\n\n// Verify the signature of HSXXX tokens.  Returns nil if the signature is valid.\nfunc (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error {\n\t// Verify the key is the right type\n\tkeyBytes, ok := key.([]byte)\n\tif !ok {\n\t\treturn ErrInvalidKeyType\n\t}\n\n\t// Decode signature, for comparison\n\tsig, err := DecodeSegment(signature)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Can we use the specified hashing method?\n\tif !m.Hash.Available() {\n\t\treturn ErrHashUnavailable\n\t}\n\n\t// This signing method is symmetric, so we validate the signature\n\t// by reproducing the signature from the signing string and key, then\n\t// comparing that against the provided signature.\n\thasher := hmac.New(m.Hash.New, keyBytes)\n\thasher.Write([]byte(signingString))\n\tif !hmac.Equal(sig, hasher.Sum(nil)) {\n\t\treturn ErrSignatureInvalid\n\t}\n\n\t// No validation errors.  Signature is good.\n\treturn nil\n}\n\n// Implements the Sign method from SigningMethod for this signing method.\n// Key must be []byte\nfunc (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, error) {\n\tif keyBytes, ok := key.([]byte); ok {\n\t\tif !m.Hash.Available() {\n\t\t\treturn \"\", ErrHashUnavailable\n\t\t}\n\n\t\thasher := hmac.New(m.Hash.New, keyBytes)\n\t\thasher.Write([]byte(signingString))\n\n\t\treturn EncodeSegment(hasher.Sum(nil)), nil\n\t}\n\n\treturn \"\", ErrInvalidKeyType\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/hmac_example_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"fmt\"\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"io/ioutil\"\n\t\"time\"\n)\n\n// For HMAC signing method, the key can be any []byte. It is recommended to generate\n// a key using crypto/rand or something equivalent. You need the same key for signing\n// and validating.\nvar hmacSampleSecret []byte\n\nfunc init() {\n\t// Load sample key data\n\tif keyData, e := ioutil.ReadFile(\"test/hmacTestKey\"); e == nil {\n\t\thmacSampleSecret = keyData\n\t} else {\n\t\tpanic(e)\n\t}\n}\n\n// Example creating, signing, and encoding a JWT token using the HMAC signing method\nfunc ExampleNew_hmac() {\n\t// Create a new token object, specifying signing method and the claims\n\t// you would like it to contain.\n\ttoken := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{\n\t\t\"foo\": \"bar\",\n\t\t\"nbf\": time.Date(2015, 10, 10, 12, 0, 0, 0, time.UTC).Unix(),\n\t})\n\n\t// Sign and get the complete encoded token as a string using the secret\n\ttokenString, err := token.SignedString(hmacSampleSecret)\n\n\tfmt.Println(tokenString, err)\n\t// Output: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br-Zk-bh7vLiRIsrpU <nil>\n}\n\n// Example parsing and validating a token using the HMAC signing method\nfunc ExampleParse_hmac() {\n\t// sample token string taken from the New example\n\ttokenString := \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYmYiOjE0NDQ0Nzg0MDB9.u1riaD1rW97opCoAuRCTy4w58Br-Zk-bh7vLiRIsrpU\"\n\n\t// Parse takes the token string and a function for looking up the key. The latter is especially\n\t// useful if you use multiple keys for your application.  The standard is to use 'kid' in the\n\t// head of the token to identify which key to use, but the parsed token (head and claims) is provided\n\t// to the callback, providing flexibility.\n\ttoken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {\n\t\t// Don't forget to validate the alg is what you expect:\n\t\tif _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {\n\t\t\treturn nil, fmt.Errorf(\"Unexpected signing method: %v\", token.Header[\"alg\"])\n\t\t}\n\t\t\n\t\t// hmacSampleSecret is a []byte containing your secret, e.g. []byte(\"my_secret_key\")\n\t\treturn hmacSampleSecret, nil\n\t})\n\n\tif claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {\n\t\tfmt.Println(claims[\"foo\"], claims[\"nbf\"])\n\t} else {\n\t\tfmt.Println(err)\n\t}\n\n\t// Output: bar 1.4444784e+09\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/hmac_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"testing\"\n)\n\nvar hmacTestData = []struct {\n\tname        string\n\ttokenString string\n\talg         string\n\tclaims      map[string]interface{}\n\tvalid       bool\n}{\n\t{\n\t\t\"web sample\",\n\t\t\"eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk\",\n\t\t\"HS256\",\n\t\tmap[string]interface{}{\"iss\": \"joe\", \"exp\": 1300819380, \"http://example.com/is_root\": true},\n\t\ttrue,\n\t},\n\t{\n\t\t\"HS384\",\n\t\t\"eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJleHAiOjEuMzAwODE5MzhlKzA5LCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiaXNzIjoiam9lIn0.KWZEuOD5lbBxZ34g7F-SlVLAQ_r5KApWNWlZIIMyQVz5Zs58a7XdNzj5_0EcNoOy\",\n\t\t\"HS384\",\n\t\tmap[string]interface{}{\"iss\": \"joe\", \"exp\": 1300819380, \"http://example.com/is_root\": true},\n\t\ttrue,\n\t},\n\t{\n\t\t\"HS512\",\n\t\t\"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEuMzAwODE5MzhlKzA5LCJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiaXNzIjoiam9lIn0.CN7YijRX6Aw1n2jyI2Id1w90ja-DEMYiWixhYCyHnrZ1VfJRaFQz1bEbjjA5Fn4CLYaUG432dEYmSbS4Saokmw\",\n\t\t\"HS512\",\n\t\tmap[string]interface{}{\"iss\": \"joe\", \"exp\": 1300819380, \"http://example.com/is_root\": true},\n\t\ttrue,\n\t},\n\t{\n\t\t\"web sample: invalid\",\n\t\t\"eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXo\",\n\t\t\"HS256\",\n\t\tmap[string]interface{}{\"iss\": \"joe\", \"exp\": 1300819380, \"http://example.com/is_root\": true},\n\t\tfalse,\n\t},\n}\n\n// Sample data from http://tools.ietf.org/html/draft-jones-json-web-signature-04#appendix-A.1\nvar hmacTestKey, _ = ioutil.ReadFile(\"test/hmacTestKey\")\n\nfunc TestHMACVerify(t *testing.T) {\n\tfor _, data := range hmacTestData {\n\t\tparts := strings.Split(data.tokenString, \".\")\n\n\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\terr := method.Verify(strings.Join(parts[0:2], \".\"), parts[2], hmacTestKey)\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying key: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid key passed validation\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestHMACSign(t *testing.T) {\n\tfor _, data := range hmacTestData {\n\t\tif data.valid {\n\t\t\tparts := strings.Split(data.tokenString, \".\")\n\t\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\t\tsig, err := method.Sign(strings.Join(parts[0:2], \".\"), hmacTestKey)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"[%v] Error signing token: %v\", data.name, err)\n\t\t\t}\n\t\t\tif sig != parts[2] {\n\t\t\t\tt.Errorf(\"[%v] Incorrect signature.\\nwas:\\n%v\\nexpecting:\\n%v\", data.name, sig, parts[2])\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc BenchmarkHS256Signing(b *testing.B) {\n\tbenchmarkSigning(b, jwt.SigningMethodHS256, hmacTestKey)\n}\n\nfunc BenchmarkHS384Signing(b *testing.B) {\n\tbenchmarkSigning(b, jwt.SigningMethodHS384, hmacTestKey)\n}\n\nfunc BenchmarkHS512Signing(b *testing.B) {\n\tbenchmarkSigning(b, jwt.SigningMethodHS512, hmacTestKey)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/http_example_test.go",
    "content": "package jwt_test\n\n// Example HTTP auth using asymmetric crypto/RSA keys\n// This is based on a (now outdated) example at https://gist.github.com/cryptix/45c33ecf0ae54828e63b\n\nimport (\n\t\"bytes\"\n\t\"crypto/rsa\"\n\t\"fmt\"\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"github.com/dgrijalva/jwt-go/request\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\n// location of the files used for signing and verification\nconst (\n\tprivKeyPath = \"test/sample_key\"     // openssl genrsa -out app.rsa keysize\n\tpubKeyPath  = \"test/sample_key.pub\" // openssl rsa -in app.rsa -pubout > app.rsa.pub\n)\n\nvar (\n\tverifyKey  *rsa.PublicKey\n\tsignKey    *rsa.PrivateKey\n\tserverPort int\n\t// storing sample username/password pairs\n\t// don't do this on a real server\n\tusers = map[string]string{\n\t\t\"test\": \"known\",\n\t}\n)\n\n// read the key files before starting http handlers\nfunc init() {\n\tsignBytes, err := ioutil.ReadFile(privKeyPath)\n\tfatal(err)\n\n\tsignKey, err = jwt.ParseRSAPrivateKeyFromPEM(signBytes)\n\tfatal(err)\n\n\tverifyBytes, err := ioutil.ReadFile(pubKeyPath)\n\tfatal(err)\n\n\tverifyKey, err = jwt.ParseRSAPublicKeyFromPEM(verifyBytes)\n\tfatal(err)\n\n\thttp.HandleFunc(\"/authenticate\", authHandler)\n\thttp.HandleFunc(\"/restricted\", restrictedHandler)\n\n\t// Setup listener\n\tlistener, err := net.ListenTCP(\"tcp\", &net.TCPAddr{})\n\tserverPort = listener.Addr().(*net.TCPAddr).Port\n\n\tlog.Println(\"Listening...\")\n\tgo func() {\n\t\tfatal(http.Serve(listener, nil))\n\t}()\n}\n\nvar start func()\n\nfunc fatal(err error) {\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\n// Define some custom types were going to use within our tokens\ntype CustomerInfo struct {\n\tName string\n\tKind string\n}\n\ntype CustomClaimsExample struct {\n\t*jwt.StandardClaims\n\tTokenType string\n\tCustomerInfo\n}\n\nfunc Example_getTokenViaHTTP() {\n\t// See func authHandler for an example auth handler that produces a token\n\tres, err := http.PostForm(fmt.Sprintf(\"http://localhost:%v/authenticate\", serverPort), url.Values{\n\t\t\"user\": {\"test\"},\n\t\t\"pass\": {\"known\"},\n\t})\n\tif err != nil {\n\t\tfatal(err)\n\t}\n\n\tif res.StatusCode != 200 {\n\t\tfmt.Println(\"Unexpected status code\", res.StatusCode)\n\t}\n\n\t// Read the token out of the response body\n\tbuf := new(bytes.Buffer)\n\tio.Copy(buf, res.Body)\n\tres.Body.Close()\n\ttokenString := strings.TrimSpace(buf.String())\n\n\t// Parse the token\n\ttoken, err := jwt.ParseWithClaims(tokenString, &CustomClaimsExample{}, func(token *jwt.Token) (interface{}, error) {\n\t\t// since we only use the one private key to sign the tokens,\n\t\t// we also only use its public counter part to verify\n\t\treturn verifyKey, nil\n\t})\n\tfatal(err)\n\n\tclaims := token.Claims.(*CustomClaimsExample)\n\tfmt.Println(claims.CustomerInfo.Name)\n\n\t//Output: test\n}\n\nfunc Example_useTokenViaHTTP() {\n\n\t// Make a sample token\n\t// In a real world situation, this token will have been acquired from\n\t// some other API call (see Example_getTokenViaHTTP)\n\ttoken, err := createToken(\"foo\")\n\tfatal(err)\n\n\t// Make request.  See func restrictedHandler for example request processor\n\treq, err := http.NewRequest(\"GET\", fmt.Sprintf(\"http://localhost:%v/restricted\", serverPort), nil)\n\tfatal(err)\n\treq.Header.Set(\"Authorization\", fmt.Sprintf(\"Bearer %v\", token))\n\tres, err := http.DefaultClient.Do(req)\n\tfatal(err)\n\n\t// Read the response body\n\tbuf := new(bytes.Buffer)\n\tio.Copy(buf, res.Body)\n\tres.Body.Close()\n\tfmt.Println(buf.String())\n\n\t// Output: Welcome, foo\n}\n\nfunc createToken(user string) (string, error) {\n\t// create a signer for rsa 256\n\tt := jwt.New(jwt.GetSigningMethod(\"RS256\"))\n\n\t// set our claims\n\tt.Claims = &CustomClaimsExample{\n\t\t&jwt.StandardClaims{\n\t\t\t// set the expire time\n\t\t\t// see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-20#section-4.1.4\n\t\t\tExpiresAt: time.Now().Add(time.Minute * 1).Unix(),\n\t\t},\n\t\t\"level1\",\n\t\tCustomerInfo{user, \"human\"},\n\t}\n\n\t// Creat token string\n\treturn t.SignedString(signKey)\n}\n\n// reads the form values, checks them and creates the token\nfunc authHandler(w http.ResponseWriter, r *http.Request) {\n\t// make sure its post\n\tif r.Method != \"POST\" {\n\t\tw.WriteHeader(http.StatusBadRequest)\n\t\tfmt.Fprintln(w, \"No POST\", r.Method)\n\t\treturn\n\t}\n\n\tuser := r.FormValue(\"user\")\n\tpass := r.FormValue(\"pass\")\n\n\tlog.Printf(\"Authenticate: user[%s] pass[%s]\\n\", user, pass)\n\n\t// check values\n\tif user != \"test\" || pass != \"known\" {\n\t\tw.WriteHeader(http.StatusForbidden)\n\t\tfmt.Fprintln(w, \"Wrong info\")\n\t\treturn\n\t}\n\n\ttokenString, err := createToken(user)\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusInternalServerError)\n\t\tfmt.Fprintln(w, \"Sorry, error while Signing Token!\")\n\t\tlog.Printf(\"Token Signing error: %v\\n\", err)\n\t\treturn\n\t}\n\n\tw.Header().Set(\"Content-Type\", \"application/jwt\")\n\tw.WriteHeader(http.StatusOK)\n\tfmt.Fprintln(w, tokenString)\n}\n\n// only accessible with a valid token\nfunc restrictedHandler(w http.ResponseWriter, r *http.Request) {\n\t// Get token from request\n\ttoken, err := request.ParseFromRequestWithClaims(r, request.OAuth2Extractor, &CustomClaimsExample{}, func(token *jwt.Token) (interface{}, error) {\n\t\t// since we only use the one private key to sign the tokens,\n\t\t// we also only use its public counter part to verify\n\t\treturn verifyKey, nil\n\t})\n\n\t// If the token is missing or invalid, return error\n\tif err != nil {\n\t\tw.WriteHeader(http.StatusUnauthorized)\n\t\tfmt.Fprintln(w, \"Invalid token:\", err)\n\t\treturn\n\t}\n\n\t// Token is valid\n\tfmt.Fprintln(w, \"Welcome,\", token.Claims.(*CustomClaimsExample).Name)\n\treturn\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/map_claims.go",
    "content": "package jwt\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t// \"fmt\"\n)\n\n// Claims type that uses the map[string]interface{} for JSON decoding\n// This is the default claims type if you don't supply one\ntype MapClaims map[string]interface{}\n\n// Compares the aud claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (m MapClaims) VerifyAudience(cmp string, req bool) bool {\n\taud, _ := m[\"aud\"].(string)\n\treturn verifyAud(aud, cmp, req)\n}\n\n// Compares the exp claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool {\n\tswitch exp := m[\"exp\"].(type) {\n\tcase float64:\n\t\treturn verifyExp(int64(exp), cmp, req)\n\tcase json.Number:\n\t\tv, _ := exp.Int64()\n\t\treturn verifyExp(v, cmp, req)\n\t}\n\treturn req == false\n}\n\n// Compares the iat claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool {\n\tswitch iat := m[\"iat\"].(type) {\n\tcase float64:\n\t\treturn verifyIat(int64(iat), cmp, req)\n\tcase json.Number:\n\t\tv, _ := iat.Int64()\n\t\treturn verifyIat(v, cmp, req)\n\t}\n\treturn req == false\n}\n\n// Compares the iss claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (m MapClaims) VerifyIssuer(cmp string, req bool) bool {\n\tiss, _ := m[\"iss\"].(string)\n\treturn verifyIss(iss, cmp, req)\n}\n\n// Compares the nbf claim against cmp.\n// If required is false, this method will return true if the value matches or is unset\nfunc (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool {\n\tswitch nbf := m[\"nbf\"].(type) {\n\tcase float64:\n\t\treturn verifyNbf(int64(nbf), cmp, req)\n\tcase json.Number:\n\t\tv, _ := nbf.Int64()\n\t\treturn verifyNbf(v, cmp, req)\n\t}\n\treturn req == false\n}\n\n// Validates time based claims \"exp, iat, nbf\".\n// There is no accounting for clock skew.\n// As well, if any of the above claims are not in the token, it will still\n// be considered a valid claim.\nfunc (m MapClaims) Valid() error {\n\tvErr := new(ValidationError)\n\tnow := TimeFunc().Unix()\n\n\tif m.VerifyExpiresAt(now, false) == false {\n\t\tvErr.Inner = errors.New(\"Token is expired\")\n\t\tvErr.Errors |= ValidationErrorExpired\n\t}\n\n\tif m.VerifyIssuedAt(now, false) == false {\n\t\tvErr.Inner = errors.New(\"Token used before issued\")\n\t\tvErr.Errors |= ValidationErrorIssuedAt\n\t}\n\n\tif m.VerifyNotBefore(now, false) == false {\n\t\tvErr.Inner = errors.New(\"Token is not valid yet\")\n\t\tvErr.Errors |= ValidationErrorNotValidYet\n\t}\n\n\tif vErr.valid() {\n\t\treturn nil\n\t}\n\n\treturn vErr\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/none.go",
    "content": "package jwt\n\n// Implements the none signing method.  This is required by the spec\n// but you probably should never use it.\nvar SigningMethodNone *signingMethodNone\n\nconst UnsafeAllowNoneSignatureType unsafeNoneMagicConstant = \"none signing method allowed\"\n\nvar NoneSignatureTypeDisallowedError error\n\ntype signingMethodNone struct{}\ntype unsafeNoneMagicConstant string\n\nfunc init() {\n\tSigningMethodNone = &signingMethodNone{}\n\tNoneSignatureTypeDisallowedError = NewValidationError(\"'none' signature type is not allowed\", ValidationErrorSignatureInvalid)\n\n\tRegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod {\n\t\treturn SigningMethodNone\n\t})\n}\n\nfunc (m *signingMethodNone) Alg() string {\n\treturn \"none\"\n}\n\n// Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key\nfunc (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) {\n\t// Key must be UnsafeAllowNoneSignatureType to prevent accidentally\n\t// accepting 'none' signing method\n\tif _, ok := key.(unsafeNoneMagicConstant); !ok {\n\t\treturn NoneSignatureTypeDisallowedError\n\t}\n\t// If signing method is none, signature must be an empty string\n\tif signature != \"\" {\n\t\treturn NewValidationError(\n\t\t\t\"'none' signing method with non-empty signature\",\n\t\t\tValidationErrorSignatureInvalid,\n\t\t)\n\t}\n\n\t// Accept 'none' signing method.\n\treturn nil\n}\n\n// Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key\nfunc (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) {\n\tif _, ok := key.(unsafeNoneMagicConstant); ok {\n\t\treturn \"\", nil\n\t}\n\treturn \"\", NoneSignatureTypeDisallowedError\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/none_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"strings\"\n\t\"testing\"\n)\n\nvar noneTestData = []struct {\n\tname        string\n\ttokenString string\n\talg         string\n\tkey         interface{}\n\tclaims      map[string]interface{}\n\tvalid       bool\n}{\n\t{\n\t\t\"Basic\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.\",\n\t\t\"none\",\n\t\tjwt.UnsafeAllowNoneSignatureType,\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic - no key\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.\",\n\t\t\"none\",\n\t\tnil,\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\tfalse,\n\t},\n\t{\n\t\t\"Signed\",\n\t\t\"eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw\",\n\t\t\"none\",\n\t\tjwt.UnsafeAllowNoneSignatureType,\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\tfalse,\n\t},\n}\n\nfunc TestNoneVerify(t *testing.T) {\n\tfor _, data := range noneTestData {\n\t\tparts := strings.Split(data.tokenString, \".\")\n\n\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\terr := method.Verify(strings.Join(parts[0:2], \".\"), parts[2], data.key)\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying key: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid key passed validation\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestNoneSign(t *testing.T) {\n\tfor _, data := range noneTestData {\n\t\tif data.valid {\n\t\t\tparts := strings.Split(data.tokenString, \".\")\n\t\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\t\tsig, err := method.Sign(strings.Join(parts[0:2], \".\"), data.key)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"[%v] Error signing token: %v\", data.name, err)\n\t\t\t}\n\t\t\tif sig != parts[2] {\n\t\t\t\tt.Errorf(\"[%v] Incorrect signature.\\nwas:\\n%v\\nexpecting:\\n%v\", data.name, sig, parts[2])\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/parser.go",
    "content": "package jwt\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype Parser struct {\n\tValidMethods         []string // If populated, only these methods will be considered valid\n\tUseJSONNumber        bool     // Use JSON Number format in JSON decoder\n\tSkipClaimsValidation bool     // Skip claims validation during token parsing\n}\n\n// Parse, validate, and return a token.\n// keyFunc will receive the parsed token and should return the key for validating.\n// If everything is kosher, err will be nil\nfunc (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) {\n\treturn p.ParseWithClaims(tokenString, MapClaims{}, keyFunc)\n}\n\nfunc (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) {\n\ttoken, parts, err := p.ParseUnverified(tokenString, claims)\n\tif err != nil {\n\t\treturn token, err\n\t}\n\n\t// Verify signing method is in the required set\n\tif p.ValidMethods != nil {\n\t\tvar signingMethodValid = false\n\t\tvar alg = token.Method.Alg()\n\t\tfor _, m := range p.ValidMethods {\n\t\t\tif m == alg {\n\t\t\t\tsigningMethodValid = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !signingMethodValid {\n\t\t\t// signing method is not in the listed set\n\t\t\treturn token, NewValidationError(fmt.Sprintf(\"signing method %v is invalid\", alg), ValidationErrorSignatureInvalid)\n\t\t}\n\t}\n\n\t// Lookup key\n\tvar key interface{}\n\tif keyFunc == nil {\n\t\t// keyFunc was not provided.  short circuiting validation\n\t\treturn token, NewValidationError(\"no Keyfunc was provided.\", ValidationErrorUnverifiable)\n\t}\n\tif key, err = keyFunc(token); err != nil {\n\t\t// keyFunc returned an error\n\t\tif ve, ok := err.(*ValidationError); ok {\n\t\t\treturn token, ve\n\t\t}\n\t\treturn token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable}\n\t}\n\n\tvErr := &ValidationError{}\n\n\t// Validate Claims\n\tif !p.SkipClaimsValidation {\n\t\tif err := token.Claims.Valid(); err != nil {\n\n\t\t\t// If the Claims Valid returned an error, check if it is a validation error,\n\t\t\t// If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set\n\t\t\tif e, ok := err.(*ValidationError); !ok {\n\t\t\t\tvErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid}\n\t\t\t} else {\n\t\t\t\tvErr = e\n\t\t\t}\n\t\t}\n\t}\n\n\t// Perform validation\n\ttoken.Signature = parts[2]\n\tif err = token.Method.Verify(strings.Join(parts[0:2], \".\"), token.Signature, key); err != nil {\n\t\tvErr.Inner = err\n\t\tvErr.Errors |= ValidationErrorSignatureInvalid\n\t}\n\n\tif vErr.valid() {\n\t\ttoken.Valid = true\n\t\treturn token, nil\n\t}\n\n\treturn token, vErr\n}\n\n// WARNING: Don't use this method unless you know what you're doing\n//\n// This method parses the token but doesn't validate the signature. It's only\n// ever useful in cases where you know the signature is valid (because it has\n// been checked previously in the stack) and you want to extract values from\n// it.\nfunc (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) {\n\tparts = strings.Split(tokenString, \".\")\n\tif len(parts) != 3 {\n\t\treturn nil, parts, NewValidationError(\"token contains an invalid number of segments\", ValidationErrorMalformed)\n\t}\n\n\ttoken = &Token{Raw: tokenString}\n\n\t// parse Header\n\tvar headerBytes []byte\n\tif headerBytes, err = DecodeSegment(parts[0]); err != nil {\n\t\tif strings.HasPrefix(strings.ToLower(tokenString), \"bearer \") {\n\t\t\treturn token, parts, NewValidationError(\"tokenstring should not contain 'bearer '\", ValidationErrorMalformed)\n\t\t}\n\t\treturn token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed}\n\t}\n\tif err = json.Unmarshal(headerBytes, &token.Header); err != nil {\n\t\treturn token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed}\n\t}\n\n\t// parse Claims\n\tvar claimBytes []byte\n\ttoken.Claims = claims\n\n\tif claimBytes, err = DecodeSegment(parts[1]); err != nil {\n\t\treturn token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed}\n\t}\n\tdec := json.NewDecoder(bytes.NewBuffer(claimBytes))\n\tif p.UseJSONNumber {\n\t\tdec.UseNumber()\n\t}\n\t// JSON Decode.  Special case for map type to avoid weird pointer behavior\n\tif c, ok := token.Claims.(MapClaims); ok {\n\t\terr = dec.Decode(&c)\n\t} else {\n\t\terr = dec.Decode(&claims)\n\t}\n\t// Handle decode error\n\tif err != nil {\n\t\treturn token, parts, &ValidationError{Inner: err, Errors: ValidationErrorMalformed}\n\t}\n\n\t// Lookup signature method\n\tif method, ok := token.Header[\"alg\"].(string); ok {\n\t\tif token.Method = GetSigningMethod(method); token.Method == nil {\n\t\t\treturn token, parts, NewValidationError(\"signing method (alg) is unavailable.\", ValidationErrorUnverifiable)\n\t\t}\n\t} else {\n\t\treturn token, parts, NewValidationError(\"signing method (alg) is unspecified.\", ValidationErrorUnverifiable)\n\t}\n\n\treturn token, parts, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/parser_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"crypto/rsa\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"github.com/dgrijalva/jwt-go/test\"\n)\n\nvar keyFuncError error = fmt.Errorf(\"error loading key\")\n\nvar (\n\tjwtTestDefaultKey *rsa.PublicKey\n\tdefaultKeyFunc    jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return jwtTestDefaultKey, nil }\n\temptyKeyFunc      jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return nil, nil }\n\terrorKeyFunc      jwt.Keyfunc = func(t *jwt.Token) (interface{}, error) { return nil, keyFuncError }\n\tnilKeyFunc        jwt.Keyfunc = nil\n)\n\nfunc init() {\n\tjwtTestDefaultKey = test.LoadRSAPublicKeyFromDisk(\"test/sample_key.pub\")\n}\n\nvar jwtTestData = []struct {\n\tname        string\n\ttokenString string\n\tkeyfunc     jwt.Keyfunc\n\tclaims      jwt.Claims\n\tvalid       bool\n\terrors      uint32\n\tparser      *jwt.Parser\n}{\n\t{\n\t\t\"basic\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\ttrue,\n\t\t0,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic expired\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"exp\": float64(time.Now().Unix() - 100)},\n\t\tfalse,\n\t\tjwt.ValidationErrorExpired,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic nbf\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"nbf\": float64(time.Now().Unix() + 100)},\n\t\tfalse,\n\t\tjwt.ValidationErrorNotValidYet,\n\t\tnil,\n\t},\n\t{\n\t\t\"expired and nbf\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"nbf\": float64(time.Now().Unix() + 100), \"exp\": float64(time.Now().Unix() - 100)},\n\t\tfalse,\n\t\tjwt.ValidationErrorNotValidYet | jwt.ValidationErrorExpired,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic invalid\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tfalse,\n\t\tjwt.ValidationErrorSignatureInvalid,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic nokeyfunc\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\tnilKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tfalse,\n\t\tjwt.ValidationErrorUnverifiable,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic nokey\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\temptyKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tfalse,\n\t\tjwt.ValidationErrorSignatureInvalid,\n\t\tnil,\n\t},\n\t{\n\t\t\"basic errorkey\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\terrorKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tfalse,\n\t\tjwt.ValidationErrorUnverifiable,\n\t\tnil,\n\t},\n\t{\n\t\t\"invalid signing method\",\n\t\t\"\",\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tfalse,\n\t\tjwt.ValidationErrorSignatureInvalid,\n\t\t&jwt.Parser{ValidMethods: []string{\"HS256\"}},\n\t},\n\t{\n\t\t\"valid signing method\",\n\t\t\"\",\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\ttrue,\n\t\t0,\n\t\t&jwt.Parser{ValidMethods: []string{\"RS256\", \"HS256\"}},\n\t},\n\t{\n\t\t\"JSON Number\",\n\t\t\"\",\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": json.Number(\"123.4\")},\n\t\ttrue,\n\t\t0,\n\t\t&jwt.Parser{UseJSONNumber: true},\n\t},\n\t{\n\t\t\"Standard Claims\",\n\t\t\"\",\n\t\tdefaultKeyFunc,\n\t\t&jwt.StandardClaims{\n\t\t\tExpiresAt: time.Now().Add(time.Second * 10).Unix(),\n\t\t},\n\t\ttrue,\n\t\t0,\n\t\t&jwt.Parser{UseJSONNumber: true},\n\t},\n\t{\n\t\t\"JSON Number - basic expired\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"exp\": json.Number(fmt.Sprintf(\"%v\", time.Now().Unix()-100))},\n\t\tfalse,\n\t\tjwt.ValidationErrorExpired,\n\t\t&jwt.Parser{UseJSONNumber: true},\n\t},\n\t{\n\t\t\"JSON Number - basic nbf\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"nbf\": json.Number(fmt.Sprintf(\"%v\", time.Now().Unix()+100))},\n\t\tfalse,\n\t\tjwt.ValidationErrorNotValidYet,\n\t\t&jwt.Parser{UseJSONNumber: true},\n\t},\n\t{\n\t\t\"JSON Number - expired and nbf\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"nbf\": json.Number(fmt.Sprintf(\"%v\", time.Now().Unix()+100)), \"exp\": json.Number(fmt.Sprintf(\"%v\", time.Now().Unix()-100))},\n\t\tfalse,\n\t\tjwt.ValidationErrorNotValidYet | jwt.ValidationErrorExpired,\n\t\t&jwt.Parser{UseJSONNumber: true},\n\t},\n\t{\n\t\t\"SkipClaimsValidation during token parsing\",\n\t\t\"\", // autogen\n\t\tdefaultKeyFunc,\n\t\tjwt.MapClaims{\"foo\": \"bar\", \"nbf\": json.Number(fmt.Sprintf(\"%v\", time.Now().Unix()+100))},\n\t\ttrue,\n\t\t0,\n\t\t&jwt.Parser{UseJSONNumber: true, SkipClaimsValidation: true},\n\t},\n}\n\nfunc TestParser_Parse(t *testing.T) {\n\tprivateKey := test.LoadRSAPrivateKeyFromDisk(\"test/sample_key\")\n\n\t// Iterate over test data set and run tests\n\tfor _, data := range jwtTestData {\n\t\t// If the token string is blank, use helper function to generate string\n\t\tif data.tokenString == \"\" {\n\t\t\tdata.tokenString = test.MakeSampleToken(data.claims, privateKey)\n\t\t}\n\n\t\t// Parse the token\n\t\tvar token *jwt.Token\n\t\tvar err error\n\t\tvar parser = data.parser\n\t\tif parser == nil {\n\t\t\tparser = new(jwt.Parser)\n\t\t}\n\t\t// Figure out correct claims type\n\t\tswitch data.claims.(type) {\n\t\tcase jwt.MapClaims:\n\t\t\ttoken, err = parser.ParseWithClaims(data.tokenString, jwt.MapClaims{}, data.keyfunc)\n\t\tcase *jwt.StandardClaims:\n\t\t\ttoken, err = parser.ParseWithClaims(data.tokenString, &jwt.StandardClaims{}, data.keyfunc)\n\t\t}\n\n\t\t// Verify result matches expectation\n\t\tif !reflect.DeepEqual(data.claims, token.Claims) {\n\t\t\tt.Errorf(\"[%v] Claims mismatch. Expecting: %v  Got: %v\", data.name, data.claims, token.Claims)\n\t\t}\n\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying token: %T:%v\", data.name, err, err)\n\t\t}\n\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid token passed validation\", data.name)\n\t\t}\n\n\t\tif (err == nil && !token.Valid) || (err != nil && token.Valid) {\n\t\t\tt.Errorf(\"[%v] Inconsistent behavior between returned error and token.Valid\", data.name)\n\t\t}\n\n\t\tif data.errors != 0 {\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"[%v] Expecting error.  Didn't get one.\", data.name)\n\t\t\t} else {\n\n\t\t\t\tve := err.(*jwt.ValidationError)\n\t\t\t\t// compare the bitfield part of the error\n\t\t\t\tif e := ve.Errors; e != data.errors {\n\t\t\t\t\tt.Errorf(\"[%v] Errors don't match expectation.  %v != %v\", data.name, e, data.errors)\n\t\t\t\t}\n\n\t\t\t\tif err.Error() == keyFuncError.Error() && ve.Inner != keyFuncError {\n\t\t\t\t\tt.Errorf(\"[%v] Inner error does not match expectation.  %v != %v\", data.name, ve.Inner, keyFuncError)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif data.valid && token.Signature == \"\" {\n\t\t\tt.Errorf(\"[%v] Signature is left unpopulated after parsing\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestParser_ParseUnverified(t *testing.T) {\n\tprivateKey := test.LoadRSAPrivateKeyFromDisk(\"test/sample_key\")\n\n\t// Iterate over test data set and run tests\n\tfor _, data := range jwtTestData {\n\t\t// If the token string is blank, use helper function to generate string\n\t\tif data.tokenString == \"\" {\n\t\t\tdata.tokenString = test.MakeSampleToken(data.claims, privateKey)\n\t\t}\n\n\t\t// Parse the token\n\t\tvar token *jwt.Token\n\t\tvar err error\n\t\tvar parser = data.parser\n\t\tif parser == nil {\n\t\t\tparser = new(jwt.Parser)\n\t\t}\n\t\t// Figure out correct claims type\n\t\tswitch data.claims.(type) {\n\t\tcase jwt.MapClaims:\n\t\t\ttoken, _, err = parser.ParseUnverified(data.tokenString, jwt.MapClaims{})\n\t\tcase *jwt.StandardClaims:\n\t\t\ttoken, _, err = parser.ParseUnverified(data.tokenString, &jwt.StandardClaims{})\n\t\t}\n\n\t\tif err != nil {\n\t\t\tt.Errorf(\"[%v] Invalid token\", data.name)\n\t\t}\n\n\t\t// Verify result matches expectation\n\t\tif !reflect.DeepEqual(data.claims, token.Claims) {\n\t\t\tt.Errorf(\"[%v] Claims mismatch. Expecting: %v  Got: %v\", data.name, data.claims, token.Claims)\n\t\t}\n\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying token: %T:%v\", data.name, err, err)\n\t\t}\n\t}\n}\n\n// Helper method for benchmarking various methods\nfunc benchmarkSigning(b *testing.B, method jwt.SigningMethod, key interface{}) {\n\tt := jwt.New(method)\n\tb.RunParallel(func(pb *testing.PB) {\n\t\tfor pb.Next() {\n\t\t\tif _, err := t.SignedString(key); err != nil {\n\t\t\t\tb.Fatal(err)\n\t\t\t}\n\t\t}\n\t})\n\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/doc.go",
    "content": "// Utility package for extracting JWT tokens from\n// HTTP requests.\n//\n// The main function is ParseFromRequest and it's WithClaims variant.\n// See examples for how to use the various Extractor implementations\n// or roll your own.\npackage request\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/extractor.go",
    "content": "package request\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n)\n\n// Errors\nvar (\n\tErrNoTokenInRequest = errors.New(\"no token present in request\")\n)\n\n// Interface for extracting a token from an HTTP request.\n// The ExtractToken method should return a token string or an error.\n// If no token is present, you must return ErrNoTokenInRequest.\ntype Extractor interface {\n\tExtractToken(*http.Request) (string, error)\n}\n\n// Extractor for finding a token in a header.  Looks at each specified\n// header in order until there's a match\ntype HeaderExtractor []string\n\nfunc (e HeaderExtractor) ExtractToken(req *http.Request) (string, error) {\n\t// loop over header names and return the first one that contains data\n\tfor _, header := range e {\n\t\tif ah := req.Header.Get(header); ah != \"\" {\n\t\t\treturn ah, nil\n\t\t}\n\t}\n\treturn \"\", ErrNoTokenInRequest\n}\n\n// Extract token from request arguments.  This includes a POSTed form or\n// GET URL arguments.  Argument names are tried in order until there's a match.\n// This extractor calls `ParseMultipartForm` on the request\ntype ArgumentExtractor []string\n\nfunc (e ArgumentExtractor) ExtractToken(req *http.Request) (string, error) {\n\t// Make sure form is parsed\n\treq.ParseMultipartForm(10e6)\n\n\t// loop over arg names and return the first one that contains data\n\tfor _, arg := range e {\n\t\tif ah := req.Form.Get(arg); ah != \"\" {\n\t\t\treturn ah, nil\n\t\t}\n\t}\n\n\treturn \"\", ErrNoTokenInRequest\n}\n\n// Tries Extractors in order until one returns a token string or an error occurs\ntype MultiExtractor []Extractor\n\nfunc (e MultiExtractor) ExtractToken(req *http.Request) (string, error) {\n\t// loop over header names and return the first one that contains data\n\tfor _, extractor := range e {\n\t\tif tok, err := extractor.ExtractToken(req); tok != \"\" {\n\t\t\treturn tok, nil\n\t\t} else if err != ErrNoTokenInRequest {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn \"\", ErrNoTokenInRequest\n}\n\n// Wrap an Extractor in this to post-process the value before it's handed off.\n// See AuthorizationHeaderExtractor for an example\ntype PostExtractionFilter struct {\n\tExtractor\n\tFilter func(string) (string, error)\n}\n\nfunc (e *PostExtractionFilter) ExtractToken(req *http.Request) (string, error) {\n\tif tok, err := e.Extractor.ExtractToken(req); tok != \"\" {\n\t\treturn e.Filter(tok)\n\t} else {\n\t\treturn \"\", err\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/extractor_example_test.go",
    "content": "package request\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n)\n\nconst (\n\texampleTokenA = \"A\"\n)\n\nfunc ExampleHeaderExtractor() {\n\treq := makeExampleRequest(\"GET\", \"/\", map[string]string{\"Token\": exampleTokenA}, nil)\n\ttokenString, err := HeaderExtractor{\"Token\"}.ExtractToken(req)\n\tif err == nil {\n\t\tfmt.Println(tokenString)\n\t} else {\n\t\tfmt.Println(err)\n\t}\n\t//Output: A\n}\n\nfunc ExampleArgumentExtractor() {\n\treq := makeExampleRequest(\"GET\", \"/\", nil, url.Values{\"token\": {extractorTestTokenA}})\n\ttokenString, err := ArgumentExtractor{\"token\"}.ExtractToken(req)\n\tif err == nil {\n\t\tfmt.Println(tokenString)\n\t} else {\n\t\tfmt.Println(err)\n\t}\n\t//Output: A\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/extractor_test.go",
    "content": "package request\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"testing\"\n)\n\nvar extractorTestTokenA = \"A\"\nvar extractorTestTokenB = \"B\"\n\nvar extractorTestData = []struct {\n\tname      string\n\textractor Extractor\n\theaders   map[string]string\n\tquery     url.Values\n\ttoken     string\n\terr       error\n}{\n\t{\n\t\tname:      \"simple header\",\n\t\textractor: HeaderExtractor{\"Foo\"},\n\t\theaders:   map[string]string{\"Foo\": extractorTestTokenA},\n\t\tquery:     nil,\n\t\ttoken:     extractorTestTokenA,\n\t\terr:       nil,\n\t},\n\t{\n\t\tname:      \"simple argument\",\n\t\textractor: ArgumentExtractor{\"token\"},\n\t\theaders:   map[string]string{},\n\t\tquery:     url.Values{\"token\": {extractorTestTokenA}},\n\t\ttoken:     extractorTestTokenA,\n\t\terr:       nil,\n\t},\n\t{\n\t\tname: \"multiple extractors\",\n\t\textractor: MultiExtractor{\n\t\t\tHeaderExtractor{\"Foo\"},\n\t\t\tArgumentExtractor{\"token\"},\n\t\t},\n\t\theaders: map[string]string{\"Foo\": extractorTestTokenA},\n\t\tquery:   url.Values{\"token\": {extractorTestTokenB}},\n\t\ttoken:   extractorTestTokenA,\n\t\terr:     nil,\n\t},\n\t{\n\t\tname:      \"simple miss\",\n\t\textractor: HeaderExtractor{\"This-Header-Is-Not-Set\"},\n\t\theaders:   map[string]string{\"Foo\": extractorTestTokenA},\n\t\tquery:     nil,\n\t\ttoken:     \"\",\n\t\terr:       ErrNoTokenInRequest,\n\t},\n\t{\n\t\tname:      \"filter\",\n\t\textractor: AuthorizationHeaderExtractor,\n\t\theaders:   map[string]string{\"Authorization\": \"Bearer \" + extractorTestTokenA},\n\t\tquery:     nil,\n\t\ttoken:     extractorTestTokenA,\n\t\terr:       nil,\n\t},\n}\n\nfunc TestExtractor(t *testing.T) {\n\t// Bearer token request\n\tfor _, data := range extractorTestData {\n\t\t// Make request from test struct\n\t\tr := makeExampleRequest(\"GET\", \"/\", data.headers, data.query)\n\n\t\t// Test extractor\n\t\ttoken, err := data.extractor.ExtractToken(r)\n\t\tif token != data.token {\n\t\t\tt.Errorf(\"[%v] Expected token '%v'.  Got '%v'\", data.name, data.token, token)\n\t\t\tcontinue\n\t\t}\n\t\tif err != data.err {\n\t\t\tt.Errorf(\"[%v] Expected error '%v'.  Got '%v'\", data.name, data.err, err)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc makeExampleRequest(method, path string, headers map[string]string, urlArgs url.Values) *http.Request {\n\tr, _ := http.NewRequest(method, fmt.Sprintf(\"%v?%v\", path, urlArgs.Encode()), nil)\n\tfor k, v := range headers {\n\t\tr.Header.Set(k, v)\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go",
    "content": "package request\n\nimport (\n\t\"strings\"\n)\n\n// Strips 'Bearer ' prefix from bearer token string\nfunc stripBearerPrefixFromTokenString(tok string) (string, error) {\n\t// Should be a bearer token\n\tif len(tok) > 6 && strings.ToUpper(tok[0:7]) == \"BEARER \" {\n\t\treturn tok[7:], nil\n\t}\n\treturn tok, nil\n}\n\n// Extract bearer token from Authorization header\n// Uses PostExtractionFilter to strip \"Bearer \" prefix from header\nvar AuthorizationHeaderExtractor = &PostExtractionFilter{\n\tHeaderExtractor{\"Authorization\"},\n\tstripBearerPrefixFromTokenString,\n}\n\n// Extractor for OAuth2 access tokens.  Looks in 'Authorization'\n// header then 'access_token' argument for a token.\nvar OAuth2Extractor = &MultiExtractor{\n\tAuthorizationHeaderExtractor,\n\tArgumentExtractor{\"access_token\"},\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/request.go",
    "content": "package request\n\nimport (\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"net/http\"\n)\n\n// Extract and parse a JWT token from an HTTP request.\n// This behaves the same as Parse, but accepts a request and an extractor\n// instead of a token string.  The Extractor interface allows you to define\n// the logic for extracting a token.  Several useful implementations are provided.\n//\n// You can provide options to modify parsing behavior\nfunc ParseFromRequest(req *http.Request, extractor Extractor, keyFunc jwt.Keyfunc, options ...ParseFromRequestOption) (token *jwt.Token, err error) {\n\t// Create basic parser struct\n\tp := &fromRequestParser{req, extractor, nil, nil}\n\n\t// Handle options\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\t// Set defaults\n\tif p.claims == nil {\n\t\tp.claims = jwt.MapClaims{}\n\t}\n\tif p.parser == nil {\n\t\tp.parser = &jwt.Parser{}\n\t}\n\n\t// perform extract\n\ttokenString, err := p.extractor.ExtractToken(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// perform parse\n\treturn p.parser.ParseWithClaims(tokenString, p.claims, keyFunc)\n}\n\n// ParseFromRequest but with custom Claims type\n// DEPRECATED: use ParseFromRequest and the WithClaims option\nfunc ParseFromRequestWithClaims(req *http.Request, extractor Extractor, claims jwt.Claims, keyFunc jwt.Keyfunc) (token *jwt.Token, err error) {\n\treturn ParseFromRequest(req, extractor, keyFunc, WithClaims(claims))\n}\n\ntype fromRequestParser struct {\n\treq       *http.Request\n\textractor Extractor\n\tclaims    jwt.Claims\n\tparser    *jwt.Parser\n}\n\ntype ParseFromRequestOption func(*fromRequestParser)\n\n// Parse with custom claims\nfunc WithClaims(claims jwt.Claims) ParseFromRequestOption {\n\treturn func(p *fromRequestParser) {\n\t\tp.claims = claims\n\t}\n}\n\n// Parse using a custom parser\nfunc WithParser(parser *jwt.Parser) ParseFromRequestOption {\n\treturn func(p *fromRequestParser) {\n\t\tp.parser = parser\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/request/request_test.go",
    "content": "package request\n\nimport (\n\t\"fmt\"\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"github.com/dgrijalva/jwt-go/test\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testing\"\n)\n\nvar requestTestData = []struct {\n\tname      string\n\tclaims    jwt.MapClaims\n\textractor Extractor\n\theaders   map[string]string\n\tquery     url.Values\n\tvalid     bool\n}{\n\t{\n\t\t\"authorization bearer token\",\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tAuthorizationHeaderExtractor,\n\t\tmap[string]string{\"Authorization\": \"Bearer %v\"},\n\t\turl.Values{},\n\t\ttrue,\n\t},\n\t{\n\t\t\"oauth bearer token - header\",\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tOAuth2Extractor,\n\t\tmap[string]string{\"Authorization\": \"Bearer %v\"},\n\t\turl.Values{},\n\t\ttrue,\n\t},\n\t{\n\t\t\"oauth bearer token - url\",\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tOAuth2Extractor,\n\t\tmap[string]string{},\n\t\turl.Values{\"access_token\": {\"%v\"}},\n\t\ttrue,\n\t},\n\t{\n\t\t\"url token\",\n\t\tjwt.MapClaims{\"foo\": \"bar\"},\n\t\tArgumentExtractor{\"token\"},\n\t\tmap[string]string{},\n\t\turl.Values{\"token\": {\"%v\"}},\n\t\ttrue,\n\t},\n}\n\nfunc TestParseRequest(t *testing.T) {\n\t// load keys from disk\n\tprivateKey := test.LoadRSAPrivateKeyFromDisk(\"../test/sample_key\")\n\tpublicKey := test.LoadRSAPublicKeyFromDisk(\"../test/sample_key.pub\")\n\tkeyfunc := func(*jwt.Token) (interface{}, error) {\n\t\treturn publicKey, nil\n\t}\n\n\t// Bearer token request\n\tfor _, data := range requestTestData {\n\t\t// Make token from claims\n\t\ttokenString := test.MakeSampleToken(data.claims, privateKey)\n\n\t\t// Make query string\n\t\tfor k, vv := range data.query {\n\t\t\tfor i, v := range vv {\n\t\t\t\tif strings.Contains(v, \"%v\") {\n\t\t\t\t\tdata.query[k][i] = fmt.Sprintf(v, tokenString)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Make request from test struct\n\t\tr, _ := http.NewRequest(\"GET\", fmt.Sprintf(\"/?%v\", data.query.Encode()), nil)\n\t\tfor k, v := range data.headers {\n\t\t\tif strings.Contains(v, \"%v\") {\n\t\t\t\tr.Header.Set(k, fmt.Sprintf(v, tokenString))\n\t\t\t} else {\n\t\t\t\tr.Header.Set(k, tokenString)\n\t\t\t}\n\t\t}\n\t\ttoken, err := ParseFromRequestWithClaims(r, data.extractor, jwt.MapClaims{}, keyfunc)\n\n\t\tif token == nil {\n\t\t\tt.Errorf(\"[%v] Token was not found: %v\", data.name, err)\n\t\t\tcontinue\n\t\t}\n\t\tif !reflect.DeepEqual(data.claims, token.Claims) {\n\t\t\tt.Errorf(\"[%v] Claims mismatch. Expecting: %v  Got: %v\", data.name, data.claims, token.Claims)\n\t\t}\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying token: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid token passed validation\", data.name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/rsa.go",
    "content": "package jwt\n\nimport (\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n)\n\n// Implements the RSA family of signing methods signing methods\n// Expects *rsa.PrivateKey for signing and *rsa.PublicKey for validation\ntype SigningMethodRSA struct {\n\tName string\n\tHash crypto.Hash\n}\n\n// Specific instances for RS256 and company\nvar (\n\tSigningMethodRS256 *SigningMethodRSA\n\tSigningMethodRS384 *SigningMethodRSA\n\tSigningMethodRS512 *SigningMethodRSA\n)\n\nfunc init() {\n\t// RS256\n\tSigningMethodRS256 = &SigningMethodRSA{\"RS256\", crypto.SHA256}\n\tRegisterSigningMethod(SigningMethodRS256.Alg(), func() SigningMethod {\n\t\treturn SigningMethodRS256\n\t})\n\n\t// RS384\n\tSigningMethodRS384 = &SigningMethodRSA{\"RS384\", crypto.SHA384}\n\tRegisterSigningMethod(SigningMethodRS384.Alg(), func() SigningMethod {\n\t\treturn SigningMethodRS384\n\t})\n\n\t// RS512\n\tSigningMethodRS512 = &SigningMethodRSA{\"RS512\", crypto.SHA512}\n\tRegisterSigningMethod(SigningMethodRS512.Alg(), func() SigningMethod {\n\t\treturn SigningMethodRS512\n\t})\n}\n\nfunc (m *SigningMethodRSA) Alg() string {\n\treturn m.Name\n}\n\n// Implements the Verify method from SigningMethod\n// For this signing method, must be an *rsa.PublicKey structure.\nfunc (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error {\n\tvar err error\n\n\t// Decode the signature\n\tvar sig []byte\n\tif sig, err = DecodeSegment(signature); err != nil {\n\t\treturn err\n\t}\n\n\tvar rsaKey *rsa.PublicKey\n\tvar ok bool\n\n\tif rsaKey, ok = key.(*rsa.PublicKey); !ok {\n\t\treturn ErrInvalidKeyType\n\t}\n\n\t// Create hasher\n\tif !m.Hash.Available() {\n\t\treturn ErrHashUnavailable\n\t}\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\t// Verify the signature\n\treturn rsa.VerifyPKCS1v15(rsaKey, m.Hash, hasher.Sum(nil), sig)\n}\n\n// Implements the Sign method from SigningMethod\n// For this signing method, must be an *rsa.PrivateKey structure.\nfunc (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) {\n\tvar rsaKey *rsa.PrivateKey\n\tvar ok bool\n\n\t// Validate type of key\n\tif rsaKey, ok = key.(*rsa.PrivateKey); !ok {\n\t\treturn \"\", ErrInvalidKey\n\t}\n\n\t// Create the hasher\n\tif !m.Hash.Available() {\n\t\treturn \"\", ErrHashUnavailable\n\t}\n\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\t// Sign the string and return the encoded bytes\n\tif sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil)); err == nil {\n\t\treturn EncodeSegment(sigBytes), nil\n\t} else {\n\t\treturn \"\", err\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go",
    "content": "// +build go1.4\n\npackage jwt\n\nimport (\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n)\n\n// Implements the RSAPSS family of signing methods signing methods\ntype SigningMethodRSAPSS struct {\n\t*SigningMethodRSA\n\tOptions *rsa.PSSOptions\n}\n\n// Specific instances for RS/PS and company\nvar (\n\tSigningMethodPS256 *SigningMethodRSAPSS\n\tSigningMethodPS384 *SigningMethodRSAPSS\n\tSigningMethodPS512 *SigningMethodRSAPSS\n)\n\nfunc init() {\n\t// PS256\n\tSigningMethodPS256 = &SigningMethodRSAPSS{\n\t\t&SigningMethodRSA{\n\t\t\tName: \"PS256\",\n\t\t\tHash: crypto.SHA256,\n\t\t},\n\t\t&rsa.PSSOptions{\n\t\t\tSaltLength: rsa.PSSSaltLengthAuto,\n\t\t\tHash:       crypto.SHA256,\n\t\t},\n\t}\n\tRegisterSigningMethod(SigningMethodPS256.Alg(), func() SigningMethod {\n\t\treturn SigningMethodPS256\n\t})\n\n\t// PS384\n\tSigningMethodPS384 = &SigningMethodRSAPSS{\n\t\t&SigningMethodRSA{\n\t\t\tName: \"PS384\",\n\t\t\tHash: crypto.SHA384,\n\t\t},\n\t\t&rsa.PSSOptions{\n\t\t\tSaltLength: rsa.PSSSaltLengthAuto,\n\t\t\tHash:       crypto.SHA384,\n\t\t},\n\t}\n\tRegisterSigningMethod(SigningMethodPS384.Alg(), func() SigningMethod {\n\t\treturn SigningMethodPS384\n\t})\n\n\t// PS512\n\tSigningMethodPS512 = &SigningMethodRSAPSS{\n\t\t&SigningMethodRSA{\n\t\t\tName: \"PS512\",\n\t\t\tHash: crypto.SHA512,\n\t\t},\n\t\t&rsa.PSSOptions{\n\t\t\tSaltLength: rsa.PSSSaltLengthAuto,\n\t\t\tHash:       crypto.SHA512,\n\t\t},\n\t}\n\tRegisterSigningMethod(SigningMethodPS512.Alg(), func() SigningMethod {\n\t\treturn SigningMethodPS512\n\t})\n}\n\n// Implements the Verify method from SigningMethod\n// For this verify method, key must be an rsa.PublicKey struct\nfunc (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error {\n\tvar err error\n\n\t// Decode the signature\n\tvar sig []byte\n\tif sig, err = DecodeSegment(signature); err != nil {\n\t\treturn err\n\t}\n\n\tvar rsaKey *rsa.PublicKey\n\tswitch k := key.(type) {\n\tcase *rsa.PublicKey:\n\t\trsaKey = k\n\tdefault:\n\t\treturn ErrInvalidKey\n\t}\n\n\t// Create hasher\n\tif !m.Hash.Available() {\n\t\treturn ErrHashUnavailable\n\t}\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\treturn rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, m.Options)\n}\n\n// Implements the Sign method from SigningMethod\n// For this signing method, key must be an rsa.PrivateKey struct\nfunc (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) {\n\tvar rsaKey *rsa.PrivateKey\n\n\tswitch k := key.(type) {\n\tcase *rsa.PrivateKey:\n\t\trsaKey = k\n\tdefault:\n\t\treturn \"\", ErrInvalidKeyType\n\t}\n\n\t// Create the hasher\n\tif !m.Hash.Available() {\n\t\treturn \"\", ErrHashUnavailable\n\t}\n\n\thasher := m.Hash.New()\n\thasher.Write([]byte(signingString))\n\n\t// Sign the string and return the encoded bytes\n\tif sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil {\n\t\treturn EncodeSegment(sigBytes), nil\n\t} else {\n\t\treturn \"\", err\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/rsa_pss_test.go",
    "content": "// +build go1.4\n\npackage jwt_test\n\nimport (\n\t\"crypto/rsa\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/dgrijalva/jwt-go\"\n)\n\nvar rsaPSSTestData = []struct {\n\tname        string\n\ttokenString string\n\talg         string\n\tclaims      map[string]interface{}\n\tvalid       bool\n}{\n\t{\n\t\t\"Basic PS256\",\n\t\t\"eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9w\",\n\t\t\"PS256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic PS384\",\n\t\t\"eyJhbGciOiJQUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.w7-qqgj97gK4fJsq_DCqdYQiylJjzWONvD0qWWWhqEOFk2P1eDULPnqHRnjgTXoO4HAw4YIWCsZPet7nR3Xxq4ZhMqvKW8b7KlfRTb9cH8zqFvzMmybQ4jv2hKc3bXYqVow3AoR7hN_CWXI3Dv6Kd2X5xhtxRHI6IL39oTVDUQ74LACe-9t4c3QRPuj6Pq1H4FAT2E2kW_0KOc6EQhCLWEhm2Z2__OZskDC8AiPpP8Kv4k2vB7l0IKQu8Pr4RcNBlqJdq8dA5D3hk5TLxP8V5nG1Ib80MOMMqoS3FQvSLyolFX-R_jZ3-zfq6Ebsqr0yEb0AH2CfsECF7935Pa0FKQ\",\n\t\t\"PS384\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic PS512\",\n\t\t\"eyJhbGciOiJQUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.GX1HWGzFaJevuSLavqqFYaW8_TpvcjQ8KfC5fXiSDzSiT9UD9nB_ikSmDNyDILNdtjZLSvVKfXxZJqCfefxAtiozEDDdJthZ-F0uO4SPFHlGiXszvKeodh7BuTWRI2wL9-ZO4mFa8nq3GMeQAfo9cx11i7nfN8n2YNQ9SHGovG7_T_AvaMZB_jT6jkDHpwGR9mz7x1sycckEo6teLdHRnH_ZdlHlxqknmyTu8Odr5Xh0sJFOL8BepWbbvIIn-P161rRHHiDWFv6nhlHwZnVzjx7HQrWSGb6-s2cdLie9QL_8XaMcUpjLkfOMKkDOfHo6AvpL7Jbwi83Z2ZTHjJWB-A\",\n\t\t\"PS512\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"basic PS256 invalid: foo => bar\",\n\t\t\"eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.PPG4xyDVY8ffp4CcxofNmsTDXsrVG2npdQuibLhJbv4ClyPTUtR5giNSvuxo03kB6I8VXVr0Y9X7UxhJVEoJOmULAwRWaUsDnIewQa101cVhMa6iR8X37kfFoiZ6NkS-c7henVkkQWu2HtotkEtQvN5hFlk8IevXXPmvZlhQhwzB1sGzGYnoi1zOfuL98d3BIjUjtlwii5w6gYG2AEEzp7HnHCsb3jIwUPdq86Oe6hIFjtBwduIK90ca4UqzARpcfwxHwVLMpatKask00AgGVI0ysdk0BLMjmLutquD03XbThHScC2C2_Pp4cHWgMzvbgLU2RYYZcZRKr46QeNgz9W\",\n\t\t\"PS256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\tfalse,\n\t},\n}\n\nfunc TestRSAPSSVerify(t *testing.T) {\n\tvar err error\n\n\tkey, _ := ioutil.ReadFile(\"test/sample_key.pub\")\n\tvar rsaPSSKey *rsa.PublicKey\n\tif rsaPSSKey, err = jwt.ParseRSAPublicKeyFromPEM(key); err != nil {\n\t\tt.Errorf(\"Unable to parse RSA public key: %v\", err)\n\t}\n\n\tfor _, data := range rsaPSSTestData {\n\t\tparts := strings.Split(data.tokenString, \".\")\n\n\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\terr := method.Verify(strings.Join(parts[0:2], \".\"), parts[2], rsaPSSKey)\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying key: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid key passed validation\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestRSAPSSSign(t *testing.T) {\n\tvar err error\n\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tvar rsaPSSKey *rsa.PrivateKey\n\tif rsaPSSKey, err = jwt.ParseRSAPrivateKeyFromPEM(key); err != nil {\n\t\tt.Errorf(\"Unable to parse RSA private key: %v\", err)\n\t}\n\n\tfor _, data := range rsaPSSTestData {\n\t\tif data.valid {\n\t\t\tparts := strings.Split(data.tokenString, \".\")\n\t\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\t\tsig, err := method.Sign(strings.Join(parts[0:2], \".\"), rsaPSSKey)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"[%v] Error signing token: %v\", data.name, err)\n\t\t\t}\n\t\t\tif sig == parts[2] {\n\t\t\t\tt.Errorf(\"[%v] Signatures shouldn't match\\nnew:\\n%v\\noriginal:\\n%v\", data.name, sig, parts[2])\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/rsa_test.go",
    "content": "package jwt_test\n\nimport (\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"io/ioutil\"\n\t\"strings\"\n\t\"testing\"\n)\n\nvar rsaTestData = []struct {\n\tname        string\n\ttokenString string\n\talg         string\n\tclaims      map[string]interface{}\n\tvalid       bool\n}{\n\t{\n\t\t\"Basic RS256\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\t\"RS256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic RS384\",\n\t\t\"eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.W-jEzRfBigtCWsinvVVuldiuilzVdU5ty0MvpLaSaqK9PlAWWlDQ1VIQ_qSKzwL5IXaZkvZFJXT3yL3n7OUVu7zCNJzdwznbC8Z-b0z2lYvcklJYi2VOFRcGbJtXUqgjk2oGsiqUMUMOLP70TTefkpsgqDxbRh9CDUfpOJgW-dU7cmgaoswe3wjUAUi6B6G2YEaiuXC0XScQYSYVKIzgKXJV8Zw-7AN_DBUI4GkTpsvQ9fVVjZM9csQiEXhYekyrKu1nu_POpQonGd8yqkIyXPECNmmqH5jH4sFiF67XhD7_JpkvLziBpI-uh86evBUadmHhb9Otqw3uV3NTaXLzJw\",\n\t\t\"RS384\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"Basic RS512\",\n\t\t\"eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.zBlLlmRrUxx4SJPUbV37Q1joRcI9EW13grnKduK3wtYKmDXbgDpF1cZ6B-2Jsm5RB8REmMiLpGms-EjXhgnyh2TSHE-9W2gA_jvshegLWtwRVDX40ODSkTb7OVuaWgiy9y7llvcknFBTIg-FnVPVpXMmeV_pvwQyhaz1SSwSPrDyxEmksz1hq7YONXhXPpGaNbMMeDTNP_1oj8DZaqTIL9TwV8_1wb2Odt_Fy58Ke2RVFijsOLdnyEAjt2n9Mxihu9i3PhNBkkxa2GbnXBfq3kzvZ_xxGGopLdHhJjcGWXO-NiwI9_tiu14NRv4L2xC0ItD9Yz68v2ZIZEp_DuzwRQ\",\n\t\t\"RS512\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\ttrue,\n\t},\n\t{\n\t\t\"basic invalid: foo => bar\",\n\t\t\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg\",\n\t\t\"RS256\",\n\t\tmap[string]interface{}{\"foo\": \"bar\"},\n\t\tfalse,\n\t},\n}\n\nfunc TestRSAVerify(t *testing.T) {\n\tkeyData, _ := ioutil.ReadFile(\"test/sample_key.pub\")\n\tkey, _ := jwt.ParseRSAPublicKeyFromPEM(keyData)\n\n\tfor _, data := range rsaTestData {\n\t\tparts := strings.Split(data.tokenString, \".\")\n\n\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\terr := method.Verify(strings.Join(parts[0:2], \".\"), parts[2], key)\n\t\tif data.valid && err != nil {\n\t\t\tt.Errorf(\"[%v] Error while verifying key: %v\", data.name, err)\n\t\t}\n\t\tif !data.valid && err == nil {\n\t\t\tt.Errorf(\"[%v] Invalid key passed validation\", data.name)\n\t\t}\n\t}\n}\n\nfunc TestRSASign(t *testing.T) {\n\tkeyData, _ := ioutil.ReadFile(\"test/sample_key\")\n\tkey, _ := jwt.ParseRSAPrivateKeyFromPEM(keyData)\n\n\tfor _, data := range rsaTestData {\n\t\tif data.valid {\n\t\t\tparts := strings.Split(data.tokenString, \".\")\n\t\t\tmethod := jwt.GetSigningMethod(data.alg)\n\t\t\tsig, err := method.Sign(strings.Join(parts[0:2], \".\"), key)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"[%v] Error signing token: %v\", data.name, err)\n\t\t\t}\n\t\t\tif sig != parts[2] {\n\t\t\t\tt.Errorf(\"[%v] Incorrect signature.\\nwas:\\n%v\\nexpecting:\\n%v\", data.name, sig, parts[2])\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestRSAVerifyWithPreParsedPrivateKey(t *testing.T) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key.pub\")\n\tparsedKey, err := jwt.ParseRSAPublicKeyFromPEM(key)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\ttestData := rsaTestData[0]\n\tparts := strings.Split(testData.tokenString, \".\")\n\terr = jwt.SigningMethodRS256.Verify(strings.Join(parts[0:2], \".\"), parts[2], parsedKey)\n\tif err != nil {\n\t\tt.Errorf(\"[%v] Error while verifying key: %v\", testData.name, err)\n\t}\n}\n\nfunc TestRSAWithPreParsedPrivateKey(t *testing.T) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tparsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\ttestData := rsaTestData[0]\n\tparts := strings.Split(testData.tokenString, \".\")\n\tsig, err := jwt.SigningMethodRS256.Sign(strings.Join(parts[0:2], \".\"), parsedKey)\n\tif err != nil {\n\t\tt.Errorf(\"[%v] Error signing token: %v\", testData.name, err)\n\t}\n\tif sig != parts[2] {\n\t\tt.Errorf(\"[%v] Incorrect signature.\\nwas:\\n%v\\nexpecting:\\n%v\", testData.name, sig, parts[2])\n\t}\n}\n\nfunc TestRSAKeyParsing(t *testing.T) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tsecureKey, _ := ioutil.ReadFile(\"test/privateSecure.pem\")\n\tpubKey, _ := ioutil.ReadFile(\"test/sample_key.pub\")\n\tbadKey := []byte(\"All your base are belong to key\")\n\n\t// Test parsePrivateKey\n\tif _, e := jwt.ParseRSAPrivateKeyFromPEM(key); e != nil {\n\t\tt.Errorf(\"Failed to parse valid private key: %v\", e)\n\t}\n\n\tif k, e := jwt.ParseRSAPrivateKeyFromPEM(pubKey); e == nil {\n\t\tt.Errorf(\"Parsed public key as valid private key: %v\", k)\n\t}\n\n\tif k, e := jwt.ParseRSAPrivateKeyFromPEM(badKey); e == nil {\n\t\tt.Errorf(\"Parsed invalid key as valid private key: %v\", k)\n\t}\n\n\tif _, e := jwt.ParseRSAPrivateKeyFromPEMWithPassword(secureKey, \"password\"); e != nil {\n\t\tt.Errorf(\"Failed to parse valid private key with password: %v\", e)\n\t}\n\n\tif k, e := jwt.ParseRSAPrivateKeyFromPEMWithPassword(secureKey, \"123132\"); e == nil {\n\t\tt.Errorf(\"Parsed private key with invalid password %v\", k)\n\t}\n\n\t// Test parsePublicKey\n\tif _, e := jwt.ParseRSAPublicKeyFromPEM(pubKey); e != nil {\n\t\tt.Errorf(\"Failed to parse valid public key: %v\", e)\n\t}\n\n\tif k, e := jwt.ParseRSAPublicKeyFromPEM(key); e == nil {\n\t\tt.Errorf(\"Parsed private key as valid public key: %v\", k)\n\t}\n\n\tif k, e := jwt.ParseRSAPublicKeyFromPEM(badKey); e == nil {\n\t\tt.Errorf(\"Parsed invalid key as valid private key: %v\", k)\n\t}\n\n}\n\nfunc BenchmarkRS256Signing(b *testing.B) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tparsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\n\tbenchmarkSigning(b, jwt.SigningMethodRS256, parsedKey)\n}\n\nfunc BenchmarkRS384Signing(b *testing.B) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tparsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\n\tbenchmarkSigning(b, jwt.SigningMethodRS384, parsedKey)\n}\n\nfunc BenchmarkRS512Signing(b *testing.B) {\n\tkey, _ := ioutil.ReadFile(\"test/sample_key\")\n\tparsedKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\n\tbenchmarkSigning(b, jwt.SigningMethodRS512, parsedKey)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go",
    "content": "package jwt\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"errors\"\n)\n\nvar (\n\tErrKeyMustBePEMEncoded = errors.New(\"Invalid Key: Key must be PEM encoded PKCS1 or PKCS8 private key\")\n\tErrNotRSAPrivateKey    = errors.New(\"Key is not a valid RSA private key\")\n\tErrNotRSAPublicKey     = errors.New(\"Key is not a valid RSA public key\")\n)\n\n// Parse PEM encoded PKCS1 or PKCS8 private key\nfunc ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) {\n\tvar err error\n\n\t// Parse PEM block\n\tvar block *pem.Block\n\tif block, _ = pem.Decode(key); block == nil {\n\t\treturn nil, ErrKeyMustBePEMEncoded\n\t}\n\n\tvar parsedKey interface{}\n\tif parsedKey, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil {\n\t\tif parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar pkey *rsa.PrivateKey\n\tvar ok bool\n\tif pkey, ok = parsedKey.(*rsa.PrivateKey); !ok {\n\t\treturn nil, ErrNotRSAPrivateKey\n\t}\n\n\treturn pkey, nil\n}\n\n// Parse PEM encoded PKCS1 or PKCS8 private key protected with password\nfunc ParseRSAPrivateKeyFromPEMWithPassword(key []byte, password string) (*rsa.PrivateKey, error) {\n\tvar err error\n\n\t// Parse PEM block\n\tvar block *pem.Block\n\tif block, _ = pem.Decode(key); block == nil {\n\t\treturn nil, ErrKeyMustBePEMEncoded\n\t}\n\n\tvar parsedKey interface{}\n\n\tvar blockDecrypted []byte\n\tif blockDecrypted, err = x509.DecryptPEMBlock(block, []byte(password)); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif parsedKey, err = x509.ParsePKCS1PrivateKey(blockDecrypted); err != nil {\n\t\tif parsedKey, err = x509.ParsePKCS8PrivateKey(blockDecrypted); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar pkey *rsa.PrivateKey\n\tvar ok bool\n\tif pkey, ok = parsedKey.(*rsa.PrivateKey); !ok {\n\t\treturn nil, ErrNotRSAPrivateKey\n\t}\n\n\treturn pkey, nil\n}\n\n// Parse PEM encoded PKCS1 or PKCS8 public key\nfunc ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) {\n\tvar err error\n\n\t// Parse PEM block\n\tvar block *pem.Block\n\tif block, _ = pem.Decode(key); block == nil {\n\t\treturn nil, ErrKeyMustBePEMEncoded\n\t}\n\n\t// Parse the key\n\tvar parsedKey interface{}\n\tif parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {\n\t\tif cert, err := x509.ParseCertificate(block.Bytes); err == nil {\n\t\t\tparsedKey = cert.PublicKey\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar pkey *rsa.PublicKey\n\tvar ok bool\n\tif pkey, ok = parsedKey.(*rsa.PublicKey); !ok {\n\t\treturn nil, ErrNotRSAPublicKey\n\t}\n\n\treturn pkey, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/signing_method.go",
    "content": "package jwt\n\nimport (\n\t\"sync\"\n)\n\nvar signingMethods = map[string]func() SigningMethod{}\nvar signingMethodLock = new(sync.RWMutex)\n\n// Implement SigningMethod to add new methods for signing or verifying tokens.\ntype SigningMethod interface {\n\tVerify(signingString, signature string, key interface{}) error // Returns nil if signature is valid\n\tSign(signingString string, key interface{}) (string, error)    // Returns encoded signature or error\n\tAlg() string                                                   // returns the alg identifier for this method (example: 'HS256')\n}\n\n// Register the \"alg\" name and a factory function for signing method.\n// This is typically done during init() in the method's implementation\nfunc RegisterSigningMethod(alg string, f func() SigningMethod) {\n\tsigningMethodLock.Lock()\n\tdefer signingMethodLock.Unlock()\n\n\tsigningMethods[alg] = f\n}\n\n// Get a signing method from an \"alg\" string\nfunc GetSigningMethod(alg string) (method SigningMethod) {\n\tsigningMethodLock.RLock()\n\tdefer signingMethodLock.RUnlock()\n\n\tif methodF, ok := signingMethods[alg]; ok {\n\t\tmethod = methodF()\n\t}\n\treturn\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec256-private.pem",
    "content": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIAh5qA3rmqQQuu0vbKV/+zouz/y/Iy2pLpIcWUSyImSwoAoGCCqGSM49\nAwEHoUQDQgAEYD54V/vp+54P9DXarYqx4MPcm+HKRIQzNasYSoRQHQ/6S6Ps8tpM\ncT+KvIIC8W/e9k0W7Cm72M1P9jU7SLf/vg==\n-----END EC PRIVATE KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec256-public.pem",
    "content": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYD54V/vp+54P9DXarYqx4MPcm+HK\nRIQzNasYSoRQHQ/6S6Ps8tpMcT+KvIIC8W/e9k0W7Cm72M1P9jU7SLf/vg==\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec384-private.pem",
    "content": "-----BEGIN EC PRIVATE KEY-----\nMIGkAgEBBDCaCvMHKhcG/qT7xsNLYnDT7sE/D+TtWIol1ROdaK1a564vx5pHbsRy\nSEKcIxISi1igBwYFK4EEACKhZANiAATYa7rJaU7feLMqrAx6adZFNQOpaUH/Uylb\nZLriOLON5YFVwtVUpO1FfEXZUIQpptRPtc5ixIPY658yhBSb6irfIJUSP9aYTflJ\nGKk/mDkK4t8mWBzhiD5B6jg9cEGhGgA=\n-----END EC PRIVATE KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec384-public.pem",
    "content": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2Gu6yWlO33izKqwMemnWRTUDqWlB/1Mp\nW2S64jizjeWBVcLVVKTtRXxF2VCEKabUT7XOYsSD2OufMoQUm+oq3yCVEj/WmE35\nSRipP5g5CuLfJlgc4Yg+Qeo4PXBBoRoA\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec512-private.pem",
    "content": "-----BEGIN EC PRIVATE KEY-----\nMIHcAgEBBEIB0pE4uFaWRx7t03BsYlYvF1YvKaBGyvoakxnodm9ou0R9wC+sJAjH\nQZZJikOg4SwNqgQ/hyrOuDK2oAVHhgVGcYmgBwYFK4EEACOhgYkDgYYABAAJXIuw\n12MUzpHggia9POBFYXSxaOGKGbMjIyDI+6q7wi7LMw3HgbaOmgIqFG72o8JBQwYN\n4IbXHf+f86CRY1AA2wHzbHvt6IhkCXTNxBEffa1yMUgu8n9cKKF2iLgyQKcKqW33\n8fGOw/n3Rm2Yd/EB56u2rnD29qS+nOM9eGS+gy39OQ==\n-----END EC PRIVATE KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/ec512-public.pem",
    "content": "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQACVyLsNdjFM6R4IImvTzgRWF0sWjh\nihmzIyMgyPuqu8IuyzMNx4G2jpoCKhRu9qPCQUMGDeCG1x3/n/OgkWNQANsB82x7\n7eiIZAl0zcQRH32tcjFILvJ/XCihdoi4MkCnCqlt9/HxjsP590ZtmHfxAeertq5w\n9vakvpzjPXhkvoMt/Tk=\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/helpers.go",
    "content": "package test\n\nimport (\n\t\"crypto/rsa\"\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"io/ioutil\"\n)\n\nfunc LoadRSAPrivateKeyFromDisk(location string) *rsa.PrivateKey {\n\tkeyData, e := ioutil.ReadFile(location)\n\tif e != nil {\n\t\tpanic(e.Error())\n\t}\n\tkey, e := jwt.ParseRSAPrivateKeyFromPEM(keyData)\n\tif e != nil {\n\t\tpanic(e.Error())\n\t}\n\treturn key\n}\n\nfunc LoadRSAPublicKeyFromDisk(location string) *rsa.PublicKey {\n\tkeyData, e := ioutil.ReadFile(location)\n\tif e != nil {\n\t\tpanic(e.Error())\n\t}\n\tkey, e := jwt.ParseRSAPublicKeyFromPEM(keyData)\n\tif e != nil {\n\t\tpanic(e.Error())\n\t}\n\treturn key\n}\n\nfunc MakeSampleToken(c jwt.Claims, key interface{}) string {\n\ttoken := jwt.NewWithClaims(jwt.SigningMethodRS256, c)\n\ts, e := token.SignedString(key)\n\n\tif e != nil {\n\t\tpanic(e.Error())\n\t}\n\n\treturn s\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/hmacTestKey",
    "content": "\u0003#5K+\u000f~\u0006ew{Z(T(\u000fP.Z\u0006Gwb=\"=.!r\u0005.O\b͚gЀ"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/privateSecure.pem",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: DES-EDE3-CBC,7487BB8910A3741B\n\niL7m48mbFSIy1Y5xbXWwPTR07ufxu7o+myGUE+AdDeWWISkd5W6Gl44oX/jgXldS\nmL/ntUXoZzQz2WKEYLwssAtSTGF+QgSIMvV5faiP+pLYvWgk0oVr42po00CvADFL\neDAJC7LgagYifS1l4EAK4MY8RGCHyJWEN5JAr0fc/Haa3WfWZ009kOWAp8MDuYxB\nhQlCKUmnUpXCp5c6jwbjlyinLj8XwzzjZ/rVRsY+t2Z0Vcd5qzR5BV8IJCqbG5Py\nz15/EFgMG2N2eYMsiEKgdXeKW2H5XIoWyun/3pBigWaDnTtiWSt9kz2MplqYfIT7\nF+0XE3gdDGalAeN3YwFPHCkxxBmcI+s6lQG9INmf2/gkJQ+MOZBVXKmGLv6Qis3l\n0eyUz1yZvNzf0zlcUBjiPulLF3peThHMEzhSsATfPomyg5NJ0X7ttd0ybnq+sPe4\nqg2OJ8qNhYrqnx7Xlvj61+B2NAZVHvIioma1FzqX8DxQYrnR5S6DJExDqvzNxEz6\n5VPQlH2Ig4hTvNzla84WgJ6USc/2SS4ehCReiNvfeNG9sPZKQnr/Ss8KPIYsKGcC\nPz/vEqbWDmJwHb7KixCQKPt1EbD+/uf0YnhskOWM15YiFbYAOZKJ5rcbz2Zu66vg\nGAmqcBsHeFR3s/bObEzjxOmMfSr1vzvr4ActNJWVtfNKZNobSehZiMSHL54AXAZW\nYj48pwTbf7b1sbF0FeCuwTFiYxM+yiZVO5ciYOfmo4HUg53PjknKpcKtEFSj02P1\n8JRBSb++V0IeMDyZLl12zgURDsvualbJMMBBR8emIpF13h0qdyah431gDhHGBnnC\nJ5UDGq21/flFjzz0x/Okjwf7mPK5pcmF+uW7AxtHqws6m93yD5+RFmfZ8cb/8CL8\njmsQslj+OIE64ykkRoJWpNBKyQjL3CnPnLmAB6TQKxegR94C7/hP1FvRW+W0AgZy\ng2QczKQU3KBQP18Ui1HTbkOUJT0Lsy4FnmJFCB/STPRo6NlJiATKHq/cqHWQUvZd\nd4oTMb1opKfs7AI9wiJBuskpGAECdRnVduml3dT4p//3BiP6K9ImWMSJeFpjFAFs\nAbBMKyitMs0Fyn9AJRPl23TKVQ3cYeSTxus4wLmx5ECSsHRV6g06nYjBp4GWEqSX\nRVclXF3zmy3b1+O5s2chJN6TrypzYSEYXJb1vvQLK0lNXqwxZAFV7Roi6xSG0fSY\nEAtdUifLonu43EkrLh55KEwkXdVV8xneUjh+TF8VgJKMnqDFfeHFdmN53YYh3n3F\nkpYSmVLRzQmLbH9dY+7kqvnsQm8y76vjug3p4IbEbHp/fNGf+gv7KDng1HyCl9A+\nOw/Hlr0NqCAIhminScbRsZ4SgbRTRgGEYZXvyOtQa/uL6I8t2NR4W7ynispMs0QL\nRD61i3++bQXuTi4i8dg3yqIfe9S22NHSzZY/lAHAmmc3r5NrQ1TM1hsSxXawT5CU\nanWFjbH6YQ/QplkkAqZMpropWn6ZdNDg/+BUjukDs0HZrbdGy846WxQUvE7G2bAw\nIFQ1SymBZBtfnZXhfAXOHoWh017p6HsIkb2xmFrigMj7Jh10VVhdWg==\n-----END RSA PRIVATE KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/sample_key",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA4f5wg5l2hKsTeNem/V41fGnJm6gOdrj8ym3rFkEU/wT8RDtn\nSgFEZOQpHEgQ7JL38xUfU0Y3g6aYw9QT0hJ7mCpz9Er5qLaMXJwZxzHzAahlfA0i\ncqabvJOMvQtzD6uQv6wPEyZtDTWiQi9AXwBpHssPnpYGIn20ZZuNlX2BrClciHhC\nPUIIZOQn/MmqTD31jSyjoQoV7MhhMTATKJx2XrHhR+1DcKJzQBSTAGnpYVaqpsAR\nap+nwRipr3nUTuxyGohBTSmjJ2usSeQXHI3bODIRe1AuTyHceAbewn8b462yEWKA\nRdpd9AjQW5SIVPfdsz5B6GlYQ5LdYKtznTuy7wIDAQABAoIBAQCwia1k7+2oZ2d3\nn6agCAbqIE1QXfCmh41ZqJHbOY3oRQG3X1wpcGH4Gk+O+zDVTV2JszdcOt7E5dAy\nMaomETAhRxB7hlIOnEN7WKm+dGNrKRvV0wDU5ReFMRHg31/Lnu8c+5BvGjZX+ky9\nPOIhFFYJqwCRlopGSUIxmVj5rSgtzk3iWOQXr+ah1bjEXvlxDOWkHN6YfpV5ThdE\nKdBIPGEVqa63r9n2h+qazKrtiRqJqGnOrHzOECYbRFYhexsNFz7YT02xdfSHn7gM\nIvabDDP/Qp0PjE1jdouiMaFHYnLBbgvlnZW9yuVf/rpXTUq/njxIXMmvmEyyvSDn\nFcFikB8pAoGBAPF77hK4m3/rdGT7X8a/gwvZ2R121aBcdPwEaUhvj/36dx596zvY\nmEOjrWfZhF083/nYWE2kVquj2wjs+otCLfifEEgXcVPTnEOPO9Zg3uNSL0nNQghj\nFuD3iGLTUBCtM66oTe0jLSslHe8gLGEQqyMzHOzYxNqibxcOZIe8Qt0NAoGBAO+U\nI5+XWjWEgDmvyC3TrOSf/KCGjtu0TSv30ipv27bDLMrpvPmD/5lpptTFwcxvVhCs\n2b+chCjlghFSWFbBULBrfci2FtliClOVMYrlNBdUSJhf3aYSG2Doe6Bgt1n2CpNn\n/iu37Y3NfemZBJA7hNl4dYe+f+uzM87cdQ214+jrAoGAXA0XxX8ll2+ToOLJsaNT\nOvNB9h9Uc5qK5X5w+7G7O998BN2PC/MWp8H+2fVqpXgNENpNXttkRm1hk1dych86\nEunfdPuqsX+as44oCyJGFHVBnWpm33eWQw9YqANRI+pCJzP08I5WK3osnPiwshd+\nhR54yjgfYhBFNI7B95PmEQkCgYBzFSz7h1+s34Ycr8SvxsOBWxymG5zaCsUbPsL0\n4aCgLScCHb9J+E86aVbbVFdglYa5Id7DPTL61ixhl7WZjujspeXZGSbmq0Kcnckb\nmDgqkLECiOJW2NHP/j0McAkDLL4tysF8TLDO8gvuvzNC+WQ6drO2ThrypLVZQ+ry\neBIPmwKBgEZxhqa0gVvHQG/7Od69KWj4eJP28kq13RhKay8JOoN0vPmspXJo1HY3\nCKuHRG+AP579dncdUnOMvfXOtkdM4vk0+hWASBQzM9xzVcztCa+koAugjVaLS9A+\n9uQoqEeVNTckxx0S2bYevRy7hGQmUJTyQm3j1zEUR5jpdbL83Fbq\n-----END RSA PRIVATE KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/test/sample_key.pub",
    "content": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4f5wg5l2hKsTeNem/V41\nfGnJm6gOdrj8ym3rFkEU/wT8RDtnSgFEZOQpHEgQ7JL38xUfU0Y3g6aYw9QT0hJ7\nmCpz9Er5qLaMXJwZxzHzAahlfA0icqabvJOMvQtzD6uQv6wPEyZtDTWiQi9AXwBp\nHssPnpYGIn20ZZuNlX2BrClciHhCPUIIZOQn/MmqTD31jSyjoQoV7MhhMTATKJx2\nXrHhR+1DcKJzQBSTAGnpYVaqpsARap+nwRipr3nUTuxyGohBTSmjJ2usSeQXHI3b\nODIRe1AuTyHceAbewn8b462yEWKARdpd9AjQW5SIVPfdsz5B6GlYQ5LdYKtznTuy\n7wIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/dgrijalva/jwt-go/token.go",
    "content": "package jwt\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"strings\"\n\t\"time\"\n)\n\n// TimeFunc provides the current time when parsing token to validate \"exp\" claim (expiration time).\n// You can override it to use another time value.  This is useful for testing or if your\n// server uses a different time zone than your tokens.\nvar TimeFunc = time.Now\n\n// Parse methods use this callback function to supply\n// the key for verification.  The function receives the parsed,\n// but unverified Token.  This allows you to use properties in the\n// Header of the token (such as `kid`) to identify which key to use.\ntype Keyfunc func(*Token) (interface{}, error)\n\n// A JWT Token.  Different fields will be used depending on whether you're\n// creating or parsing/verifying a token.\ntype Token struct {\n\tRaw       string                 // The raw token.  Populated when you Parse a token\n\tMethod    SigningMethod          // The signing method used or to be used\n\tHeader    map[string]interface{} // The first segment of the token\n\tClaims    Claims                 // The second segment of the token\n\tSignature string                 // The third segment of the token.  Populated when you Parse a token\n\tValid     bool                   // Is the token valid?  Populated when you Parse/Verify a token\n}\n\n// Create a new Token.  Takes a signing method\nfunc New(method SigningMethod) *Token {\n\treturn NewWithClaims(method, MapClaims{})\n}\n\nfunc NewWithClaims(method SigningMethod, claims Claims) *Token {\n\treturn &Token{\n\t\tHeader: map[string]interface{}{\n\t\t\t\"typ\": \"JWT\",\n\t\t\t\"alg\": method.Alg(),\n\t\t},\n\t\tClaims: claims,\n\t\tMethod: method,\n\t}\n}\n\n// Get the complete, signed token\nfunc (t *Token) SignedString(key interface{}) (string, error) {\n\tvar sig, sstr string\n\tvar err error\n\tif sstr, err = t.SigningString(); err != nil {\n\t\treturn \"\", err\n\t}\n\tif sig, err = t.Method.Sign(sstr, key); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.Join([]string{sstr, sig}, \".\"), nil\n}\n\n// Generate the signing string.  This is the\n// most expensive part of the whole deal.  Unless you\n// need this for something special, just go straight for\n// the SignedString.\nfunc (t *Token) SigningString() (string, error) {\n\tvar err error\n\tparts := make([]string, 2)\n\tfor i, _ := range parts {\n\t\tvar jsonValue []byte\n\t\tif i == 0 {\n\t\t\tif jsonValue, err = json.Marshal(t.Header); err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t} else {\n\t\t\tif jsonValue, err = json.Marshal(t.Claims); err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t}\n\n\t\tparts[i] = EncodeSegment(jsonValue)\n\t}\n\treturn strings.Join(parts, \".\"), nil\n}\n\n// Parse, validate, and return a token.\n// keyFunc will receive the parsed token and should return the key for validating.\n// If everything is kosher, err will be nil\nfunc Parse(tokenString string, keyFunc Keyfunc) (*Token, error) {\n\treturn new(Parser).Parse(tokenString, keyFunc)\n}\n\nfunc ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) {\n\treturn new(Parser).ParseWithClaims(tokenString, claims, keyFunc)\n}\n\n// Encode JWT specific base64url encoding with padding stripped\nfunc EncodeSegment(seg []byte) string {\n\treturn strings.TrimRight(base64.URLEncoding.EncodeToString(seg), \"=\")\n}\n\n// Decode JWT specific base64url encoding with padding stripped\nfunc DecodeSegment(seg string) ([]byte, error) {\n\tif l := len(seg) % 4; l > 0 {\n\t\tseg += strings.Repeat(\"=\", 4-l)\n\t}\n\n\treturn base64.URLEncoding.DecodeString(seg)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/.gitignore",
    "content": ".idea\n*.sw?\n.vscode\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.7.x\n  - 1.8.x\n  - 1.9.x\n\ninstall:\n  - go get -u golang.org/x/tools/cmd/goimports\n  - go get -u github.com/golang/lint/golint\n\nscript:\n  - go get -d -t ./...\n  - go vet ./...\n  - golint ./...\n  - go test ./...\n  - >\n    goimports -d -e ./ | grep '.*' && { echo; echo \"Aborting due to non-empty goimports output.\"; exit 1; } || :\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/CHANGELOG.md",
    "content": "# Changelog\n\n## v3.3.2 (2017-12-22)\n\n- Support to route trailing slashes on mounted sub-routers (#281)\n- middleware: new `ContentCharset` to check matching charsets. Thank you\n  @csucu for your community contribution!\n\n\n## v3.3.1 (2017-11-20)\n\n- middleware: new `AllowContentType` handler for explicit whitelist of accepted request Content-Types\n- middleware: new `SetHeader` handler for short-hand middleware to set a response header key/value\n- Minor bug fixes\n\n\n## v3.3.0 (2017-10-10)\n\n- New chi.RegisterMethod(method) to add support for custom HTTP methods, see _examples/custom-method for usage\n- Deprecated LINK and UNLINK methods from the default list, please use `chi.RegisterMethod(\"LINK\")` and `chi.RegisterMethod(\"UNLINK\")` in an `init()` function\n\n\n## v3.2.1 (2017-08-31)\n\n- Add new `Match(rctx *Context, method, path string) bool` method to `Routes` interface\n  and `Mux`. Match searches the mux's routing tree for a handler that matches the method/path\n- Add new `RouteMethod` to `*Context`\n- Add new `Routes` pointer to `*Context`\n- Add new `middleware.GetHead` to route missing HEAD requests to GET handler\n- Updated benchmarks (see README)\n\n\n## v3.1.5 (2017-08-02)\n\n- Setup golint and go vet for the project\n- As per golint, we've redefined `func ServerBaseContext(h http.Handler, baseCtx context.Context) http.Handler`\n  to `func ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler`\n\n\n## v3.1.0 (2017-07-10)\n\n- Fix a few minor issues after v3 release\n- Move `docgen` sub-pkg to https://github.com/go-chi/docgen\n- Move `render` sub-pkg to https://github.com/go-chi/render\n- Add new `URLFormat` handler to chi/middleware sub-pkg to make working with url mime \n  suffixes easier, ie. parsing `/articles/1.json` and `/articles/1.xml`. See comments in\n  https://github.com/go-chi/chi/blob/master/middleware/url_format.go for example usage.\n\n\n## v3.0.0 (2017-06-21)\n\n- Major update to chi library with many exciting updates, but also some *breaking changes*\n- URL parameter syntax changed from `/:id` to `/{id}` for even more flexible routing, such as\n  `/articles/{month}-{day}-{year}-{slug}`, `/articles/{id}`, and `/articles/{id}.{ext}` on the\n  same router\n- Support for regexp for routing patterns, in the form of `/{paramKey:regExp}` for example:\n  `r.Get(\"/articles/{name:[a-z]+}\", h)` and `chi.URLParam(r, \"name\")`\n- Add `Method` and `MethodFunc` to `chi.Router` to allow routing definitions such as\n  `r.Method(\"GET\", \"/\", h)` which provides a cleaner interface for custom handlers like\n  in `_examples/custom-handler`\n- Deprecating `mux#FileServer` helper function. Instead, we encourage users to create their\n  own using file handler with the stdlib, see `_examples/fileserver` for an example\n- Add support for LINK/UNLINK http methods via `r.Method()` and `r.MethodFunc()`\n- Moved the chi project to its own organization, to allow chi-related community packages to\n  be easily discovered and supported, at: https://github.com/go-chi\n- *NOTE:* please update your import paths to `\"github.com/go-chi/chi\"`\n- *NOTE:* chi v2 is still available at https://github.com/go-chi/chi/tree/v2\n\n\n## v2.1.0 (2017-03-30)\n\n- Minor improvements and update to the chi core library\n- Introduced a brand new `chi/render` sub-package to complete the story of building\n  APIs to offer a pattern for managing well-defined request / response payloads. Please\n  check out the updated `_examples/rest` example for how it works.\n- Added `MethodNotAllowed(h http.HandlerFunc)` to chi.Router interface\n\n\n## v2.0.0 (2017-01-06)\n\n- After many months of v2 being in an RC state with many companies and users running it in\n  production, the inclusion of some improvements to the middlewares, we are very pleased to\n  announce v2.0.0 of chi.\n\n\n## v2.0.0-rc1 (2016-07-26)\n\n- Huge update! chi v2 is a large refactor targetting Go 1.7+. As of Go 1.7, the popular\n  community `\"net/context\"` package has been included in the standard library as `\"context\"` and\n  utilized by `\"net/http\"` and `http.Request` to managing deadlines, cancelation signals and other\n  request-scoped values. We're very excited about the new context addition and are proud to\n  introduce chi v2, a minimal and powerful routing package for building large HTTP services,\n  with zero external dependencies. Chi focuses on idiomatic design and encourages the use of \n  stdlib HTTP handlers and middlwares.\n- chi v2 deprecates its `chi.Handler` interface and requires `http.Handler` or `http.HandlerFunc`\n- chi v2 stores URL routing parameters and patterns in the standard request context: `r.Context()`\n- chi v2 lower-level routing context is accessible by `chi.RouteContext(r.Context()) *chi.Context`,\n  which provides direct access to URL routing parameters, the routing path and the matching\n  routing patterns.\n- Users upgrading from chi v1 to v2, need to:\n  1. Update the old chi.Handler signature, `func(ctx context.Context, w http.ResponseWriter, r *http.Request)` to\n     the standard http.Handler: `func(w http.ResponseWriter, r *http.Request)`\n  2. Use `chi.URLParam(r *http.Request, paramKey string) string`\n     or `URLParamFromCtx(ctx context.Context, paramKey string) string` to access a url parameter value\n\n\n## v1.0.0 (2016-07-01)\n\n- Released chi v1 stable https://github.com/go-chi/chi/tree/v1.0.0 for Go 1.6 and older.\n\n\n## v0.9.0 (2016-03-31)\n\n- Reuse context objects via sync.Pool for zero-allocation routing [#33](https://github.com/go-chi/chi/pull/33)\n- BREAKING NOTE: due to subtle API changes, previously `chi.URLParams(ctx)[\"id\"]` used to access url parameters\n  has changed to: `chi.URLParam(ctx, \"id\")`\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/CONTRIBUTING.md",
    "content": "# Contributing\n\n## Prerequisites\n\n1. [Install Go][go-install].\n2. Download the sources and switch the working directory:\n\n    ```bash\n    go get -u -d github.com/go-chi/chi\n    cd $GOPATH/src/github.com/go-chi/chi\n    ```\n\n## Submitting a Pull Request\n\nA typical workflow is:\n\n1. [Fork the repository.][fork] [This tip maybe also helpful.][go-fork-tip]\n2. [Create a topic branch.][branch]\n3. Add tests for your change.\n4. Run `go test`. If your tests pass, return to the step 3.\n5. Implement the change and ensure the steps from the previous step pass.\n6. Run `goimports -w .`, to ensure the new code conforms to Go formatting guideline.\n7. [Add, commit and push your changes.][git-help]\n8. [Submit a pull request.][pull-req]\n\n[go-install]: https://golang.org/doc/install\n[go-fork-tip]: http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html\n[fork]: https://help.github.com/articles/fork-a-repo\n[branch]: http://learn.github.com/p/branching.html\n[git-help]: https://guides.github.com\n[pull-req]: https://help.github.com/articles/using-pull-requests\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/LICENSE",
    "content": "Copyright (c) 2015-present Peter Kieltyka (https://github.com/pkieltyka), Google Inc.\n\nMIT License\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": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/README.md",
    "content": "# <img alt=\"chi\" src=\"https://cdn.rawgit.com/go-chi/chi/master/_examples/chi.svg\" width=\"220\" />\n\n\n[![GoDoc Widget]][GoDoc] [![Travis Widget]][Travis]\n\n`chi` is a lightweight, idiomatic and composable router for building Go 1.7+ HTTP services. It's\nespecially good at helping you write large REST API services that are kept maintainable as your\nproject grows and changes. `chi` is built on the new `context` package introduced in Go 1.7 to\nhandle signaling, cancelation and request-scoped values across a handler chain.\n\nThe focus of the project has been to seek out an elegant and comfortable design for writing\nREST API servers, written during the development of the Pressly API service that powers our\npublic API service, which in turn powers all of our client-side applications.\n\nThe key considerations of chi's design are: project structure, maintainability, standard http\nhandlers (stdlib-only), developer productivity, and deconstructing a large system into many small\nparts. The core router `github.com/go-chi/chi` is quite small (less than 1000 LOC), but we've also\nincluded some useful/optional subpackages: [middleware](/middleware), [render](https://github.com/go-chi/render) and [docgen](https://github.com/go-chi/docgen). We hope you enjoy it too!\n\n## Install\n\n`go get -u github.com/go-chi/chi`\n\n\n## Features\n\n* **Lightweight** - cloc'd in ~1000 LOC for the chi router\n* **Fast** - yes, see [benchmarks](#benchmarks)\n* **100% compatible with net/http** - use any http or middleware pkg in the ecosystem that is also compatible with `net/http`\n* **Designed for modular/composable APIs** - middlewares, inline middlewares, route groups and subrouter mounting\n* **Context control** - built on new `context` package, providing value chaining, cancelations and timeouts\n* **Robust** - in production at Pressly, CloudFlare, Heroku, 99Designs, and many others (see [discussion](https://github.com/go-chi/chi/issues/91))\n* **Doc generation** - `docgen` auto-generates routing documentation from your source to JSON or Markdown\n* **No external dependencies** - plain ol' Go 1.7+ stdlib + net/http\n\n\n## Examples\n\n* [rest](https://github.com/go-chi/chi/blob/master/_examples/rest/main.go) - REST APIs made easy, productive and maintainable\n* [logging](https://github.com/go-chi/chi/blob/master/_examples/logging/main.go) - Easy structured logging for any backend\n* [limits](https://github.com/go-chi/chi/blob/master/_examples/limits/main.go) - Timeouts and Throttling\n* [todos-resource](https://github.com/go-chi/chi/blob/master/_examples/todos-resource/main.go) - Struct routers/handlers, an example of another code layout style\n* [versions](https://github.com/go-chi/chi/blob/master/_examples/versions/main.go) - Demo of `chi/render` subpkg\n* [fileserver](https://github.com/go-chi/chi/blob/master/_examples/fileserver/main.go) - Easily serve static files\n* [graceful](https://github.com/go-chi/chi/blob/master/_examples/graceful/main.go) - Graceful context signaling and server shutdown\n\n\n**As easy as:**\n\n```go\npackage main\n\nimport (\n\t\"net/http\"\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\thttp.ListenAndServe(\":3000\", r)\n}\n```\n\n**REST Preview:**\n\nHere is a little preview of how routing looks like with chi. Also take a look at the generated routing docs\nin JSON ([routes.json](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.json)) and in\nMarkdown ([routes.md](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.md)).\n\nI highly recommend reading the source of the [examples](#examples) listed above, they will show you all the features\nof chi and serve as a good form of documentation.\n\n```go\nimport (\n  //...\n  \"context\"\n  \"github.com/go-chi/chi\"\n  \"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n  r := chi.NewRouter()\n\n  // A good base middleware stack\n  r.Use(middleware.RequestID)\n  r.Use(middleware.RealIP)\n  r.Use(middleware.Logger)\n  r.Use(middleware.Recoverer)\n\n  // Set a timeout value on the request context (ctx), that will signal\n  // through ctx.Done() that the request has timed out and further\n  // processing should be stopped.\n  r.Use(middleware.Timeout(60 * time.Second))\n\n  r.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte(\"hi\"))\n  })\n\n  // RESTy routes for \"articles\" resource\n  r.Route(\"/articles\", func(r chi.Router) {\n    r.With(paginate).Get(\"/\", listArticles)                           // GET /articles\n    r.With(paginate).Get(\"/{month}-{day}-{year}\", listArticlesByDate) // GET /articles/01-16-2017\n\n    r.Post(\"/\", createArticle)                                        // POST /articles\n    r.Get(\"/search\", searchArticles)                                  // GET /articles/search\n\n    // Regexp url parameters:\n    r.Get(\"/{articleSlug:[a-z-]+}\", getArticleBySlug)                // GET /articles/home-is-toronto\n\n    // Subrouters:\n    r.Route(\"/{articleID}\", func(r chi.Router) {\n      r.Use(ArticleCtx)\n      r.Get(\"/\", getArticle)                                          // GET /articles/123\n      r.Put(\"/\", updateArticle)                                       // PUT /articles/123\n      r.Delete(\"/\", deleteArticle)                                    // DELETE /articles/123\n    })\n  })\n\n  // Mount the admin sub-router\n  r.Mount(\"/admin\", adminRouter())\n\n  http.ListenAndServe(\":3333\", r)\n}\n\nfunc ArticleCtx(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    articleID := chi.URLParam(r, \"articleID\")\n    article, err := dbGetArticle(articleID)\n    if err != nil {\n      http.Error(w, http.StatusText(404), 404)\n      return\n    }\n    ctx := context.WithValue(r.Context(), \"article\", article)\n    next.ServeHTTP(w, r.WithContext(ctx))\n  })\n}\n\nfunc getArticle(w http.ResponseWriter, r *http.Request) {\n  ctx := r.Context()\n  article, ok := ctx.Value(\"article\").(*Article)\n  if !ok {\n    http.Error(w, http.StatusText(422), 422)\n    return\n  }\n  w.Write([]byte(fmt.Sprintf(\"title:%s\", article.Title)))\n}\n\n// A completely separate router for administrator routes\nfunc adminRouter() http.Handler {\n  r := chi.NewRouter()\n  r.Use(AdminOnly)\n  r.Get(\"/\", adminIndex)\n  r.Get(\"/accounts\", adminListAccounts)\n  return r\n}\n\nfunc AdminOnly(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    ctx := r.Context()\n    perm, ok := ctx.Value(\"acl.permission\").(YourPermissionType)\n    if !ok || !perm.IsAdmin() {\n      http.Error(w, http.StatusText(403), 403)\n      return\n    }\n    next.ServeHTTP(w, r)\n  })\n}\n```\n\n\n## Router design\n\nchi's router is based on a kind of [Patricia Radix trie](https://en.wikipedia.org/wiki/Radix_tree).\nThe router is fully compatible with `net/http`.\n\nBuilt on top of the tree is the `Router` interface:\n\n```go\n// Router consisting of the core routing methods used by chi's Mux,\n// using only the standard net/http.\ntype Router interface {\n\thttp.Handler\n\tRoutes\n\n\t// Use appends one of more middlewares onto the Router stack.\n\tUse(middlewares ...func(http.Handler) http.Handler)\n\n\t// With adds inline middlewares for an endpoint handler.\n\tWith(middlewares ...func(http.Handler) http.Handler) Router\n\n\t// Group adds a new inline-Router along the current routing\n\t// path, with a fresh middleware stack for the inline-Router.\n\tGroup(fn func(r Router)) Router\n\n\t// Route mounts a sub-Router along a `pattern`` string.\n\tRoute(pattern string, fn func(r Router)) Router\n\n\t// Mount attaches another http.Handler along ./pattern/*\n\tMount(pattern string, h http.Handler)\n\n\t// Handle and HandleFunc adds routes for `pattern` that matches\n\t// all HTTP methods.\n\tHandle(pattern string, h http.Handler)\n\tHandleFunc(pattern string, h http.HandlerFunc)\n\n\t// Method and MethodFunc adds routes for `pattern` that matches\n\t// the `method` HTTP method.\n\tMethod(method, pattern string, h http.Handler)\n\tMethodFunc(method, pattern string, h http.HandlerFunc)\n\n\t// HTTP-method routing along `pattern`\n\tConnect(pattern string, h http.HandlerFunc)\n\tDelete(pattern string, h http.HandlerFunc)\n\tGet(pattern string, h http.HandlerFunc)\n\tHead(pattern string, h http.HandlerFunc)\n\tOptions(pattern string, h http.HandlerFunc)\n\tPatch(pattern string, h http.HandlerFunc)\n\tPost(pattern string, h http.HandlerFunc)\n\tPut(pattern string, h http.HandlerFunc)\n\tTrace(pattern string, h http.HandlerFunc)\n\n\t// NotFound defines a handler to respond whenever a route could\n\t// not be found.\n\tNotFound(h http.HandlerFunc)\n\n\t// MethodNotAllowed defines a handler to respond whenever a method is\n\t// not allowed.\n\tMethodNotAllowed(h http.HandlerFunc)\n}\n\n// Routes interface adds two methods for router traversal, which is also\n// used by the `docgen` subpackage to generation documentation for Routers.\ntype Routes interface {\n\t// Routes returns the routing tree in an easily traversable structure.\n\tRoutes() []Route\n\n\t// Middlewares returns the list of middlewares in use by the router.\n\tMiddlewares() Middlewares\n\n\t// Match searches the routing tree for a handler that matches\n\t// the method/path - similar to routing a http request, but without\n\t// executing the handler thereafter.\n\tMatch(rctx *Context, method, path string) bool\n}\n```\n\nEach routing method accepts a URL `pattern` and chain of `handlers`. The URL pattern\nsupports named params (ie. `/users/{userID}`) and wildcards (ie. `/admin/*`). URL parameters\ncan be fetched at runtime by calling `chi.URLParam(r, \"userID\")` for named parameters\nand `chi.URLParam(r, \"*\")` for a wildcard parameter.\n\n\n### Middleware handlers\n\nchi's middlewares are just stdlib net/http middleware handlers. There is nothing special\nabout them, which means the router and all the tooling is designed to be compatible and\nfriendly with any middleware in the community. This offers much better extensibility and reuse\nof packages and is at the heart of chi's purpose.\n\nHere is an example of a standard net/http middleware handler using the new request context\navailable in Go 1.7+. This middleware sets a hypothetical user identifier on the request\ncontext and calls the next handler in the chain.\n\n```go\n// HTTP middleware setting a value on the request context\nfunc MyMiddleware(next http.Handler) http.Handler {\n  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n    ctx := context.WithValue(r.Context(), \"user\", \"123\")\n    next.ServeHTTP(w, r.WithContext(ctx))\n  })\n}\n```\n\n\n### Request handlers\n\nchi uses standard net/http request handlers. This little snippet is an example of a http.Handler\nfunc that reads a user identifier from the request context - hypothetically, identifying\nthe user sending an authenticated request, validated+set by a previous middleware handler.\n\n```go\n// HTTP handler accessing data from the request context.\nfunc MyRequestHandler(w http.ResponseWriter, r *http.Request) {\n  user := r.Context().Value(\"user\").(string)\n  w.Write([]byte(fmt.Sprintf(\"hi %s\", user)))\n}\n```\n\n\n### URL parameters\n\nchi's router parses and stores URL parameters right onto the request context. Here is\nan example of how to access URL params in your net/http handlers. And of course, middlewares\nare able to access the same information.\n\n```go\n// HTTP handler accessing the url routing parameters.\nfunc MyRequestHandler(w http.ResponseWriter, r *http.Request) {\n  userID := chi.URLParam(r, \"userID\") // from a route like /users/{userID}\n\n  ctx := r.Context()\n  key := ctx.Value(\"key\").(string)\n\n  w.Write([]byte(fmt.Sprintf(\"hi %v, %v\", userID, key)))\n}\n```\n\n\n## Middlewares\n\nchi comes equipped with an optional `middleware` package, providing a suite of standard\n`net/http` middlewares. Please note, any middleware in the ecosystem that is also compatible\nwith `net/http` can be used with chi's mux.\n\n### Core middlewares\n\n-----------------------------------------------------------------------------------------------------------\n| chi/middleware Handler | description                                                                     |\n|:----------------------|:---------------------------------------------------------------------------------\n| AllowContentType      | Explicit whitelist of accepted request Content-Types                            |\n| Compress              | Gzip compression for clients that accept compressed responses                   |\n| GetHead               | Automatically route undefined HEAD requests to GET handlers                     |\n| Heartbeat             | Monitoring endpoint to check the servers pulse                                  |\n| Logger                | Logs the start and end of each request with the elapsed processing time         |\n| NoCache               | Sets response headers to prevent clients from caching                           |\n| Profiler              | Easily attach net/http/pprof to your routers                                    |\n| RealIP                | Sets a http.Request's RemoteAddr to either X-Forwarded-For or X-Real-IP         |\n| Recoverer             | Gracefully absorb panics and prints the stack trace                             |\n| RequestID             | Injects a request ID into the context of each request                           |\n| RedirectSlashes       | Redirect slashes on routing paths                                               |\n| SetHeader             | Short-hand middleware to set a response header key/value                        |\n| StripSlashes          | Strip slashes on routing paths                                                  |\n| Throttle              | Puts a ceiling on the number of concurrent requests                             |\n| Timeout               | Signals to the request context when the timeout deadline is reached             |\n| URLFormat             | Parse extension from url and put it on request context                          |\n| WithValue             | Short-hand middleware to set a key/value on the request context                 |\n-----------------------------------------------------------------------------------------------------------\n\n### Auxiliary middlewares & packages\n\nPlease see https://github.com/go-chi for additional packages.\n\n--------------------------------------------------------------------------------------------------------------------\n| package                                            | description                                                 |\n|:---------------------------------------------------|:-------------------------------------------------------------\n| [cors](https://github.com/go-chi/cors)             | Cross-origin resource sharing (CORS)                        |\n| [jwtauth](https://github.com/go-chi/jwtauth)       | JWT authentication                                          |\n| [hostrouter](https://github.com/go-chi/hostrouter) | Domain/host based request routing                           |\n| [httpcoala](https://github.com/go-chi/httpcoala)   | HTTP request coalescer                                      |\n| [chi-authz](https://github.com/casbin/chi-authz)   | Request ACL via https://github.com/hsluoyz/casbin           |\n| [phi](https://github.com/fate-lovely/phi)          | Port chi to [fasthttp](https://github.com/valyala/fasthttp) |\n--------------------------------------------------------------------------------------------------------------------\n\nplease [submit a PR](./CONTRIBUTING.md) if you'd like to include a link to a chi-compatible middleware\n\n\n## context?\n\n`context` is a tiny pkg that provides simple interface to signal context across call stacks\nand goroutines. It was originally written by [Sameer Ajmani](https://github.com/Sajmani)\nand is available in stdlib since go1.7.\n\nLearn more at https://blog.golang.org/context\n\nand..\n* Docs: https://golang.org/pkg/context\n* Source: https://github.com/golang/go/tree/master/src/context\n\n\n## Benchmarks\n\nThe benchmark suite: https://github.com/pkieltyka/go-http-routing-benchmark\n\nResults as of Aug 31, 2017 on Go 1.9.0\n\n```shell\nBenchmarkChi_Param        \t 3000000\t       607 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Param5       \t 2000000\t       935 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Param20      \t 1000000\t      1944 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParamWrite   \t 2000000\t       664 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubStatic \t 2000000\t       627 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubParam  \t 2000000\t       847 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GithubAll    \t   10000\t    175556 ns/op\t   87700 B/op\t     609 allocs/op\nBenchmarkChi_GPlusStatic  \t 3000000\t       566 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlusParam   \t 2000000\t       652 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlus2Params \t 2000000\t       767 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_GPlusAll     \t  200000\t      9794 ns/op\t    5616 B/op\t      39 allocs/op\nBenchmarkChi_ParseStatic  \t 3000000\t       590 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParseParam   \t 2000000\t       656 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_Parse2Params \t 2000000\t       715 ns/op\t     432 B/op\t       3 allocs/op\nBenchmarkChi_ParseAll     \t  100000\t     18045 ns/op\t   11232 B/op\t      78 allocs/op\nBenchmarkChi_StaticAll    \t   10000\t    108871 ns/op\t   67827 B/op\t     471 allocs/op\n```\n\nComparison with other routers: https://gist.github.com/pkieltyka/c089f309abeb179cfc4deaa519956d8c\n\nNOTE: the allocs in the benchmark above are from the calls to http.Request's\n`WithContext(context.Context)` method that clones the http.Request, sets the `Context()`\non the duplicated (alloc'd) request and returns it the new request object. This is just\nhow setting context on a request in Go 1.7+ works.\n\n\n## Credits\n\n* Carl Jackson for https://github.com/zenazn/goji\n  * Parts of chi's thinking comes from goji, and chi's middleware package\n    sources from goji.\n* Armon Dadgar for https://github.com/armon/go-radix\n* Contributions: [@VojtechVitek](https://github.com/VojtechVitek)\n\nWe'll be more than happy to see [your contributions](./CONTRIBUTING.md)!\n\n\n## Beyond REST\n\nchi is just a http router that lets you decompose request handling into many smaller layers.\nMany companies including Pressly.com (of course) use chi to write REST services for their public\nAPIs. But, REST is just a convention for managing state via HTTP, and there's a lot of other pieces\nrequired to write a complete client-server system or network of microservices.\n\nLooking ahead beyond REST, I also recommend some newer works in the field coming from\n[gRPC](https://github.com/grpc/grpc-go), [NATS](https://nats.io), [go-kit](https://github.com/go-kit/kit)\nand even [graphql](https://github.com/graphql-go/graphql). They're all pretty cool with their\nown unique approaches and benefits. Specifically, I'd look at gRPC since it makes client-server\ncommunication feel like a single program on a single computer, no need to hand-write a client library\nand the request/response payloads are typed contracts. NATS is pretty amazing too as a super\nfast and lightweight pub-sub transport that can speak protobufs, with nice service discovery -\nan excellent combination with gRPC.\n\n\n## License\n\nCopyright (c) 2015-present [Peter Kieltyka](https://github.com/pkieltyka)\n\nLicensed under [MIT License](./LICENSE)\n\n[GoDoc]: https://godoc.org/github.com/go-chi/chi\n[GoDoc Widget]: https://godoc.org/github.com/go-chi/chi?status.svg\n[Travis]: https://travis-ci.org/go-chi/chi\n[Travis Widget]: https://travis-ci.org/go-chi/chi.svg?branch=master\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/custom-handler/main.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype Handler func(w http.ResponseWriter, r *http.Request) error\n\nfunc (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tif err := h(w, r); err != nil {\n\t\t// handle returned error here.\n\t\tw.WriteHeader(503)\n\t\tw.Write([]byte(\"bad\"))\n\t}\n}\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Method(\"GET\", \"/\", Handler(customHandler))\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc customHandler(w http.ResponseWriter, r *http.Request) error {\n\tq := r.URL.Query().Get(\"err\")\n\n\tif q != \"\" {\n\t\treturn errors.New(q)\n\t}\n\n\tw.Write([]byte(\"foo\"))\n\treturn nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/custom-method/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc init() {\n\tchi.RegisterMethod(\"LINK\")\n\tchi.RegisterMethod(\"UNLINK\")\n\tchi.RegisterMethod(\"WOOHOO\")\n}\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello world\"))\n\t})\n\tr.MethodFunc(\"LINK\", \"/link\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom link method\"))\n\t})\n\tr.MethodFunc(\"WOOHOO\", \"/woo\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom woohoo method\"))\n\t})\n\tr.HandleFunc(\"/everything\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"capturing all standard http methods, as well as LINK, UNLINK and WOOHOO\"))\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/fileserver/files/notes.txt",
    "content": "Notessszzz\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/fileserver/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\n\tworkDir, _ := os.Getwd()\n\tfilesDir := filepath.Join(workDir, \"files\")\n\tFileServer(r, \"/files\", http.Dir(filesDir))\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\n// FileServer conveniently sets up a http.FileServer handler to serve\n// static files from a http.FileSystem.\nfunc FileServer(r chi.Router, path string, root http.FileSystem) {\n\tif strings.ContainsAny(path, \"{}*\") {\n\t\tpanic(\"FileServer does not permit URL parameters.\")\n\t}\n\n\tfs := http.StripPrefix(path, http.FileServer(root))\n\n\tif path != \"/\" && path[len(path)-1] != '/' {\n\t\tr.Get(path, http.RedirectHandler(path+\"/\", 301).ServeHTTP)\n\t\tpath += \"/\"\n\t}\n\tpath += \"*\"\n\n\tr.Get(path, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tfs.ServeHTTP(w, r)\n\t}))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/graceful/main.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/valve\"\n)\n\nfunc main() {\n\n\t// Our graceful valve shut-off package to manage code preemption and\n\t// shutdown signaling.\n\tvalv := valve.New()\n\tbaseCtx := valv.Context()\n\n\t// Example of a long running background worker thing..\n\tgo func(ctx context.Context) {\n\t\tfor {\n\t\t\t<-time.After(1 * time.Second)\n\n\t\t\tfunc() {\n\t\t\t\tvalve.Lever(ctx).Open()\n\t\t\t\tdefer valve.Lever(ctx).Close()\n\n\t\t\t\t// actual code doing stuff..\n\t\t\t\tfmt.Println(\"tick..\")\n\t\t\t\ttime.Sleep(2 * time.Second)\n\t\t\t\t// end-logic\n\n\t\t\t\t// signal control..\n\t\t\t\tselect {\n\t\t\t\tcase <-valve.Lever(ctx).Stop():\n\t\t\t\t\tfmt.Println(\"valve is closed\")\n\t\t\t\t\treturn\n\n\t\t\t\tcase <-ctx.Done():\n\t\t\t\t\tfmt.Println(\"context is cancelled, go home.\")\n\t\t\t\t\treturn\n\t\t\t\tdefault:\n\t\t\t\t}\n\t\t\t}()\n\n\t\t}\n\t}(baseCtx)\n\n\t// HTTP service running in this program as well. The valve context is set\n\t// as a base context on the server listener at the point where we instantiate\n\t// the server - look lower.\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sup\"))\n\t})\n\n\tr.Get(\"/slow\", func(w http.ResponseWriter, r *http.Request) {\n\n\t\tvalve.Lever(r.Context()).Open()\n\t\tdefer valve.Lever(r.Context()).Close()\n\n\t\tselect {\n\t\tcase <-valve.Lever(r.Context()).Stop():\n\t\t\tfmt.Println(\"valve is closed. finish up..\")\n\n\t\tcase <-time.After(5 * time.Second):\n\t\t\t// The above channel simulates some hard work.\n\t\t\t// We want this handler to complete successfully during a shutdown signal,\n\t\t\t// so consider the work here as some background routine to fetch a long running\n\t\t\t// search query to find as many results as possible, but, instead we cut it short\n\t\t\t// and respond with what we have so far. How a shutdown is handled is entirely\n\t\t\t// up to the developer, as some code blocks are preemptable, and others are not.\n\t\t\ttime.Sleep(5 * time.Second)\n\t\t}\n\n\t\tw.Write([]byte(fmt.Sprintf(\"all done.\\n\")))\n\t})\n\n\tsrv := http.Server{Addr: \":3333\", Handler: chi.ServerBaseContext(baseCtx, r)}\n\n\tc := make(chan os.Signal, 1)\n\tsignal.Notify(c, os.Interrupt)\n\tgo func() {\n\t\tfor range c {\n\t\t\t// sig is a ^C, handle it\n\t\t\tfmt.Println(\"shutting down..\")\n\n\t\t\t// first valv\n\t\t\tvalv.Shutdown(20 * time.Second)\n\n\t\t\t// create context with timeout\n\t\t\tctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)\n\t\t\tdefer cancel()\n\n\t\t\t// start http shutdown\n\t\t\tsrv.Shutdown(ctx)\n\n\t\t\t// verify, in worst case call cancel via defer\n\t\t\tselect {\n\t\t\tcase <-time.After(21 * time.Second):\n\t\t\t\tfmt.Println(\"not all connections done\")\n\t\t\tcase <-ctx.Done():\n\n\t\t\t}\n\t\t}\n\t}()\n\tsrv.ListenAndServe()\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/hello-world/main.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello world\"))\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/limits/main.go",
    "content": "//\n// Limits\n// ======\n// This example demonstrates the use of Timeout, CloseNotify, and\n// Throttle middlewares.\n//\n// Timeout:\n//   cancel a request if processing takes longer than 2.5 seconds,\n//   server will respond with a http.StatusGatewayTimeout.\n//\n// CloseNotify:\n//   cancel a request if the client disconnects.\n//\n// Throttle:\n//   limit the number of in-flight requests along a particular\n//   routing path and backlog the others.\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Get(\"/ping\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"pong\"))\n\t})\n\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"test\")\n\t})\n\n\t// Slow handlers/operations.\n\tr.Group(func(r chi.Router) {\n\t\t// Stop processing when client disconnects.\n\t\tr.Use(middleware.CloseNotify)\n\n\t\t// Stop processing after 2.5 seconds.\n\t\tr.Use(middleware.Timeout(2500 * time.Millisecond))\n\n\t\tr.Get(\"/slow\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\trand.Seed(time.Now().Unix())\n\n\t\t\t// Processing will take 1-5 seconds.\n\t\t\tprocessTime := time.Duration(rand.Intn(4)+1) * time.Second\n\n\t\t\tselect {\n\t\t\tcase <-r.Context().Done():\n\t\t\t\treturn\n\n\t\t\tcase <-time.After(processTime):\n\t\t\t\t// The above channel simulates some hard work.\n\t\t\t}\n\n\t\t\tw.Write([]byte(fmt.Sprintf(\"Processed in %v seconds\\n\", processTime)))\n\t\t})\n\t})\n\n\t// Throttle very expensive handlers/operations.\n\tr.Group(func(r chi.Router) {\n\t\t// Stop processing after 30 seconds.\n\t\tr.Use(middleware.Timeout(30 * time.Second))\n\n\t\t// Only one request will be processed at a time.\n\t\tr.Use(middleware.Throttle(1))\n\n\t\tr.Get(\"/throttled\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tselect {\n\t\t\tcase <-r.Context().Done():\n\t\t\t\tswitch r.Context().Err() {\n\t\t\t\tcase context.DeadlineExceeded:\n\t\t\t\t\tw.WriteHeader(504)\n\t\t\t\t\tw.Write([]byte(\"Processing too slow\\n\"))\n\t\t\t\tdefault:\n\t\t\t\t\tw.Write([]byte(\"Canceled\\n\"))\n\t\t\t\t}\n\t\t\t\treturn\n\n\t\t\tcase <-time.After(5 * time.Second):\n\t\t\t\t// The above channel simulates some hard work.\n\t\t\t}\n\n\t\t\tw.Write([]byte(\"Processed\\n\"))\n\t\t})\n\t})\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/logging/main.go",
    "content": "//\n// Custom Structured Logger\n// ========================\n// This example demonstrates how to use middleware.RequestLogger,\n// middleware.LogFormatter and middleware.LogEntry to build a structured\n// logger using the amazing sirupsen/logrus package as the logging\n// backend.\n//\n// Also: check out https://github.com/pressly/lg for an improved context\n// logger with support for HTTP request logging, based on the example\n// below.\n//\npackage main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/sirupsen/logrus\"\n)\n\nfunc main() {\n\n\t// Setup the logger backend using sirupsen/logrus and configure\n\t// it to use a custom JSONFormatter. See the logrus docs for how to\n\t// configure the backend at github.com/sirupsen/logrus\n\tlogger := logrus.New()\n\tlogger.Formatter = &logrus.JSONFormatter{\n\t\t// disable, as we set our own\n\t\tDisableTimestamp: true,\n\t}\n\n\t// Routes\n\tr := chi.NewRouter()\n\tr.Use(middleware.RequestID)\n\tr.Use(NewStructuredLogger(logger))\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\tr.Get(\"/wait\", func(w http.ResponseWriter, r *http.Request) {\n\t\ttime.Sleep(1 * time.Second)\n\t\tLogEntrySetField(r, \"wait\", true)\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"oops\")\n\t})\n\thttp.ListenAndServe(\":3333\", r)\n}\n\n// StructuredLogger is a simple, but powerful implementation of a custom structured\n// logger backed on logrus. I encourage users to copy it, adapt it and make it their\n// own. Also take a look at https://github.com/pressly/lg for a dedicated pkg based\n// on this work, designed for context-based http routers.\n\nfunc NewStructuredLogger(logger *logrus.Logger) func(next http.Handler) http.Handler {\n\treturn middleware.RequestLogger(&StructuredLogger{logger})\n}\n\ntype StructuredLogger struct {\n\tLogger *logrus.Logger\n}\n\nfunc (l *StructuredLogger) NewLogEntry(r *http.Request) middleware.LogEntry {\n\tentry := &StructuredLoggerEntry{Logger: logrus.NewEntry(l.Logger)}\n\tlogFields := logrus.Fields{}\n\n\tlogFields[\"ts\"] = time.Now().UTC().Format(time.RFC1123)\n\n\tif reqID := middleware.GetReqID(r.Context()); reqID != \"\" {\n\t\tlogFields[\"req_id\"] = reqID\n\t}\n\n\tscheme := \"http\"\n\tif r.TLS != nil {\n\t\tscheme = \"https\"\n\t}\n\tlogFields[\"http_scheme\"] = scheme\n\tlogFields[\"http_proto\"] = r.Proto\n\tlogFields[\"http_method\"] = r.Method\n\n\tlogFields[\"remote_addr\"] = r.RemoteAddr\n\tlogFields[\"user_agent\"] = r.UserAgent()\n\n\tlogFields[\"uri\"] = fmt.Sprintf(\"%s://%s%s\", scheme, r.Host, r.RequestURI)\n\n\tentry.Logger = entry.Logger.WithFields(logFields)\n\n\tentry.Logger.Infoln(\"request started\")\n\n\treturn entry\n}\n\ntype StructuredLoggerEntry struct {\n\tLogger logrus.FieldLogger\n}\n\nfunc (l *StructuredLoggerEntry) Write(status, bytes int, elapsed time.Duration) {\n\tl.Logger = l.Logger.WithFields(logrus.Fields{\n\t\t\"resp_status\": status, \"resp_bytes_length\": bytes,\n\t\t\"resp_elapsed_ms\": float64(elapsed.Nanoseconds()) / 1000000.0,\n\t})\n\n\tl.Logger.Infoln(\"request complete\")\n}\n\nfunc (l *StructuredLoggerEntry) Panic(v interface{}, stack []byte) {\n\tl.Logger = l.Logger.WithFields(logrus.Fields{\n\t\t\"stack\": string(stack),\n\t\t\"panic\": fmt.Sprintf(\"%+v\", v),\n\t})\n}\n\n// Helper methods used by the application to get the request-scoped\n// logger entry and set additional fields between handlers.\n//\n// This is a useful pattern to use to set state on the entry as it\n// passes through the handler chain, which at any point can be logged\n// with a call to .Print(), .Info(), etc.\n\nfunc GetLogEntry(r *http.Request) logrus.FieldLogger {\n\tentry := middleware.GetLogEntry(r).(*StructuredLoggerEntry)\n\treturn entry.Logger\n}\n\nfunc LogEntrySetField(r *http.Request, key string, value interface{}) {\n\tif entry, ok := r.Context().Value(middleware.LogEntryCtxKey).(*StructuredLoggerEntry); ok {\n\t\tentry.Logger = entry.Logger.WithField(key, value)\n\t}\n}\n\nfunc LogEntrySetFields(r *http.Request, fields map[string]interface{}) {\n\tif entry, ok := r.Context().Value(middleware.LogEntryCtxKey).(*StructuredLoggerEntry); ok {\n\t\tentry.Logger = entry.Logger.WithFields(fields)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/rest/main.go",
    "content": "//\n// REST\n// ====\n// This example demonstrates a HTTP REST web service with some fixture data.\n// Follow along the example and patterns.\n//\n// Also check routes.json for the generated docs from passing the -routes flag\n//\n// Boot the server:\n// ----------------\n// $ go run main.go\n//\n// Client requests:\n// ----------------\n// $ curl http://localhost:3333/\n// root.\n//\n// $ curl http://localhost:3333/articles\n// [{\"id\":\"1\",\"title\":\"Hi\"},{\"id\":\"2\",\"title\":\"sup\"}]\n//\n// $ curl http://localhost:3333/articles/1\n// {\"id\":\"1\",\"title\":\"Hi\"}\n//\n// $ curl -X DELETE http://localhost:3333/articles/1\n// {\"id\":\"1\",\"title\":\"Hi\"}\n//\n// $ curl http://localhost:3333/articles/1\n// \"Not Found\"\n//\n// $ curl -X POST -d '{\"id\":\"will-be-omitted\",\"title\":\"awesomeness\"}' http://localhost:3333/articles\n// {\"id\":\"97\",\"title\":\"awesomeness\"}\n//\n// $ curl http://localhost:3333/articles/97\n// {\"id\":\"97\",\"title\":\"awesomeness\"}\n//\n// $ curl http://localhost:3333/articles\n// [{\"id\":\"2\",\"title\":\"sup\"},{\"id\":\"97\",\"title\":\"awesomeness\"}]\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/docgen\"\n\t\"github.com/go-chi/render\"\n)\n\nvar routes = flag.Bool(\"routes\", false, \"Generate router documentation\")\n\nfunc main() {\n\tflag.Parse()\n\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\tr.Use(middleware.URLFormat)\n\tr.Use(render.SetContentType(render.ContentTypeJSON))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Get(\"/ping\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"pong\"))\n\t})\n\n\tr.Get(\"/panic\", func(w http.ResponseWriter, r *http.Request) {\n\t\tpanic(\"test\")\n\t})\n\n\t// RESTy routes for \"articles\" resource\n\tr.Route(\"/articles\", func(r chi.Router) {\n\t\tr.With(paginate).Get(\"/\", ListArticles)\n\t\tr.Post(\"/\", CreateArticle)       // POST /articles\n\t\tr.Get(\"/search\", SearchArticles) // GET /articles/search\n\n\t\tr.Route(\"/{articleID}\", func(r chi.Router) {\n\t\t\tr.Use(ArticleCtx)            // Load the *Article on the request context\n\t\t\tr.Get(\"/\", GetArticle)       // GET /articles/123\n\t\t\tr.Put(\"/\", UpdateArticle)    // PUT /articles/123\n\t\t\tr.Delete(\"/\", DeleteArticle) // DELETE /articles/123\n\t\t})\n\n\t\t// GET /articles/whats-up\n\t\tr.With(ArticleCtx).Get(\"/{articleSlug:[a-z-]+}\", GetArticle)\n\t})\n\n\t// Mount the admin sub-router, which btw is the same as:\n\t// r.Route(\"/admin\", func(r chi.Router) { admin routes here })\n\tr.Mount(\"/admin\", adminRouter())\n\n\t// Passing -routes to the program will generate docs for the above\n\t// router definition. See the `routes.json` file in this folder for\n\t// the output.\n\tif *routes {\n\t\t// fmt.Println(docgen.JSONRoutesDoc(r))\n\t\tfmt.Println(docgen.MarkdownRoutesDoc(r, docgen.MarkdownOpts{\n\t\t\tProjectPath: \"github.com/go-chi/chi\",\n\t\t\tIntro:       \"Welcome to the chi/_examples/rest generated docs.\",\n\t\t}))\n\t\treturn\n\t}\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc ListArticles(w http.ResponseWriter, r *http.Request) {\n\tif err := render.RenderList(w, r, NewArticleListResponse(articles)); err != nil {\n\t\trender.Render(w, r, ErrRender(err))\n\t\treturn\n\t}\n}\n\n// ArticleCtx middleware is used to load an Article object from\n// the URL parameters passed through as the request. In case\n// the Article could not be found, we stop here and return a 404.\nfunc ArticleCtx(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tvar article *Article\n\t\tvar err error\n\n\t\tif articleID := chi.URLParam(r, \"articleID\"); articleID != \"\" {\n\t\t\tarticle, err = dbGetArticle(articleID)\n\t\t} else if articleSlug := chi.URLParam(r, \"articleSlug\"); articleSlug != \"\" {\n\t\t\tarticle, err = dbGetArticleBySlug(articleSlug)\n\t\t} else {\n\t\t\trender.Render(w, r, ErrNotFound)\n\t\t\treturn\n\t\t}\n\t\tif err != nil {\n\t\t\trender.Render(w, r, ErrNotFound)\n\t\t\treturn\n\t\t}\n\n\t\tctx := context.WithValue(r.Context(), \"article\", article)\n\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t})\n}\n\n// SearchArticles searches the Articles data for a matching article.\n// It's just a stub, but you get the idea.\nfunc SearchArticles(w http.ResponseWriter, r *http.Request) {\n\trender.RenderList(w, r, NewArticleListResponse(articles))\n}\n\n// CreateArticle persists the posted Article and returns it\n// back to the client as an acknowledgement.\nfunc CreateArticle(w http.ResponseWriter, r *http.Request) {\n\tdata := &ArticleRequest{}\n\tif err := render.Bind(r, data); err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\n\tarticle := data.Article\n\tdbNewArticle(article)\n\n\trender.Status(r, http.StatusCreated)\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// GetArticle returns the specific Article. You'll notice it just\n// fetches the Article right off the context, as its understood that\n// if we made it this far, the Article must be on the context. In case\n// its not due to a bug, then it will panic, and our Recoverer will save us.\nfunc GetArticle(w http.ResponseWriter, r *http.Request) {\n\t// Assume if we've reach this far, we can access the article\n\t// context because this handler is a child of the ArticleCtx\n\t// middleware. The worst case, the recoverer middleware will save us.\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tif err := render.Render(w, r, NewArticleResponse(article)); err != nil {\n\t\trender.Render(w, r, ErrRender(err))\n\t\treturn\n\t}\n}\n\n// UpdateArticle updates an existing Article in our persistent store.\nfunc UpdateArticle(w http.ResponseWriter, r *http.Request) {\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tdata := &ArticleRequest{Article: article}\n\tif err := render.Bind(r, data); err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\tarticle = data.Article\n\tdbUpdateArticle(article.ID, article)\n\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// DeleteArticle removes an existing Article from our persistent store.\nfunc DeleteArticle(w http.ResponseWriter, r *http.Request) {\n\tvar err error\n\n\t// Assume if we've reach this far, we can access the article\n\t// context because this handler is a child of the ArticleCtx\n\t// middleware. The worst case, the recoverer middleware will save us.\n\tarticle := r.Context().Value(\"article\").(*Article)\n\n\tarticle, err = dbRemoveArticle(article.ID)\n\tif err != nil {\n\t\trender.Render(w, r, ErrInvalidRequest(err))\n\t\treturn\n\t}\n\n\trender.Render(w, r, NewArticleResponse(article))\n}\n\n// A completely separate router for administrator routes\nfunc adminRouter() chi.Router {\n\tr := chi.NewRouter()\n\tr.Use(AdminOnly)\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"admin: index\"))\n\t})\n\tr.Get(\"/accounts\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"admin: list accounts..\"))\n\t})\n\tr.Get(\"/users/{userId}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"admin: view user id %v\", chi.URLParam(r, \"userId\"))))\n\t})\n\treturn r\n}\n\n// AdminOnly middleware restricts access to just administrators.\nfunc AdminOnly(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tisAdmin, ok := r.Context().Value(\"acl.admin\").(bool)\n\t\tif !ok || !isAdmin {\n\t\t\thttp.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden)\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n\n// paginate is a stub, but very possible to implement middleware logic\n// to handle the request params for handling a paginated request.\nfunc paginate(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t// just a stub.. some ideas are to look at URL query params for something like\n\t\t// the page number, or the limit, and send a query cursor down the chain\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n\n// This is entirely optional, but I wanted to demonstrate how you could easily\n// add your own logic to the render.Respond method.\nfunc init() {\n\trender.Respond = func(w http.ResponseWriter, r *http.Request, v interface{}) {\n\t\tif err, ok := v.(error); ok {\n\n\t\t\t// We set a default error status response code if one hasn't been set.\n\t\t\tif _, ok := r.Context().Value(render.StatusCtxKey).(int); !ok {\n\t\t\t\tw.WriteHeader(400)\n\t\t\t}\n\n\t\t\t// We log the error\n\t\t\tfmt.Printf(\"Logging err: %s\\n\", err.Error())\n\n\t\t\t// We change the response to not reveal the actual error message,\n\t\t\t// instead we can transform the message something more friendly or mapped\n\t\t\t// to some code / language, etc.\n\t\t\trender.DefaultResponder(w, r, render.M{\"status\": \"error\"})\n\t\t\treturn\n\t\t}\n\n\t\trender.DefaultResponder(w, r, v)\n\t}\n}\n\n//--\n// Request and Response payloads for the REST api.\n//\n// The payloads embed the data model objects an\n//\n// In a real-world project, it would make sense to put these payloads\n// in another file, or another sub-package.\n//--\n\ntype UserPayload struct {\n\t*User\n\tRole string `json:\"role\"`\n}\n\nfunc NewUserPayloadResponse(user *User) *UserPayload {\n\treturn &UserPayload{User: user}\n}\n\n// Bind on UserPayload will run after the unmarshalling is complete, its\n// a good time to focus some post-processing after a decoding.\nfunc (u *UserPayload) Bind(r *http.Request) error {\n\treturn nil\n}\n\nfunc (u *UserPayload) Render(w http.ResponseWriter, r *http.Request) error {\n\tu.Role = \"collaborator\"\n\treturn nil\n}\n\n// ArticleRequest is the request payload for Article data model.\n//\n// NOTE: It's good practice to have well defined request and response payloads\n// so you can manage the specific inputs and outputs for clients, and also gives\n// you the opportunity to transform data on input or output, for example\n// on request, we'd like to protect certain fields and on output perhaps\n// we'd like to include a computed field based on other values that aren't\n// in the data model. Also, check out this awesome blog post on struct composition:\n// http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/\ntype ArticleRequest struct {\n\t*Article\n\n\tUser *UserPayload `json:\"user,omitempty\"`\n\n\tProtectedID string `json:\"id\"` // override 'id' json to have more control\n}\n\nfunc (a *ArticleRequest) Bind(r *http.Request) error {\n\t// just a post-process after a decode..\n\ta.ProtectedID = \"\"                                 // unset the protected ID\n\ta.Article.Title = strings.ToLower(a.Article.Title) // as an example, we down-case\n\treturn nil\n}\n\n// ArticleResponse is the response payload for the Article data model.\n// See NOTE above in ArticleRequest as well.\n//\n// In the ArticleResponse object, first a Render() is called on itself,\n// then the next field, and so on, all the way down the tree.\n// Render is called in top-down order, like a http handler middleware chain.\ntype ArticleResponse struct {\n\t*Article\n\n\tUser *UserPayload `json:\"user,omitempty\"`\n\n\t// We add an additional field to the response here.. such as this\n\t// elapsed computed property\n\tElapsed int64 `json:\"elapsed\"`\n}\n\nfunc NewArticleResponse(article *Article) *ArticleResponse {\n\tresp := &ArticleResponse{Article: article}\n\n\tif resp.User == nil {\n\t\tif user, _ := dbGetUser(resp.UserID); user != nil {\n\t\t\tresp.User = NewUserPayloadResponse(user)\n\t\t}\n\t}\n\n\treturn resp\n}\n\nfunc (rd *ArticleResponse) Render(w http.ResponseWriter, r *http.Request) error {\n\t// Pre-processing before a response is marshalled and sent across the wire\n\trd.Elapsed = 10\n\treturn nil\n}\n\ntype ArticleListResponse []*ArticleResponse\n\nfunc NewArticleListResponse(articles []*Article) []render.Renderer {\n\tlist := []render.Renderer{}\n\tfor _, article := range articles {\n\t\tlist = append(list, NewArticleResponse(article))\n\t}\n\treturn list\n}\n\n// NOTE: as a thought, the request and response payloads for an Article could be the\n// same payload type, perhaps will do an example with it as well.\n// type ArticlePayload struct {\n//   *Article\n// }\n\n//--\n// Error response payloads & renderers\n//--\n\n// ErrResponse renderer type for handling all sorts of errors.\n//\n// In the best case scenario, the excellent github.com/pkg/errors package\n// helps reveal information on the error, setting it on Err, and in the Render()\n// method, using it to set the application-specific error code in AppCode.\ntype ErrResponse struct {\n\tErr            error `json:\"-\"` // low-level runtime error\n\tHTTPStatusCode int   `json:\"-\"` // http response status code\n\n\tStatusText string `json:\"status\"`          // user-level status message\n\tAppCode    int64  `json:\"code,omitempty\"`  // application-specific error code\n\tErrorText  string `json:\"error,omitempty\"` // application-level error message, for debugging\n}\n\nfunc (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error {\n\trender.Status(r, e.HTTPStatusCode)\n\treturn nil\n}\n\nfunc ErrInvalidRequest(err error) render.Renderer {\n\treturn &ErrResponse{\n\t\tErr:            err,\n\t\tHTTPStatusCode: 400,\n\t\tStatusText:     \"Invalid request.\",\n\t\tErrorText:      err.Error(),\n\t}\n}\n\nfunc ErrRender(err error) render.Renderer {\n\treturn &ErrResponse{\n\t\tErr:            err,\n\t\tHTTPStatusCode: 422,\n\t\tStatusText:     \"Error rendering response.\",\n\t\tErrorText:      err.Error(),\n\t}\n}\n\nvar ErrNotFound = &ErrResponse{HTTPStatusCode: 404, StatusText: \"Resource not found.\"}\n\n//--\n// Data model objects and persistence mocks:\n//--\n\n// User data model\ntype User struct {\n\tID   int64  `json:\"id\"`\n\tName string `json:\"name\"`\n}\n\n// Article data model. I suggest looking at https://upper.io for an easy\n// and powerful data persistence adapter.\ntype Article struct {\n\tID     string `json:\"id\"`\n\tUserID int64  `json:\"user_id\"` // the author\n\tTitle  string `json:\"title\"`\n\tSlug   string `json:\"slug\"`\n}\n\n// Article fixture data\nvar articles = []*Article{\n\t{ID: \"1\", UserID: 100, Title: \"Hi\", Slug: \"hi\"},\n\t{ID: \"2\", UserID: 200, Title: \"sup\", Slug: \"sup\"},\n\t{ID: \"3\", UserID: 300, Title: \"alo\", Slug: \"alo\"},\n\t{ID: \"4\", UserID: 400, Title: \"bonjour\", Slug: \"bonjour\"},\n\t{ID: \"5\", UserID: 500, Title: \"whats up\", Slug: \"whats-up\"},\n}\n\n// User fixture data\nvar users = []*User{\n\t{ID: 100, Name: \"Peter\"},\n\t{ID: 200, Name: \"Julia\"},\n}\n\nfunc dbNewArticle(article *Article) (string, error) {\n\tarticle.ID = fmt.Sprintf(\"%d\", rand.Intn(100)+10)\n\tarticles = append(articles, article)\n\treturn article.ID, nil\n}\n\nfunc dbGetArticle(id string) (*Article, error) {\n\tfor _, a := range articles {\n\t\tif a.ID == id {\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbGetArticleBySlug(slug string) (*Article, error) {\n\tfor _, a := range articles {\n\t\tif a.Slug == slug {\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbUpdateArticle(id string, article *Article) (*Article, error) {\n\tfor i, a := range articles {\n\t\tif a.ID == id {\n\t\t\tarticles[i] = article\n\t\t\treturn article, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbRemoveArticle(id string) (*Article, error) {\n\tfor i, a := range articles {\n\t\tif a.ID == id {\n\t\t\tarticles = append((articles)[:i], (articles)[i+1:]...)\n\t\t\treturn a, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"article not found.\")\n}\n\nfunc dbGetUser(id int64) (*User, error) {\n\tfor _, u := range users {\n\t\tif u.ID == id {\n\t\t\treturn u, nil\n\t\t}\n\t}\n\treturn nil, errors.New(\"user not found.\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/rest/routes.json",
    "content": "{\n  \"router\": {\n    \"middlewares\": [\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"RequestID\",\n        \"comment\": \"RequestID is a middleware that injects a request ID into the context of each\\nrequest. A request ID is a string of the form \\\"host.example.com/random-0001\\\",\\nwhere \\\"random\\\" is a base62 random string that uniquely identifies this go\\nprocess, and where the last number is an atomically incremented request\\ncounter.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/request_id.go\",\n        \"line\": 63\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"Logger\",\n        \"comment\": \"Logger is a middleware that logs the start and end of each request, along\\nwith some useful data about what was requested, what the response status was,\\nand how long it took to return. When standard output is a TTY, Logger will\\nprint in color, otherwise it will print in black and white. Logger prints a\\nrequest ID if one is provided.\\n\\nAlternatively, look at https://github.com/pressly/lg and the `lg.RequestLogger`\\nmiddleware pkg.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/logger.go\",\n        \"line\": 26\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"Recoverer\",\n        \"comment\": \"Recoverer is a middleware that recovers from panics, logs the panic (and a\\nbacktrace), and returns a HTTP 500 (Internal Server Error) status if\\npossible. Recoverer prints a request ID if one is provided.\\n\\nAlternatively, look at https://github.com/pressly/lg middleware pkgs.\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/recoverer.go\",\n        \"line\": 18\n      },\n      {\n        \"pkg\": \"github.com/go-chi/chi/middleware\",\n        \"func\": \"URLFormat\",\n        \"comment\": \"URLFormat is a middleware that parses the url extension from a request path and stores it\\non the context as a string under the key `middleware.URLFormatCtxKey`. The middleware will\\ntrim the suffix from the routing path and continue routing.\\n\\nRouters should not include a url parameter for the suffix when using this middleware.\\n\\nSample usage.. for url paths: `/articles/1`, `/articles/1.json` and `/articles/1.xml`\\n\\n func routes() http.Handler {\\n   r := chi.NewRouter()\\n   r.Use(middleware.URLFormat)\\n\\n   r.Get(\\\"/articles/{id}\\\", ListArticles)\\n\\n   return r\\n }\\n\\n func ListArticles(w http.ResponseWriter, r *http.Request) {\\n\\t  urlFormat, _ := r.Context().Value(middleware.URLFormatCtxKey).(string)\\n\\n\\t  switch urlFormat {\\n\\t  case \\\"json\\\":\\n\\t  \\trender.JSON(w, r, articles)\\n\\t  case \\\"xml:\\\"\\n\\t  \\trender.XML(w, r, articles)\\n\\t  default:\\n\\t  \\trender.JSON(w, r, articles)\\n\\t  }\\n}\\n\",\n        \"file\": \"github.com/go-chi/chi/middleware/url_format.go\",\n        \"line\": 45\n      },\n      {\n        \"pkg\": \"github.com/go-chi/render\",\n        \"func\": \"SetContentType.func1\",\n        \"comment\": \"\",\n        \"file\": \"github.com/go-chi/render/content_type.go\",\n        \"line\": 49,\n        \"anonymous\": true\n      }\n    ],\n    \"routes\": {\n      \"/\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func1\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 69,\n            \"anonymous\": true\n          }\n        }\n      },\n      \"/admin/*\": {\n        \"router\": {\n          \"middlewares\": [\n            {\n              \"pkg\": \"\",\n              \"func\": \"main.AdminOnly\",\n              \"comment\": \"AdminOnly middleware restricts access to just administrators.\\n\",\n              \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n              \"line\": 238\n            }\n          ],\n          \"routes\": {\n            \"/\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func1\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 225,\n                  \"anonymous\": true\n                }\n              }\n            },\n            \"/accounts\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func2\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 228,\n                  \"anonymous\": true\n                }\n              }\n            },\n            \"/users/{userId}\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.adminRouter.func3\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 231,\n                  \"anonymous\": true\n                }\n              }\n            }\n          }\n        }\n      },\n      \"/articles/*\": {\n        \"router\": {\n          \"middlewares\": [],\n          \"routes\": {\n            \"/\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [\n                    {\n                      \"pkg\": \"\",\n                      \"func\": \"main.paginate\",\n                      \"comment\": \"paginate is a stub, but very possible to implement middleware logic\\nto handle the request params for handling a paginated request.\\n\",\n                      \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                      \"line\": 251\n                    }\n                  ],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.ListArticles\",\n                  \"comment\": \"\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 117\n                },\n                \"POST\": {\n                  \"middlewares\": [],\n                  \"method\": \"POST\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.CreateArticle\",\n                  \"comment\": \"CreateArticle persists the posted Article and returns it\\nback to the client as an acknowledgement.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 158\n                }\n              }\n            },\n            \"/search\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.SearchArticles\",\n                  \"comment\": \"SearchArticles searches the Articles data for a matching article.\\nIt's just a stub, but you get the idea.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 152\n                }\n              }\n            },\n            \"/{articleID}/*\": {\n              \"router\": {\n                \"middlewares\": [\n                  {\n                    \"pkg\": \"\",\n                    \"func\": \"main.ArticleCtx\",\n                    \"comment\": \"ArticleCtx middleware is used to load an Article object from\\nthe URL parameters passed through as the request. In case\\nthe Article could not be found, we stop here and return a 404.\\n\",\n                    \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                    \"line\": 127\n                  }\n                ],\n                \"routes\": {\n                  \"/\": {\n                    \"handlers\": {\n                      \"DELETE\": {\n                        \"middlewares\": [],\n                        \"method\": \"DELETE\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.DeleteArticle\",\n                        \"comment\": \"DeleteArticle removes an existing Article from our persistent store.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 204\n                      },\n                      \"GET\": {\n                        \"middlewares\": [],\n                        \"method\": \"GET\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.GetArticle\",\n                        \"comment\": \"GetArticle returns the specific Article. You'll notice it just\\nfetches the Article right off the context, as its understood that\\nif we made it this far, the Article must be on the context. In case\\nits not due to a bug, then it will panic, and our Recoverer will save us.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 176\n                      },\n                      \"PUT\": {\n                        \"middlewares\": [],\n                        \"method\": \"PUT\",\n                        \"pkg\": \"\",\n                        \"func\": \"main.UpdateArticle\",\n                        \"comment\": \"UpdateArticle updates an existing Article in our persistent store.\\n\",\n                        \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                        \"line\": 189\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"/{articleSlug:[a-z-]+}\": {\n              \"handlers\": {\n                \"GET\": {\n                  \"middlewares\": [\n                    {\n                      \"pkg\": \"\",\n                      \"func\": \"main.ArticleCtx\",\n                      \"comment\": \"ArticleCtx middleware is used to load an Article object from\\nthe URL parameters passed through as the request. In case\\nthe Article could not be found, we stop here and return a 404.\\n\",\n                      \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                      \"line\": 127\n                    }\n                  ],\n                  \"method\": \"GET\",\n                  \"pkg\": \"\",\n                  \"func\": \"main.GetArticle\",\n                  \"comment\": \"GetArticle returns the specific Article. You'll notice it just\\nfetches the Article right off the context, as its understood that\\nif we made it this far, the Article must be on the context. In case\\nits not due to a bug, then it will panic, and our Recoverer will save us.\\n\",\n                  \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n                  \"line\": 176\n                }\n              }\n            }\n          }\n        }\n      },\n      \"/panic\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func3\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 77,\n            \"anonymous\": true\n          }\n        }\n      },\n      \"/ping\": {\n        \"handlers\": {\n          \"GET\": {\n            \"middlewares\": [],\n            \"method\": \"GET\",\n            \"pkg\": \"\",\n            \"func\": \"main.main.func2\",\n            \"comment\": \"\",\n            \"file\": \"github.com/go-chi/chi/_examples/rest/main.go\",\n            \"line\": 73,\n            \"anonymous\": true\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/rest/routes.md",
    "content": "# github.com/go-chi/chi\n\nWelcome to the chi/_examples/rest generated docs.\n\n## Routes\n\n<details>\n<summary>`/`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/**\n\t- _GET_\n\t\t- [main.main.func1](/_examples/rest/main.go#L69)\n\n</details>\n<details>\n<summary>`/admin/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func1](/_examples/rest/main.go#L225)\n\n</details>\n<details>\n<summary>`/admin/*/accounts`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/accounts**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func2](/_examples/rest/main.go#L228)\n\n</details>\n<details>\n<summary>`/admin/*/users/{userId}`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/admin/***\n\t- [main.AdminOnly](/_examples/rest/main.go#L238)\n\t- **/users/{userId}**\n\t\t- _GET_\n\t\t\t- [main.adminRouter.func3](/_examples/rest/main.go#L231)\n\n</details>\n<details>\n<summary>`/articles/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/**\n\t\t- _GET_\n\t\t\t- [main.paginate](/_examples/rest/main.go#L251)\n\t\t\t- [main.ListArticles](/_examples/rest/main.go#L117)\n\t\t- _POST_\n\t\t\t- [main.CreateArticle](/_examples/rest/main.go#L158)\n\n</details>\n<details>\n<summary>`/articles/*/search`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/search**\n\t\t- _GET_\n\t\t\t- [main.SearchArticles](/_examples/rest/main.go#L152)\n\n</details>\n<details>\n<summary>`/articles/*/{articleID}/*`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/{articleID}/***\n\t\t- [main.ArticleCtx](/_examples/rest/main.go#L127)\n\t\t- **/**\n\t\t\t- _DELETE_\n\t\t\t\t- [main.DeleteArticle](/_examples/rest/main.go#L204)\n\t\t\t- _GET_\n\t\t\t\t- [main.GetArticle](/_examples/rest/main.go#L176)\n\t\t\t- _PUT_\n\t\t\t\t- [main.UpdateArticle](/_examples/rest/main.go#L189)\n\n</details>\n<details>\n<summary>`/articles/*/{articleSlug:[a-z-]+}`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/articles/***\n\t- **/{articleSlug:[a-z-]+}**\n\t\t- _GET_\n\t\t\t- [main.ArticleCtx](/_examples/rest/main.go#L127)\n\t\t\t- [main.GetArticle](/_examples/rest/main.go#L176)\n\n</details>\n<details>\n<summary>`/panic`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/panic**\n\t- _GET_\n\t\t- [main.main.func3](/_examples/rest/main.go#L77)\n\n</details>\n<details>\n<summary>`/ping`</summary>\n\n- [RequestID](/middleware/request_id.go#L63)\n- [Logger](/middleware/logger.go#L26)\n- [Recoverer](/middleware/recoverer.go#L18)\n- [URLFormat](/middleware/url_format.go#L45)\n- [SetContentType.func1](https://github.com/go-chi/render/content_type.go#L49)\n- **/ping**\n\t- _GET_\n\t\t- [main.main.func2](/_examples/rest/main.go#L73)\n\n</details>\n\nTotal # of routes: 10\n\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/router-walk/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root.\"))\n\t})\n\n\tr.Route(\"/road\", func(r chi.Router) {\n\t\tr.Get(\"/left\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"left road\"))\n\t\t})\n\t\tr.Post(\"/right\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"right road\"))\n\t\t})\n\t})\n\n\tr.Put(\"/ping\", Ping)\n\n\twalkFunc := func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {\n\t\tfmt.Printf(\"%s %s\\n\", method, route)\n\t\treturn nil\n\t}\n\n\tif err := chi.Walk(r, walkFunc); err != nil {\n\t\tfmt.Printf(\"Logging err: %s\\n\", err.Error())\n\t}\n}\n\n// Ping returns pong\nfunc Ping(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"pong\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/todos-resource/main.go",
    "content": "//\n// Todos Resource\n// ==============\n// This example demonstrates a project structure that defines a subrouter and its\n// handlers on a struct, and mounting them as subrouters to a parent router.\n// See also _examples/rest for an in-depth example of a REST service, and apply\n// those same patterns to this structure.\n//\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/middleware\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.RealIP)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\".\"))\n\t})\n\n\tr.Mount(\"/users\", usersResource{}.Routes())\n\tr.Mount(\"/todos\", todosResource{}.Routes())\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/todos-resource/todos.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype todosResource struct{}\n\n// Routes creates a REST router for the todos resource\nfunc (rs todosResource) Routes() chi.Router {\n\tr := chi.NewRouter()\n\t// r.Use() // some middleware..\n\n\tr.Get(\"/\", rs.List)    // GET /todos - read a list of todos\n\tr.Post(\"/\", rs.Create) // POST /todos - create a new todo and persist it\n\tr.Put(\"/\", rs.Delete)\n\n\tr.Route(\"/{id}\", func(r chi.Router) {\n\t\t// r.Use(rs.TodoCtx) // lets have a todos map, and lets actually load/manipulate\n\t\tr.Get(\"/\", rs.Get)       // GET /todos/{id} - read a single todo by :id\n\t\tr.Put(\"/\", rs.Update)    // PUT /todos/{id} - update a single todo by :id\n\t\tr.Delete(\"/\", rs.Delete) // DELETE /todos/{id} - delete a single todo by :id\n\t\tr.Get(\"/sync\", rs.Sync)\n\t})\n\n\treturn r\n}\n\nfunc (rs todosResource) List(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todos list of stuff..\"))\n}\n\nfunc (rs todosResource) Create(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todos create\"))\n}\n\nfunc (rs todosResource) Get(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo get\"))\n}\n\nfunc (rs todosResource) Update(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo update\"))\n}\n\nfunc (rs todosResource) Delete(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo delete\"))\n}\n\nfunc (rs todosResource) Sync(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"todo sync\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/todos-resource/users.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\ntype usersResource struct{}\n\n// Routes creates a REST router for the todos resource\nfunc (rs usersResource) Routes() chi.Router {\n\tr := chi.NewRouter()\n\t// r.Use() // some middleware..\n\n\tr.Get(\"/\", rs.List)    // GET /todos - read a list of todos\n\tr.Post(\"/\", rs.Create) // POST /todos - create a new todo and persist it\n\tr.Put(\"/\", rs.Delete)\n\n\tr.Route(\"/{id}\", func(r chi.Router) {\n\t\t// r.Use(rs.TodoCtx) // lets have a todos map, and lets actually load/manipulate\n\t\tr.Get(\"/\", rs.Get)       // GET /todos/{id} - read a single todo by :id\n\t\tr.Put(\"/\", rs.Update)    // PUT /todos/{id} - update a single todo by :id\n\t\tr.Delete(\"/\", rs.Delete) // DELETE /todos/{id} - delete a single todo by :id\n\t})\n\n\treturn r\n}\n\nfunc (rs usersResource) List(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa list of stuff..\"))\n}\n\nfunc (rs usersResource) Create(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa create\"))\n}\n\nfunc (rs usersResource) Get(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa get\"))\n}\n\nfunc (rs usersResource) Update(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa update\"))\n}\n\nfunc (rs usersResource) Delete(w http.ResponseWriter, r *http.Request) {\n\tw.Write([]byte(\"aaa delete\"))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/data/article.go",
    "content": "package data\n\n// Article is runtime object, that's not meant to be sent via REST.\ntype Article struct {\n\tID                     int      `db:\"id\" json:\"id\" xml:\"id\"`\n\tTitle                  string   `db:\"title\" json:\"title\" xml:\"title\"`\n\tData                   []string `db:\"data,stringarray\" json:\"data\" xml:\"data\"`\n\tCustomDataForAuthUsers string   `db:\"custom_data\" json:\"-\" xml:\"-\"`\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/data/errors.go",
    "content": "package data\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/render\"\n)\n\nvar (\n\tErrUnauthorized = errors.New(\"Unauthorized\")\n\tErrForbidden    = errors.New(\"Forbidden\")\n\tErrNotFound     = errors.New(\"Resource not found\")\n)\n\nfunc PresentError(r *http.Request, err error) (*http.Request, interface{}) {\n\tswitch err {\n\tcase ErrUnauthorized:\n\t\trender.Status(r, 401)\n\tcase ErrForbidden:\n\t\trender.Status(r, 403)\n\tcase ErrNotFound:\n\t\trender.Status(r, 404)\n\tdefault:\n\t\trender.Status(r, 500)\n\t}\n\treturn r, map[string]string{\"error\": err.Error()}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/main.go",
    "content": "//\n// Versions\n// ========\n// This example demonstrates the use of the render subpackage, with\n// a quick concept for how to support multiple api versions.\n//\npackage main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v1\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v2\"\n\t\"github.com/go-chi/chi/_examples/versions/presenter/v3\"\n\t\"github.com/go-chi/chi/middleware\"\n\t\"github.com/go-chi/render\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\tr.Use(middleware.RequestID)\n\tr.Use(middleware.Logger)\n\tr.Use(middleware.Recoverer)\n\n\t// API version 3.\n\tr.Route(\"/v3\", func(r chi.Router) {\n\t\tr.Use(apiVersionCtx(\"v3\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\t// API version 2.\n\tr.Route(\"/v2\", func(r chi.Router) {\n\t\tr.Use(apiVersionCtx(\"v2\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\t// API version 1.\n\tr.Route(\"/v1\", func(r chi.Router) {\n\t\tr.Use(randomErrorMiddleware) // Simulate random error, ie. version 1 is buggy.\n\t\tr.Use(apiVersionCtx(\"v1\"))\n\t\tr.Mount(\"/articles\", articleRouter())\n\t})\n\n\thttp.ListenAndServe(\":3333\", r)\n}\n\nfunc apiVersionCtx(version string) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), \"api.version\", version))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n}\n\nfunc articleRouter() http.Handler {\n\tr := chi.NewRouter()\n\tr.Get(\"/\", listArticles)\n\tr.Route(\"/{articleID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", getArticle)\n\t\t// r.Put(\"/\", updateArticle)\n\t\t// r.Delete(\"/\", deleteArticle)\n\t})\n\treturn r\n}\n\nfunc listArticles(w http.ResponseWriter, r *http.Request) {\n\tarticles := make(chan render.Renderer, 5)\n\n\t// Load data asynchronously into the channel (simulate slow storage):\n\tgo func() {\n\t\tfor i := 1; i <= 10; i++ {\n\t\t\tarticle := &data.Article{\n\t\t\t\tID:    i,\n\t\t\t\tTitle: fmt.Sprintf(\"Article #%v\", i),\n\t\t\t\tData:  []string{\"one\", \"two\", \"three\", \"four\"},\n\t\t\t\tCustomDataForAuthUsers: \"secret data for auth'd users only\",\n\t\t\t}\n\n\t\t\tapiVersion := r.Context().Value(\"api.version\").(string)\n\t\t\tswitch apiVersion {\n\t\t\tcase \"v1\":\n\t\t\t\tarticles <- v1.NewArticleResponse(article)\n\t\t\tcase \"v2\":\n\t\t\t\tarticles <- v2.NewArticleResponse(article)\n\t\t\tdefault:\n\t\t\t\tarticles <- v3.NewArticleResponse(article)\n\t\t\t}\n\n\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t}\n\t\tclose(articles)\n\t}()\n\n\t// Start streaming data from the channel.\n\trender.Respond(w, r, articles)\n}\n\nfunc getArticle(w http.ResponseWriter, r *http.Request) {\n\t// Load article.\n\tif chi.URLParam(r, \"articleID\") != \"1\" {\n\t\trender.Respond(w, r, data.ErrNotFound)\n\t\treturn\n\t}\n\tarticle := &data.Article{\n\t\tID:    1,\n\t\tTitle: \"Article #1\",\n\t\tData:  []string{\"one\", \"two\", \"three\", \"four\"},\n\t\tCustomDataForAuthUsers: \"secret data for auth'd users only\",\n\t}\n\n\t// Simulate some context values:\n\t// 1. ?auth=true simluates authenticated session/user.\n\t// 2. ?error=true simulates random error.\n\tif r.URL.Query().Get(\"auth\") != \"\" {\n\t\tr = r.WithContext(context.WithValue(r.Context(), \"auth\", true))\n\t}\n\tif r.URL.Query().Get(\"error\") != \"\" {\n\t\trender.Respond(w, r, errors.New(\"error\"))\n\t\treturn\n\t}\n\n\tvar payload render.Renderer\n\n\tapiVersion := r.Context().Value(\"api.version\").(string)\n\tswitch apiVersion {\n\tcase \"v1\":\n\t\tpayload = v1.NewArticleResponse(article)\n\tcase \"v2\":\n\t\tpayload = v2.NewArticleResponse(article)\n\tdefault:\n\t\tpayload = v3.NewArticleResponse(article)\n\t}\n\n\trender.Render(w, r, payload)\n}\n\nfunc randomErrorMiddleware(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\trand.Seed(time.Now().Unix())\n\n\t\t// One in three chance of random error.\n\t\tif rand.Int31n(3) == 0 {\n\t\t\terrors := []error{data.ErrUnauthorized, data.ErrForbidden, data.ErrNotFound}\n\t\t\trender.Respond(w, r, errors[rand.Intn(len(errors))])\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/presenter/v1/article.go",
    "content": "package v1\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 1.\ntype Article struct {\n\t*data.Article\n\n\tData map[string]bool `json:\"data\" xml:\"data\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/presenter/v2/article.go",
    "content": "package v2\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 2.\ntype Article struct {\n\t// *v3.Article `json:\",inline\" xml:\",inline\"`\n\n\t*data.Article\n\n\t// Additional fields.\n\tSelfURL string `json:\"self_url\" xml:\"self_url\"`\n\n\t// Omitted fields.\n\tURL interface{} `json:\"url,omitempty\" xml:\"url,omitempty\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\ta.SelfURL = fmt.Sprintf(\"http://localhost:3333/v2?id=%v\", a.ID)\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/_examples/versions/presenter/v3/article.go",
    "content": "package v3\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi/_examples/versions/data\"\n)\n\n// Article presented in API version 2.\ntype Article struct {\n\t*data.Article `json:\",inline\" xml:\",inline\"`\n\n\t// Additional fields.\n\tURL        string `json:\"url\" xml:\"url\"`\n\tViewsCount int64  `json:\"views_count\" xml:\"views_count\"`\n\tAPIVersion string `json:\"api_version\" xml:\"api_version\"`\n\n\t// Omitted fields.\n\t// Show custom_data explicitly for auth'd users only.\n\tCustomDataForAuthUsers interface{} `json:\"custom_data,omitempty\" xml:\"custom_data,omitempty\"`\n}\n\nfunc (a *Article) Render(w http.ResponseWriter, r *http.Request) error {\n\ta.ViewsCount = rand.Int63n(100000)\n\ta.URL = fmt.Sprintf(\"http://localhost:3333/v3/?id=%v\", a.ID)\n\n\t// Only show to auth'd user.\n\tif _, ok := r.Context().Value(\"auth\").(bool); ok {\n\t\ta.CustomDataForAuthUsers = a.Article.CustomDataForAuthUsers\n\t}\n\n\treturn nil\n}\n\nfunc NewArticleResponse(article *data.Article) *Article {\n\treturn &Article{Article: article}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/chain.go",
    "content": "package chi\n\nimport \"net/http\"\n\n// Chain returns a Middlewares type from a slice of middleware handlers.\nfunc Chain(middlewares ...func(http.Handler) http.Handler) Middlewares {\n\treturn Middlewares(middlewares)\n}\n\n// Handler builds and returns a http.Handler from the chain of middlewares,\n// with `h http.Handler` as the final handler.\nfunc (mws Middlewares) Handler(h http.Handler) http.Handler {\n\treturn &ChainHandler{mws, h, chain(mws, h)}\n}\n\n// HandlerFunc builds and returns a http.Handler from the chain of middlewares,\n// with `h http.Handler` as the final handler.\nfunc (mws Middlewares) HandlerFunc(h http.HandlerFunc) http.Handler {\n\treturn &ChainHandler{mws, h, chain(mws, h)}\n}\n\n// ChainHandler is a http.Handler with support for handler composition and\n// execution.\ntype ChainHandler struct {\n\tMiddlewares Middlewares\n\tEndpoint    http.Handler\n\tchain       http.Handler\n}\n\nfunc (c *ChainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tc.chain.ServeHTTP(w, r)\n}\n\n// chain builds a http.Handler composed of an inline middleware stack and endpoint\n// handler in the order they are passed.\nfunc chain(middlewares []func(http.Handler) http.Handler, endpoint http.Handler) http.Handler {\n\t// Return ahead of time if there aren't any middlewares for the chain\n\tif len(middlewares) == 0 {\n\t\treturn endpoint\n\t}\n\n\t// Wrap the end handler with the middleware chain\n\th := middlewares[len(middlewares)-1](endpoint)\n\tfor i := len(middlewares) - 2; i >= 0; i-- {\n\t\th = middlewares[i](h)\n\t}\n\n\treturn h\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/chi.go",
    "content": "//\n// Package chi is a small, idiomatic and composable router for building HTTP services.\n//\n// chi requires Go 1.7 or newer.\n//\n// Example:\n//  package main\n//\n//  import (\n//  \t\"net/http\"\n//\n//  \t\"github.com/go-chi/chi\"\n//  \t\"github.com/go-chi/chi/middleware\"\n//  )\n//\n//  func main() {\n//  \tr := chi.NewRouter()\n//  \tr.Use(middleware.Logger)\n//  \tr.Use(middleware.Recoverer)\n//\n//  \tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n//  \t\tw.Write([]byte(\"root.\"))\n//  \t})\n//\n//  \thttp.ListenAndServe(\":3333\", r)\n//  }\n//\n// See github.com/go-chi/chi/_examples/ for more in-depth examples.\n//\n// URL patterns allow for easy matching of path components in HTTP\n// requests. The matching components can then be accessed using\n// chi.URLParam(). All patterns must begin with a slash.\n//\n// A simple named placeholder {name} matches any sequence of characters\n// up to the next / or the end of the URL. Trailing slashes on paths must\n// be handled explicitly.\n//\n// A placeholder with a name followed by a colon allows a regular\n// expression match, for example {number:\\\\d+}. The regular expression\n// syntax is Go's normal regexp RE2 syntax, except that regular expressions\n// including { or } are not supported, and / will never be\n// matched. An anonymous regexp pattern is allowed, using an empty string\n// before the colon in the placeholder, such as {:\\\\d+}\n//\n// The special placeholder of asterisk matches the rest of the requested\n// URL. Any trailing characters in the pattern are ignored. This is the only\n// placeholder which will match / characters.\n//\n// Examples:\n//  \"/user/{name}\" matches \"/user/jsmith\" but not \"/user/jsmith/info\" or \"/user/jsmith/\"\n//  \"/user/{name}/info\" matches \"/user/jsmith/info\"\n//  \"/page/*\" matches \"/page/intro/latest\"\n//  \"/page/*/index\" also matches \"/page/intro/latest\"\n//  \"/date/{yyyy:\\\\d\\\\d\\\\d\\\\d}/{mm:\\\\d\\\\d}/{dd:\\\\d\\\\d}\" matches \"/date/2017/04/01\"\n//\npackage chi\n\nimport \"net/http\"\n\n// NewRouter returns a new Mux object that implements the Router interface.\nfunc NewRouter() *Mux {\n\treturn NewMux()\n}\n\n// Router consisting of the core routing methods used by chi's Mux,\n// using only the standard net/http.\ntype Router interface {\n\thttp.Handler\n\tRoutes\n\n\t// Use appends one of more middlewares onto the Router stack.\n\tUse(middlewares ...func(http.Handler) http.Handler)\n\n\t// With adds inline middlewares for an endpoint handler.\n\tWith(middlewares ...func(http.Handler) http.Handler) Router\n\n\t// Group adds a new inline-Router along the current routing\n\t// path, with a fresh middleware stack for the inline-Router.\n\tGroup(fn func(r Router)) Router\n\n\t// Route mounts a sub-Router along a `pattern`` string.\n\tRoute(pattern string, fn func(r Router)) Router\n\n\t// Mount attaches another http.Handler along ./pattern/*\n\tMount(pattern string, h http.Handler)\n\n\t// Handle and HandleFunc adds routes for `pattern` that matches\n\t// all HTTP methods.\n\tHandle(pattern string, h http.Handler)\n\tHandleFunc(pattern string, h http.HandlerFunc)\n\n\t// Method and MethodFunc adds routes for `pattern` that matches\n\t// the `method` HTTP method.\n\tMethod(method, pattern string, h http.Handler)\n\tMethodFunc(method, pattern string, h http.HandlerFunc)\n\n\t// HTTP-method routing along `pattern`\n\tConnect(pattern string, h http.HandlerFunc)\n\tDelete(pattern string, h http.HandlerFunc)\n\tGet(pattern string, h http.HandlerFunc)\n\tHead(pattern string, h http.HandlerFunc)\n\tOptions(pattern string, h http.HandlerFunc)\n\tPatch(pattern string, h http.HandlerFunc)\n\tPost(pattern string, h http.HandlerFunc)\n\tPut(pattern string, h http.HandlerFunc)\n\tTrace(pattern string, h http.HandlerFunc)\n\n\t// NotFound defines a handler to respond whenever a route could\n\t// not be found.\n\tNotFound(h http.HandlerFunc)\n\n\t// MethodNotAllowed defines a handler to respond whenever a method is\n\t// not allowed.\n\tMethodNotAllowed(h http.HandlerFunc)\n}\n\n// Routes interface adds two methods for router traversal, which is also\n// used by the `docgen` subpackage to generation documentation for Routers.\ntype Routes interface {\n\t// Routes returns the routing tree in an easily traversable structure.\n\tRoutes() []Route\n\n\t// Middlewares returns the list of middlewares in use by the router.\n\tMiddlewares() Middlewares\n\n\t// Match searches the routing tree for a handler that matches\n\t// the method/path - similar to routing a http request, but without\n\t// executing the handler thereafter.\n\tMatch(rctx *Context, method, path string) bool\n}\n\n// Middlewares type is a slice of standard middleware handlers with methods\n// to compose middleware chains and http.Handler's.\ntype Middlewares []func(http.Handler) http.Handler\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/context.go",
    "content": "package chi\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"net/http\"\n\t\"strings\"\n)\n\nvar (\n\t// RouteCtxKey is the context.Context key to store the request context.\n\tRouteCtxKey = &contextKey{\"RouteContext\"}\n)\n\n// Context is the default routing context set on the root node of a\n// request context to track route patterns, URL parameters and\n// an optional routing path.\ntype Context struct {\n\tRoutes Routes\n\n\t// Routing path/method override used during the route search.\n\t// See Mux#routeHTTP method.\n\tRoutePath   string\n\tRouteMethod string\n\n\t// Routing pattern stack throughout the lifecycle of the request,\n\t// across all connected routers. It is a record of all matching\n\t// patterns across a stack of sub-routers.\n\tRoutePatterns []string\n\n\t// URLParams are the stack of routeParams captured during the\n\t// routing lifecycle across a stack of sub-routers.\n\tURLParams RouteParams\n\n\t// The endpoint routing pattern that matched the request URI path\n\t// or `RoutePath` of the current sub-router. This value will update\n\t// during the lifecycle of a request passing through a stack of\n\t// sub-routers.\n\troutePattern string\n\n\t// Route parameters matched for the current sub-router. It is\n\t// intentionally unexported so it cant be tampered.\n\trouteParams RouteParams\n\n\t// methodNotAllowed hint\n\tmethodNotAllowed bool\n}\n\n// NewRouteContext returns a new routing Context object.\nfunc NewRouteContext() *Context {\n\treturn &Context{}\n}\n\n// Reset a routing context to its initial state.\nfunc (x *Context) Reset() {\n\tx.Routes = nil\n\tx.RoutePath = \"\"\n\tx.RouteMethod = \"\"\n\tx.RoutePatterns = x.RoutePatterns[:0]\n\tx.URLParams.Keys = x.URLParams.Keys[:0]\n\tx.URLParams.Values = x.URLParams.Values[:0]\n\n\tx.routePattern = \"\"\n\tx.routeParams.Keys = x.routeParams.Keys[:0]\n\tx.routeParams.Values = x.routeParams.Values[:0]\n\tx.methodNotAllowed = false\n}\n\n// URLParam returns the corresponding URL parameter value from the request\n// routing context.\nfunc (x *Context) URLParam(key string) string {\n\tfor k := len(x.URLParams.Keys) - 1; k >= 0; k-- {\n\t\tif x.URLParams.Keys[k] == key {\n\t\t\treturn x.URLParams.Values[k]\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// RoutePattern builds the routing pattern string for the particular\n// request, at the particular point during routing. This means, the value\n// will change throughout the execution of a request in a router. That is\n// why its advised to only use this value after calling the next handler.\n//\n// For example,\n//\n// func Instrument(next http.Handler) http.Handler {\n//   return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n//     next.ServeHTTP(w, r)\n//     routePattern := chi.RouteContext(r.Context()).RoutePattern()\n//     measure(w, r, routePattern)\n// \t })\n// }\nfunc (x *Context) RoutePattern() string {\n\troutePattern := strings.Join(x.RoutePatterns, \"\")\n\treturn strings.Replace(routePattern, \"/*/\", \"/\", -1)\n}\n\n// RouteContext returns chi's routing Context object from a\n// http.Request Context.\nfunc RouteContext(ctx context.Context) *Context {\n\treturn ctx.Value(RouteCtxKey).(*Context)\n}\n\n// URLParam returns the url parameter from a http.Request object.\nfunc URLParam(r *http.Request, key string) string {\n\tif rctx := RouteContext(r.Context()); rctx != nil {\n\t\treturn rctx.URLParam(key)\n\t}\n\treturn \"\"\n}\n\n// URLParamFromCtx returns the url parameter from a http.Request Context.\nfunc URLParamFromCtx(ctx context.Context, key string) string {\n\tif rctx := RouteContext(ctx); rctx != nil {\n\t\treturn rctx.URLParam(key)\n\t}\n\treturn \"\"\n}\n\n// RouteParams is a structure to track URL routing parameters efficiently.\ntype RouteParams struct {\n\tKeys, Values []string\n}\n\n// Add will append a URL parameter to the end of the route param\nfunc (s *RouteParams) Add(key, value string) {\n\t(*s).Keys = append((*s).Keys, key)\n\t(*s).Values = append((*s).Values, value)\n}\n\n// ServerBaseContext wraps an http.Handler to set the request context to the\n// `baseCtx`.\nfunc ServerBaseContext(baseCtx context.Context, h http.Handler) http.Handler {\n\tfn := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\t\tbaseCtx := baseCtx\n\n\t\t// Copy over default net/http server context keys\n\t\tif v, ok := ctx.Value(http.ServerContextKey).(*http.Server); ok {\n\t\t\tbaseCtx = context.WithValue(baseCtx, http.ServerContextKey, v)\n\t\t}\n\t\tif v, ok := ctx.Value(http.LocalAddrContextKey).(net.Addr); ok {\n\t\t\tbaseCtx = context.WithValue(baseCtx, http.LocalAddrContextKey, v)\n\t\t}\n\n\t\th.ServeHTTP(w, r.WithContext(baseCtx))\n\t})\n\treturn fn\n}\n\n// contextKey is a value for use with context.WithValue. It's used as\n// a pointer so it fits in an interface{} without allocation. This technique\n// for defining context keys was copied from Go 1.7's new use of context in net/http.\ntype contextKey struct {\n\tname string\n}\n\nfunc (k *contextKey) String() string {\n\treturn \"chi context value \" + k.name\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/closenotify17.go",
    "content": "// +build go1.7,!go1.8\n\npackage middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// CloseNotify is a middleware that cancels ctx when the underlying\n// connection has gone away. It can be used to cancel long operations\n// on the server when the client disconnects before the response is ready.\n//\n// Note: this behaviour is standard in Go 1.8+, so the middleware does nothing\n// on 1.8+ and exists just for backwards compatibility.\nfunc CloseNotify(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tcn, ok := w.(http.CloseNotifier)\n\t\tif !ok {\n\t\t\tpanic(\"chi/middleware: CloseNotify expects http.ResponseWriter to implement http.CloseNotifier interface\")\n\t\t}\n\t\tcloseNotifyCh := cn.CloseNotify()\n\n\t\tctx, cancel := context.WithCancel(r.Context())\n\t\tdefer cancel()\n\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\treturn\n\t\t\tcase <-closeNotifyCh:\n\t\t\t\tcancel()\n\t\t\t\treturn\n\t\t\t}\n\t\t}()\n\n\t\tr = r.WithContext(ctx)\n\t\tnext.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/closenotify18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"net/http\"\n)\n\n// CloseNotify is a middleware that cancels ctx when the underlying\n// connection has gone away. It can be used to cancel long operations\n// on the server when the client disconnects before the response is ready.\n//\n// Note: this behaviour is standard in Go 1.8+, so the middleware does nothing\n// on 1.8+ and exists just for backwards compatibility.\nfunc CloseNotify(next http.Handler) http.Handler {\n\treturn next\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/compress.go",
    "content": "package middleware\n\nimport (\n\t\"bufio\"\n\t\"compress/flate\"\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"strings\"\n)\n\ntype encoding int\n\nconst (\n\tencodingNone encoding = iota\n\tencodingGzip\n\tencodingDeflate\n)\n\nvar defaultContentTypes = map[string]struct{}{\n\t\"text/html\":                struct{}{},\n\t\"text/css\":                 struct{}{},\n\t\"text/plain\":               struct{}{},\n\t\"text/javascript\":          struct{}{},\n\t\"application/javascript\":   struct{}{},\n\t\"application/x-javascript\": struct{}{},\n\t\"application/json\":         struct{}{},\n\t\"application/atom+xml\":     struct{}{},\n\t\"application/rss+xml\":      struct{}{},\n}\n\n// DefaultCompress is a middleware that compresses response\n// body of predefined content types to a data format based\n// on Accept-Encoding request header. It uses a default\n// compression level.\nfunc DefaultCompress(next http.Handler) http.Handler {\n\treturn Compress(flate.DefaultCompression)(next)\n}\n\n// Compress is a middleware that compresses response\n// body of a given content types to a data format based\n// on Accept-Encoding request header. It uses a given\n// compression level.\nfunc Compress(level int, types ...string) func(next http.Handler) http.Handler {\n\tcontentTypes := defaultContentTypes\n\tif len(types) > 0 {\n\t\tcontentTypes = make(map[string]struct{}, len(types))\n\t\tfor _, t := range types {\n\t\t\tcontentTypes[t] = struct{}{}\n\t\t}\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tmcw := &maybeCompressResponseWriter{\n\t\t\t\tResponseWriter: w,\n\t\t\t\tw:              w,\n\t\t\t\tcontentTypes:   contentTypes,\n\t\t\t\tencoding:       selectEncoding(r.Header),\n\t\t\t\tlevel:          level,\n\t\t\t}\n\t\t\tdefer mcw.Close()\n\n\t\t\tnext.ServeHTTP(mcw, r)\n\t\t}\n\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\nfunc selectEncoding(h http.Header) encoding {\n\tenc := h.Get(\"Accept-Encoding\")\n\n\tswitch {\n\t// TODO:\n\t// case \"br\":    // Brotli, experimental. Firefox 2016, to-be-in Chromium.\n\t// case \"lzma\":  // Opera.\n\t// case \"sdch\":  // Chrome, Android. Gzip output + dictionary header.\n\n\tcase strings.Contains(enc, \"gzip\"):\n\t\t// TODO: Exception for old MSIE browsers that can't handle non-HTML?\n\t\t// https://zoompf.com/blog/2012/02/lose-the-wait-http-compression\n\t\treturn encodingGzip\n\n\tcase strings.Contains(enc, \"deflate\"):\n\t\t// HTTP 1.1 \"deflate\" (RFC 2616) stands for DEFLATE data (RFC 1951)\n\t\t// wrapped with zlib (RFC 1950). The zlib wrapper uses Adler-32\n\t\t// checksum compared to CRC-32 used in \"gzip\" and thus is faster.\n\t\t//\n\t\t// But.. some old browsers (MSIE, Safari 5.1) incorrectly expect\n\t\t// raw DEFLATE data only, without the mentioned zlib wrapper.\n\t\t// Because of this major confusion, most modern browsers try it\n\t\t// both ways, first looking for zlib headers.\n\t\t// Quote by Mark Adler: http://stackoverflow.com/a/9186091/385548\n\t\t//\n\t\t// The list of browsers having problems is quite big, see:\n\t\t// http://zoompf.com/blog/2012/02/lose-the-wait-http-compression\n\t\t// https://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests/results\n\t\t//\n\t\t// That's why we prefer gzip over deflate. It's just more reliable\n\t\t// and not significantly slower than gzip.\n\t\treturn encodingDeflate\n\n\t\t// NOTE: Not implemented, intentionally:\n\t\t// case \"compress\": // LZW. Deprecated.\n\t\t// case \"bzip2\":    // Too slow on-the-fly.\n\t\t// case \"zopfli\":   // Too slow on-the-fly.\n\t\t// case \"xz\":       // Too slow on-the-fly.\n\t}\n\n\treturn encodingNone\n}\n\ntype maybeCompressResponseWriter struct {\n\thttp.ResponseWriter\n\tw            io.Writer\n\tencoding     encoding\n\tcontentTypes map[string]struct{}\n\tlevel        int\n\twroteHeader  bool\n}\n\nfunc (w *maybeCompressResponseWriter) WriteHeader(code int) {\n\tif w.wroteHeader {\n\t\treturn\n\t}\n\tw.wroteHeader = true\n\tdefer w.ResponseWriter.WriteHeader(code)\n\n\t// Already compressed data?\n\tif w.ResponseWriter.Header().Get(\"Content-Encoding\") != \"\" {\n\t\treturn\n\t}\n\t// The content-length after compression is unknown\n\tw.ResponseWriter.Header().Del(\"Content-Length\")\n\n\t// Parse the first part of the Content-Type response header.\n\tcontentType := \"\"\n\tparts := strings.Split(w.ResponseWriter.Header().Get(\"Content-Type\"), \";\")\n\tif len(parts) > 0 {\n\t\tcontentType = parts[0]\n\t}\n\n\t// Is the content type compressable?\n\tif _, ok := w.contentTypes[contentType]; !ok {\n\t\treturn\n\t}\n\n\t// Select the compress writer.\n\tswitch w.encoding {\n\tcase encodingGzip:\n\t\tgw, err := gzip.NewWriterLevel(w.ResponseWriter, w.level)\n\t\tif err != nil {\n\t\t\tw.w = w.ResponseWriter\n\t\t\treturn\n\t\t}\n\t\tw.w = gw\n\t\tw.ResponseWriter.Header().Set(\"Content-Encoding\", \"gzip\")\n\n\tcase encodingDeflate:\n\t\tdw, err := flate.NewWriter(w.ResponseWriter, w.level)\n\t\tif err != nil {\n\t\t\tw.w = w.ResponseWriter\n\t\t\treturn\n\t\t}\n\t\tw.w = dw\n\t\tw.ResponseWriter.Header().Set(\"Content-Encoding\", \"deflate\")\n\t}\n}\n\nfunc (w *maybeCompressResponseWriter) Write(p []byte) (int, error) {\n\tif !w.wroteHeader {\n\t\tw.WriteHeader(http.StatusOK)\n\t}\n\n\treturn w.w.Write(p)\n}\n\nfunc (w *maybeCompressResponseWriter) Flush() {\n\tif f, ok := w.w.(http.Flusher); ok {\n\t\tf.Flush()\n\t}\n}\n\nfunc (w *maybeCompressResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\tif hj, ok := w.w.(http.Hijacker); ok {\n\t\treturn hj.Hijack()\n\t}\n\treturn nil, nil, errors.New(\"chi/middleware: http.Hijacker is unavailable on the writer\")\n}\n\nfunc (w *maybeCompressResponseWriter) CloseNotify() <-chan bool {\n\tif cn, ok := w.w.(http.CloseNotifier); ok {\n\t\treturn cn.CloseNotify()\n\t}\n\n\t// If the underlying writer does not implement http.CloseNotifier, return\n\t// a channel that never receives a value. The semantics here is that the\n\t// client never disconnnects before the request is processed by the\n\t// http.Handler, which is close enough to the default behavior (when\n\t// CloseNotify() is not even called).\n\treturn make(chan bool, 1)\n}\n\nfunc (w *maybeCompressResponseWriter) Close() error {\n\tif c, ok := w.w.(io.WriteCloser); ok {\n\t\treturn c.Close()\n\t}\n\treturn errors.New(\"chi/middleware: io.WriteCloser is unavailable on the writer\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/compress18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n)\n\nfunc (w *maybeCompressResponseWriter) Push(target string, opts *http.PushOptions) error {\n\tif ps, ok := w.w.(http.Pusher); ok {\n\t\treturn ps.Push(target, opts)\n\t}\n\treturn errors.New(\"chi/middleware: http.Pusher is unavailable on the writer\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/content_charset.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// ContentCharset generates a handler that writes a 415 Unsupported Media Type response if none of the charsets match.\n// An empty charset will allow requests with no Content-Type header or no specified charset.\nfunc ContentCharset(charsets ...string) func(next http.Handler) http.Handler {\n\tfor i, c := range charsets {\n\t\tcharsets[i] = strings.ToLower(c)\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif !contentEncoding(r.Header.Get(\"Content-Type\"), charsets...) {\n\t\t\t\tw.WriteHeader(http.StatusUnsupportedMediaType)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n}\n\n// Check the content encoding against a list of acceptable values.\nfunc contentEncoding(ce string, charsets ...string) bool {\n\t_, ce = split(strings.ToLower(ce), \";\")\n\t_, ce = split(ce, \"charset=\")\n\tce, _ = split(ce, \";\")\n\tfor _, c := range charsets {\n\t\tif ce == c {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Split a string in two parts, cleaning any whitespace.\nfunc split(str, sep string) (string, string) {\n\tvar a, b string\n\tvar parts = strings.SplitN(str, sep, 2)\n\ta = strings.TrimSpace(parts[0])\n\tif len(parts) == 2 {\n\t\tb = strings.TrimSpace(parts[1])\n\t}\n\n\treturn a, b\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/content_charset_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestContentCharset(t *testing.T) {\n\tt.Parallel()\n\n\tvar tests = []struct {\n\t\tname                string\n\t\tinputValue          string\n\t\tinputContentCharset []string\n\t\twant                int\n\t}{\n\t\t{\n\t\t\t\"should accept requests with a matching charset\",\n\t\t\t\"application/json; charset=UTF-8\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should be case-insensitive\",\n\t\t\t\"application/json; charset=utf-8\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with a matching charset with extra values\",\n\t\t\t\"application/json; foo=bar; charset=UTF-8; spam=eggs\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with a matching charset when multiple charsets are supported\",\n\t\t\t\"text/xml; charset=UTF-8\",\n\t\t\t[]string{\"UTF-8\", \"Latin-1\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should accept requests with no charset if empty charset headers are allowed\",\n\t\t\t\"text/xml\",\n\t\t\t[]string{\"UTF-8\", \"\"},\n\t\t\thttp.StatusOK,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with no charset if empty charset headers are not allowed\",\n\t\t\t\"text/xml\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with a mismatching charset\",\n\t\t\t\"text/plain; charset=Latin-1\",\n\t\t\t[]string{\"UTF-8\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t\t{\n\t\t\t\"should not accept requests with a mismatching charset even if empty charsets are allowed\",\n\t\t\t\"text/plain; charset=Latin-1\",\n\t\t\t[]string{\"UTF-8\", \"\"},\n\t\t\thttp.StatusUnsupportedMediaType,\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tvar tt = tt\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tvar recorder = httptest.NewRecorder()\n\n\t\t\tvar r = chi.NewRouter()\n\t\t\tr.Use(ContentCharset(tt.inputContentCharset...))\n\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {})\n\n\t\t\tvar req, _ = http.NewRequest(\"GET\", \"/\", nil)\n\t\t\treq.Header.Set(\"Content-Type\", tt.inputValue)\n\n\t\t\tr.ServeHTTP(recorder, req)\n\t\t\tvar res = recorder.Result()\n\n\t\t\tif res.StatusCode != tt.want {\n\t\t\t\tt.Errorf(\"response is incorrect, got %d, want %d\", recorder.Code, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestSplit(t *testing.T) {\n\tt.Parallel()\n\n\tvar s1, s2 = split(\"  type1;type2  \", \";\")\n\n\tif s1 != \"type1\" || s2 != \"type2\" {\n\t\tt.Errorf(\"Want type1, type2 got %s, %s\", s1, s2)\n\t}\n\n\ts1, s2 = split(\"type1  \", \";\")\n\n\tif s1 != \"type1\" {\n\t\tt.Errorf(\"Want \\\"type1\\\" got \\\"%s\\\"\", s1)\n\t}\n}\n\nfunc TestContentEncoding(t *testing.T) {\n\tt.Parallel()\n\n\tif !contentEncoding(\"application/json; foo=bar; charset=utf-8; spam=eggs\", []string{\"utf-8\"}...) {\n\t\tt.Error(\"Want true, got false\")\n\t}\n\n\tif contentEncoding(\"text/plain; charset=latin-1\", []string{\"utf-8\"}...) {\n\t\tt.Error(\"Want false, got true\")\n\t}\n\n\tif !contentEncoding(\"text/xml; charset=UTF-8\", []string{\"latin-1\", \"utf-8\"}...) {\n\t\tt.Error(\"Want true, got false\")\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/content_type.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// SetHeader is a convenience handler to set a response header key/value\nfunc SetHeader(key, value string) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(key, value)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\n// AllowContentType enforces a whitelist of request Content-Types otherwise responds\n// with a 415 Unsupported Media Type status.\nfunc AllowContentType(contentTypes ...string) func(next http.Handler) http.Handler {\n\tcT := []string{}\n\tfor _, t := range contentTypes {\n\t\tcT = append(cT, strings.ToLower(t))\n\t}\n\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\ts := strings.ToLower(strings.TrimSpace(r.Header.Get(\"Content-Type\")))\n\t\t\tif i := strings.Index(s, \";\"); i > -1 {\n\t\t\t\ts = s[0:i]\n\t\t\t}\n\n\t\t\tfor _, t := range cT {\n\t\t\t\tif t == s {\n\t\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tw.WriteHeader(http.StatusUnsupportedMediaType)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/get_head.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// GetHead automatically route undefined HEAD requests to GET handlers.\nfunc GetHead(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif r.Method == \"HEAD\" {\n\t\t\trctx := chi.RouteContext(r.Context())\n\t\t\troutePath := rctx.RoutePath\n\t\t\tif routePath == \"\" {\n\t\t\t\tif r.URL.RawPath != \"\" {\n\t\t\t\t\troutePath = r.URL.RawPath\n\t\t\t\t} else {\n\t\t\t\t\troutePath = r.URL.Path\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Temporary routing context to look-ahead before routing the request\n\t\t\ttctx := chi.NewRouteContext()\n\n\t\t\t// Attempt to find a HEAD handler for the routing path, if not found, traverse\n\t\t\t// the router as through its a GET route, but proceed with the request\n\t\t\t// with the HEAD method.\n\t\t\tif !rctx.Routes.Match(tctx, \"HEAD\", routePath) {\n\t\t\t\trctx.RouteMethod = \"GET\"\n\t\t\t\trctx.RoutePath = routePath\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tnext.ServeHTTP(w, r)\n\t})\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/get_head_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestGetHead(t *testing.T) {\n\tr := chi.NewRouter()\n\tr.Use(GetHead)\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Test\", \"yes\")\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.Route(\"/articles\", func(r chi.Router) {\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := chi.URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-Article\", id)\n\t\t\tw.Write([]byte(\"article:\" + id))\n\t\t})\n\t})\n\tr.Route(\"/users\", func(r chi.Router) {\n\t\tr.Head(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"X-User\", \"-\")\n\t\t\tw.Write([]byte(\"user\"))\n\t\t})\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := chi.URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-User\", id)\n\t\t\tw.Write([]byte(\"user:\" + id))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/hi\", nil); body != \"\" || req.Header.Get(\"X-Test\") != \"yes\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"404 page not found\\n\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/\", nil); body != \"\" || req.StatusCode != 404 {\n\t\tt.Fatalf(body)\n\t}\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/articles/5\", nil); body != \"article:5\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/articles/5\", nil); body != \"\" || req.Header.Get(\"X-Article\") != \"5\" {\n\t\tt.Fatalf(\"expecting X-Article header '5' but got '%s'\", req.Header.Get(\"X-Article\"))\n\t}\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/users/1\", nil); body != \"user:1\" {\n\t\tt.Fatalf(body)\n\t}\n\tif req, body := testRequest(t, ts, \"HEAD\", \"/users/1\", nil); body != \"\" || req.Header.Get(\"X-User\") != \"-\" {\n\t\tt.Fatalf(\"expecting X-User header '-' but got '%s'\", req.Header.Get(\"X-User\"))\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/heartbeat.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// Heartbeat endpoint middleware useful to setting up a path like\n// `/ping` that load balancers or uptime testing external services\n// can make a request before hitting any routes. It's also convenient\n// to place this above ACL middlewares as well.\nfunc Heartbeat(endpoint string) func(http.Handler) http.Handler {\n\tf := func(h http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif r.Method == \"GET\" && strings.EqualFold(r.URL.Path, endpoint) {\n\t\t\t\tw.Header().Set(\"Content-Type\", \"text/plain\")\n\t\t\t\tw.WriteHeader(http.StatusOK)\n\t\t\t\tw.Write([]byte(\".\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\th.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n\treturn f\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/logger.go",
    "content": "package middleware\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"time\"\n)\n\nvar (\n\t// LogEntryCtxKey is the context.Context key to store the request log entry.\n\tLogEntryCtxKey = &contextKey{\"LogEntry\"}\n\n\t// DefaultLogger is called by the Logger middleware handler to log each request.\n\t// Its made a package-level variable so that it can be reconfigured for custom\n\t// logging configurations.\n\tDefaultLogger = RequestLogger(&DefaultLogFormatter{Logger: log.New(os.Stdout, \"\", log.LstdFlags)})\n)\n\n// Logger is a middleware that logs the start and end of each request, along\n// with some useful data about what was requested, what the response status was,\n// and how long it took to return. When standard output is a TTY, Logger will\n// print in color, otherwise it will print in black and white. Logger prints a\n// request ID if one is provided.\n//\n// Alternatively, look at https://github.com/pressly/lg and the `lg.RequestLogger`\n// middleware pkg.\nfunc Logger(next http.Handler) http.Handler {\n\treturn DefaultLogger(next)\n}\n\n// RequestLogger returns a logger handler using a custom LogFormatter.\nfunc RequestLogger(f LogFormatter) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tentry := f.NewLogEntry(r)\n\t\t\tww := NewWrapResponseWriter(w, r.ProtoMajor)\n\n\t\t\tt1 := time.Now()\n\t\t\tdefer func() {\n\t\t\t\tentry.Write(ww.Status(), ww.BytesWritten(), time.Since(t1))\n\t\t\t}()\n\n\t\t\tnext.ServeHTTP(ww, WithLogEntry(r, entry))\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n\n// LogFormatter initiates the beginning of a new LogEntry per request.\n// See DefaultLogFormatter for an example implementation.\ntype LogFormatter interface {\n\tNewLogEntry(r *http.Request) LogEntry\n}\n\n// LogEntry records the final log when a request completes.\n// See defaultLogEntry for an example implementation.\ntype LogEntry interface {\n\tWrite(status, bytes int, elapsed time.Duration)\n\tPanic(v interface{}, stack []byte)\n}\n\n// GetLogEntry returns the in-context LogEntry for a request.\nfunc GetLogEntry(r *http.Request) LogEntry {\n\tentry, _ := r.Context().Value(LogEntryCtxKey).(LogEntry)\n\treturn entry\n}\n\n// WithLogEntry sets the in-context LogEntry for a request.\nfunc WithLogEntry(r *http.Request, entry LogEntry) *http.Request {\n\tr = r.WithContext(context.WithValue(r.Context(), LogEntryCtxKey, entry))\n\treturn r\n}\n\n// LoggerInterface accepts printing to stdlib logger or compatible logger.\ntype LoggerInterface interface {\n\tPrint(v ...interface{})\n}\n\n// DefaultLogFormatter is a simple logger that implements a LogFormatter.\ntype DefaultLogFormatter struct {\n\tLogger LoggerInterface\n}\n\n// NewLogEntry creates a new LogEntry for the request.\nfunc (l *DefaultLogFormatter) NewLogEntry(r *http.Request) LogEntry {\n\tentry := &defaultLogEntry{\n\t\tDefaultLogFormatter: l,\n\t\trequest:             r,\n\t\tbuf:                 &bytes.Buffer{},\n\t}\n\n\treqID := GetReqID(r.Context())\n\tif reqID != \"\" {\n\t\tcW(entry.buf, nYellow, \"[%s] \", reqID)\n\t}\n\tcW(entry.buf, nCyan, \"\\\"\")\n\tcW(entry.buf, bMagenta, \"%s \", r.Method)\n\n\tscheme := \"http\"\n\tif r.TLS != nil {\n\t\tscheme = \"https\"\n\t}\n\tcW(entry.buf, nCyan, \"%s://%s%s %s\\\" \", scheme, r.Host, r.RequestURI, r.Proto)\n\n\tentry.buf.WriteString(\"from \")\n\tentry.buf.WriteString(r.RemoteAddr)\n\tentry.buf.WriteString(\" - \")\n\n\treturn entry\n}\n\ntype defaultLogEntry struct {\n\t*DefaultLogFormatter\n\trequest *http.Request\n\tbuf     *bytes.Buffer\n}\n\nfunc (l *defaultLogEntry) Write(status, bytes int, elapsed time.Duration) {\n\tswitch {\n\tcase status < 200:\n\t\tcW(l.buf, bBlue, \"%03d\", status)\n\tcase status < 300:\n\t\tcW(l.buf, bGreen, \"%03d\", status)\n\tcase status < 400:\n\t\tcW(l.buf, bCyan, \"%03d\", status)\n\tcase status < 500:\n\t\tcW(l.buf, bYellow, \"%03d\", status)\n\tdefault:\n\t\tcW(l.buf, bRed, \"%03d\", status)\n\t}\n\n\tcW(l.buf, bBlue, \" %dB\", bytes)\n\n\tl.buf.WriteString(\" in \")\n\tif elapsed < 500*time.Millisecond {\n\t\tcW(l.buf, nGreen, \"%s\", elapsed)\n\t} else if elapsed < 5*time.Second {\n\t\tcW(l.buf, nYellow, \"%s\", elapsed)\n\t} else {\n\t\tcW(l.buf, nRed, \"%s\", elapsed)\n\t}\n\n\tl.Logger.Print(l.buf.String())\n}\n\nfunc (l *defaultLogEntry) Panic(v interface{}, stack []byte) {\n\tpanicEntry := l.NewLogEntry(l.request).(*defaultLogEntry)\n\tcW(panicEntry.buf, bRed, \"panic: %+v\", v)\n\tl.Logger.Print(panicEntry.buf.String())\n\tl.Logger.Print(string(stack))\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/middleware.go",
    "content": "package middleware\n\n// contextKey is a value for use with context.WithValue. It's used as\n// a pointer so it fits in an interface{} without allocation. This technique\n// for defining context keys was copied from Go 1.7's new use of context in net/http.\ntype contextKey struct {\n\tname string\n}\n\nfunc (k *contextKey) String() string {\n\treturn \"chi/middleware context value \" + k.name\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/middleware18_test.go",
    "content": "// +build go1.8\n\npackage middleware\n\nimport (\n\t\"crypto/tls\"\n\t\"io\"\n\t\"net/http\"\n\t\"testing\"\n\t\"time\"\n\n\t\"golang.org/x/net/http2\"\n)\n\n// NOTE: we must import `golang.org/x/net/http2` in order to explicitly enable\n// http2 transports for certain tests. The runtime pkg does not have this dependency\n// though as the transport configuration happens under the hood on go 1.7+.\n\nfunc TestWrapWriterHTTP2(t *testing.T) {\n\thandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t_, cn := w.(http.CloseNotifier)\n\t\tif !cn {\n\t\t\tt.Fatal(\"request should have been a http.CloseNotifier\")\n\t\t}\n\t\t_, fl := w.(http.Flusher)\n\t\tif !fl {\n\t\t\tt.Fatal(\"request should have been a http.Flusher\")\n\t\t}\n\t\t_, hj := w.(http.Hijacker)\n\t\tif hj {\n\t\t\tt.Fatal(\"request should not have been a http.Hijacker\")\n\t\t}\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif rf {\n\t\t\tt.Fatal(\"request should not have been a io.ReaderFrom\")\n\t\t}\n\t\t_, ps := w.(http.Pusher)\n\t\tif !ps {\n\t\t\tt.Fatal(\"request should have been a http.Pusher\")\n\t\t}\n\n\t\tw.Write([]byte(\"OK\"))\n\t})\n\n\twmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(NewWrapResponseWriter(w, r.ProtoMajor), r)\n\t\t})\n\t}\n\n\tserver := http.Server{\n\t\tAddr:    \":7072\",\n\t\tHandler: wmw(handler),\n\t}\n\t// By serving over TLS, we get HTTP2 requests\n\tgo server.ListenAndServeTLS(testdataDir+\"/cert.pem\", testdataDir+\"/key.pem\")\n\tdefer server.Close()\n\t// We need the server to start before making the request\n\ttime.Sleep(100 * time.Millisecond)\n\n\tclient := &http.Client{\n\t\tTransport: &http2.Transport{\n\t\t\tTLSClientConfig: &tls.Config{\n\t\t\t\t// The certificates we are using are self signed\n\t\t\t\tInsecureSkipVerify: true,\n\t\t\t},\n\t\t},\n\t}\n\n\tresp, err := client.Get(\"https://localhost:7072\")\n\tif err != nil {\n\t\tt.Fatalf(\"could not get server: %v\", err)\n\t}\n\tif resp.StatusCode != 200 {\n\t\tt.Fatalf(\"non 200 response: %v\", resp.StatusCode)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/middleware_test.go",
    "content": "package middleware\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"path\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"testing\"\n)\n\n// NOTE: we must import `golang.org/x/net/http2` in order to explicitly enable\n// http2 transports for certain tests. The runtime pkg does not have this dependency\n// though as the transport configuration happens under the hood on go 1.7+.\n\nvar testdataDir string\n\nfunc init() {\n\t_, filename, _, _ := runtime.Caller(0)\n\ttestdataDir = path.Join(path.Dir(filename), \"/../testdata\")\n}\n\nfunc testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\trespBody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\tdefer resp.Body.Close()\n\n\treturn resp, string(respBody)\n}\n\nfunc assertNoError(t *testing.T, err error) {\n\tif err != nil {\n\t\tt.Fatalf(\"expecting no error\")\n\t}\n}\n\nfunc assertError(t *testing.T, err error) {\n\tif err == nil {\n\t\tt.Fatalf(\"expecting error\")\n\t}\n}\n\nfunc assertEqual(t *testing.T, a, b interface{}) {\n\tif !reflect.DeepEqual(a, b) {\n\t\tt.Fatalf(\"expecting values to be equal but got: '%v' and '%v'\", a, b)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/nocache.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"net/http\"\n\t\"time\"\n)\n\n// Unix epoch time\nvar epoch = time.Unix(0, 0).Format(time.RFC1123)\n\n// Taken from https://github.com/mytrile/nocache\nvar noCacheHeaders = map[string]string{\n\t\"Expires\":         epoch,\n\t\"Cache-Control\":   \"no-cache, no-store, must-revalidate, private, max-age=0\",\n\t\"Pragma\":          \"no-cache\",\n\t\"X-Accel-Expires\": \"0\",\n}\n\nvar etagHeaders = []string{\n\t\"ETag\",\n\t\"If-Modified-Since\",\n\t\"If-Match\",\n\t\"If-None-Match\",\n\t\"If-Range\",\n\t\"If-Unmodified-Since\",\n}\n\n// NoCache is a simple piece of middleware that sets a number of HTTP headers to prevent\n// a router (or subrouter) from being cached by an upstream proxy and/or client.\n//\n// As per http://wiki.nginx.org/HttpProxyModule - NoCache sets:\n//      Expires: Thu, 01 Jan 1970 00:00:00 UTC\n//      Cache-Control: no-cache, private, max-age=0\n//      X-Accel-Expires: 0\n//      Pragma: no-cache (for HTTP/1.0 proxies/clients)\nfunc NoCache(h http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\n\t\t// Delete any ETag headers that may have been set\n\t\tfor _, v := range etagHeaders {\n\t\t\tif r.Header.Get(v) != \"\" {\n\t\t\t\tr.Header.Del(v)\n\t\t\t}\n\t\t}\n\n\t\t// Set our NoCache headers\n\t\tfor k, v := range noCacheHeaders {\n\t\t\tw.Header().Set(k, v)\n\t\t}\n\n\t\th.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/profiler.go",
    "content": "package middleware\n\nimport (\n\t\"expvar\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/pprof\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// Profiler is a convenient subrouter used for mounting net/http/pprof. ie.\n//\n//  func MyService() http.Handler {\n//    r := chi.NewRouter()\n//    // ..middlewares\n//    r.Mount(\"/debug\", middleware.Profiler())\n//    // ..routes\n//    return r\n//  }\nfunc Profiler() http.Handler {\n\tr := chi.NewRouter()\n\tr.Use(NoCache)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\thttp.Redirect(w, r, r.RequestURI+\"/pprof/\", 301)\n\t})\n\tr.HandleFunc(\"/pprof\", func(w http.ResponseWriter, r *http.Request) {\n\t\thttp.Redirect(w, r, r.RequestURI+\"/\", 301)\n\t})\n\n\tr.HandleFunc(\"/pprof/*\", pprof.Index)\n\tr.HandleFunc(\"/pprof/cmdline\", pprof.Cmdline)\n\tr.HandleFunc(\"/pprof/profile\", pprof.Profile)\n\tr.HandleFunc(\"/pprof/symbol\", pprof.Symbol)\n\tr.HandleFunc(\"/pprof/trace\", pprof.Trace)\n\tr.HandleFunc(\"/vars\", expVars)\n\n\treturn r\n}\n\n// Replicated from expvar.go as not public.\nfunc expVars(w http.ResponseWriter, r *http.Request) {\n\tfirst := true\n\tw.Header().Set(\"Content-Type\", \"application/json\")\n\tfmt.Fprintf(w, \"{\\n\")\n\texpvar.Do(func(kv expvar.KeyValue) {\n\t\tif !first {\n\t\t\tfmt.Fprintf(w, \",\\n\")\n\t\t}\n\t\tfirst = false\n\t\tfmt.Fprintf(w, \"%q: %s\", kv.Key, kv.Value)\n\t})\n\tfmt.Fprintf(w, \"\\n}\\n\")\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/realip.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\nvar xForwardedFor = http.CanonicalHeaderKey(\"X-Forwarded-For\")\nvar xRealIP = http.CanonicalHeaderKey(\"X-Real-IP\")\n\n// RealIP is a middleware that sets a http.Request's RemoteAddr to the results\n// of parsing either the X-Forwarded-For header or the X-Real-IP header (in that\n// order).\n//\n// This middleware should be inserted fairly early in the middleware stack to\n// ensure that subsequent layers (e.g., request loggers) which examine the\n// RemoteAddr will see the intended value.\n//\n// You should only use this middleware if you can trust the headers passed to\n// you (in particular, the two headers this middleware uses), for example\n// because you have placed a reverse proxy like HAProxy or nginx in front of\n// Goji. If your reverse proxies are configured to pass along arbitrary header\n// values from the client, or if you use this middleware without a reverse\n// proxy, malicious clients will be able to make you very sad (or, depending on\n// how you're using RemoteAddr, vulnerable to an attack of some sort).\nfunc RealIP(h http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tif rip := realIP(r); rip != \"\" {\n\t\t\tr.RemoteAddr = rip\n\t\t}\n\t\th.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n\nfunc realIP(r *http.Request) string {\n\tvar ip string\n\n\tif xff := r.Header.Get(xForwardedFor); xff != \"\" {\n\t\ti := strings.Index(xff, \", \")\n\t\tif i == -1 {\n\t\t\ti = len(xff)\n\t\t}\n\t\tip = xff[:i]\n\t} else if xrip := r.Header.Get(xRealIP); xrip != \"\" {\n\t\tip = xrip\n\t}\n\n\treturn ip\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/realip_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestXRealIP(t *testing.T) {\n\treq, _ := http.NewRequest(\"GET\", \"/\", nil)\n\treq.Header.Add(\"X-Real-IP\", \"100.100.100.100\")\n\tw := httptest.NewRecorder()\n\n\tr := chi.NewRouter()\n\tr.Use(RealIP)\n\n\trealIP := \"\"\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\trealIP = r.RemoteAddr\n\t\tw.Write([]byte(\"Hello World\"))\n\t})\n\tr.ServeHTTP(w, req)\n\n\tif w.Code != 200 {\n\t\tt.Fatal(\"Response Code should be 200\")\n\t}\n\n\tif realIP != \"100.100.100.100\" {\n\t\tt.Fatal(\"Test get real IP error.\")\n\t}\n}\n\nfunc TestXForwardForIP(t *testing.T) {\n\treq, _ := http.NewRequest(\"GET\", \"/\", nil)\n\treq.Header.Add(\"X-Forwarded-For\", \"100.100.100.100\")\n\tw := httptest.NewRecorder()\n\n\tr := chi.NewRouter()\n\tr.Use(RealIP)\n\n\trealIP := \"\"\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\trealIP = r.RemoteAddr\n\t\tw.Write([]byte(\"Hello World\"))\n\t})\n\tr.ServeHTTP(w, req)\n\n\tif w.Code != 200 {\n\t\tt.Fatal(\"Response Code should be 200\")\n\t}\n\n\tif realIP != \"100.100.100.100\" {\n\t\tt.Fatal(\"Test get real IP error.\")\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/recoverer.go",
    "content": "package middleware\n\n// The original work was derived from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"runtime/debug\"\n)\n\n// Recoverer is a middleware that recovers from panics, logs the panic (and a\n// backtrace), and returns a HTTP 500 (Internal Server Error) status if\n// possible. Recoverer prints a request ID if one is provided.\n//\n// Alternatively, look at https://github.com/pressly/lg middleware pkgs.\nfunc Recoverer(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tdefer func() {\n\t\t\tif rvr := recover(); rvr != nil {\n\n\t\t\t\tlogEntry := GetLogEntry(r)\n\t\t\t\tif logEntry != nil {\n\t\t\t\t\tlogEntry.Panic(rvr, debug.Stack())\n\t\t\t\t} else {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"Panic: %+v\\n\", rvr)\n\t\t\t\t\tdebug.PrintStack()\n\t\t\t\t}\n\n\t\t\t\thttp.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)\n\t\t\t}\n\t\t}()\n\n\t\tnext.ServeHTTP(w, r)\n\t}\n\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/request_id.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\t\"sync/atomic\"\n)\n\n// Key to use when setting the request ID.\ntype ctxKeyRequestID int\n\n// RequestIDKey is the key that holds th unique request ID in a request context.\nconst RequestIDKey ctxKeyRequestID = 0\n\nvar prefix string\nvar reqid uint64\n\n// A quick note on the statistics here: we're trying to calculate the chance that\n// two randomly generated base62 prefixes will collide. We use the formula from\n// http://en.wikipedia.org/wiki/Birthday_problem\n//\n// P[m, n] \\approx 1 - e^{-m^2/2n}\n//\n// We ballpark an upper bound for $m$ by imagining (for whatever reason) a server\n// that restarts every second over 10 years, for $m = 86400 * 365 * 10 = 315360000$\n//\n// For a $k$ character base-62 identifier, we have $n(k) = 62^k$\n//\n// Plugging this in, we find $P[m, n(10)] \\approx 5.75%$, which is good enough for\n// our purposes, and is surely more than anyone would ever need in practice -- a\n// process that is rebooted a handful of times a day for a hundred years has less\n// than a millionth of a percent chance of generating two colliding IDs.\n\nfunc init() {\n\thostname, err := os.Hostname()\n\tif hostname == \"\" || err != nil {\n\t\thostname = \"localhost\"\n\t}\n\tvar buf [12]byte\n\tvar b64 string\n\tfor len(b64) < 10 {\n\t\trand.Read(buf[:])\n\t\tb64 = base64.StdEncoding.EncodeToString(buf[:])\n\t\tb64 = strings.NewReplacer(\"+\", \"\", \"/\", \"\").Replace(b64)\n\t}\n\n\tprefix = fmt.Sprintf(\"%s/%s\", hostname, b64[0:10])\n}\n\n// RequestID is a middleware that injects a request ID into the context of each\n// request. A request ID is a string of the form \"host.example.com/random-0001\",\n// where \"random\" is a base62 random string that uniquely identifies this go\n// process, and where the last number is an atomically incremented request\n// counter.\nfunc RequestID(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tmyid := atomic.AddUint64(&reqid, 1)\n\t\tctx := r.Context()\n\t\tctx = context.WithValue(ctx, RequestIDKey, fmt.Sprintf(\"%s-%06d\", prefix, myid))\n\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t}\n\treturn http.HandlerFunc(fn)\n}\n\n// GetReqID returns a request ID from the given context if one is present.\n// Returns the empty string if a request ID cannot be found.\nfunc GetReqID(ctx context.Context) string {\n\tif ctx == nil {\n\t\treturn \"\"\n\t}\n\tif reqID, ok := ctx.Value(RequestIDKey).(string); ok {\n\t\treturn reqID\n\t}\n\treturn \"\"\n}\n\n// NextRequestID generates the next request ID in the sequence.\nfunc NextRequestID() uint64 {\n\treturn atomic.AddUint64(&reqid, 1)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/strip.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n)\n\n// StripSlashes is a middleware that will match request paths with a trailing\n// slash, strip it from the path and continue routing through the mux, if a route\n// matches, then it will serve the handler.\nfunc StripSlashes(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tvar path string\n\t\trctx := chi.RouteContext(r.Context())\n\t\tif rctx.RoutePath != \"\" {\n\t\t\tpath = rctx.RoutePath\n\t\t} else {\n\t\t\tpath = r.URL.Path\n\t\t}\n\t\tif len(path) > 1 && path[len(path)-1] == '/' {\n\t\t\trctx.RoutePath = path[:len(path)-1]\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n\n// RedirectSlashes is a middleware that will match request paths with a trailing\n// slash and redirect to the same path, less the trailing slash.\nfunc RedirectSlashes(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tvar path string\n\t\trctx := chi.RouteContext(r.Context())\n\t\tif rctx.RoutePath != \"\" {\n\t\t\tpath = rctx.RoutePath\n\t\t} else {\n\t\t\tpath = r.URL.Path\n\t\t}\n\t\tif len(path) > 1 && path[len(path)-1] == '/' {\n\t\t\tpath = path[:len(path)-1]\n\t\t\thttp.Redirect(w, r, path, 301)\n\t\t\treturn\n\t\t}\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/strip_test.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nfunc TestStripSlashes(t *testing.T) {\n\tr := chi.NewRouter()\n\n\t// This middleware must be mounted at the top level of the router, not at the end-handler\n\t// because then it'll be too late and will end up in a 404\n\tr.Use(StripSlashes)\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, resp := testRequest(t, ts, \"GET\", \"/\", nil); resp != \"root\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"//\", nil); resp != \"root\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); resp != \"nothing here\" {\n\t\tt.Fatalf(resp)\n\t}\n}\n\nfunc TestStripSlashesInRoute(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hi\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Use(StripSlashes)\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"accounts index\"))\n\t\t})\n\t\tr.Get(\"/query\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, resp := testRequest(t, ts, \"GET\", \"/hi\", nil); resp != \"hi\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/hi/\", nil); resp != \"nothing here\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"accounts index\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"accounts index\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/query\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n\tif _, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/query/\", nil); resp != \"admin\" {\n\t\tt.Fatalf(resp)\n\t}\n}\n\nfunc TestRedirectSlashes(t *testing.T) {\n\tr := chi.NewRouter()\n\n\t// This middleware must be mounted at the top level of the router, not at the end-handler\n\t// because then it'll be too late and will end up in a 404\n\tr.Use(RedirectSlashes)\n\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\n\tr.Route(\"/accounts/{accountID}\", func(r chi.Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\taccountID := chi.URLParam(r, \"accountID\")\n\t\t\tw.Write([]byte(accountID))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/\", nil); resp != \"root\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\t// NOTE: the testRequest client will follow the redirection..\n\tif req, resp := testRequest(t, ts, \"GET\", \"//\", nil); resp != \"root\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); resp != \"admin\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\t// NOTE: the testRequest client will follow the redirection..\n\tif req, resp := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); resp != \"admin\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n\n\tif req, resp := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); resp != \"nothing here\" && req.StatusCode != 200 {\n\t\tt.Fatalf(resp)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/terminal.go",
    "content": "package middleware\n\n// Ported from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\nvar (\n\t// Normal colors\n\tnBlack   = []byte{'\\033', '[', '3', '0', 'm'}\n\tnRed     = []byte{'\\033', '[', '3', '1', 'm'}\n\tnGreen   = []byte{'\\033', '[', '3', '2', 'm'}\n\tnYellow  = []byte{'\\033', '[', '3', '3', 'm'}\n\tnBlue    = []byte{'\\033', '[', '3', '4', 'm'}\n\tnMagenta = []byte{'\\033', '[', '3', '5', 'm'}\n\tnCyan    = []byte{'\\033', '[', '3', '6', 'm'}\n\tnWhite   = []byte{'\\033', '[', '3', '7', 'm'}\n\t// Bright colors\n\tbBlack   = []byte{'\\033', '[', '3', '0', ';', '1', 'm'}\n\tbRed     = []byte{'\\033', '[', '3', '1', ';', '1', 'm'}\n\tbGreen   = []byte{'\\033', '[', '3', '2', ';', '1', 'm'}\n\tbYellow  = []byte{'\\033', '[', '3', '3', ';', '1', 'm'}\n\tbBlue    = []byte{'\\033', '[', '3', '4', ';', '1', 'm'}\n\tbMagenta = []byte{'\\033', '[', '3', '5', ';', '1', 'm'}\n\tbCyan    = []byte{'\\033', '[', '3', '6', ';', '1', 'm'}\n\tbWhite   = []byte{'\\033', '[', '3', '7', ';', '1', 'm'}\n\n\treset = []byte{'\\033', '[', '0', 'm'}\n)\n\nvar isTTY bool\n\nfunc init() {\n\t// This is sort of cheating: if stdout is a character device, we assume\n\t// that means it's a TTY. Unfortunately, there are many non-TTY\n\t// character devices, but fortunately stdout is rarely set to any of\n\t// them.\n\t//\n\t// We could solve this properly by pulling in a dependency on\n\t// code.google.com/p/go.crypto/ssh/terminal, for instance, but as a\n\t// heuristic for whether to print in color or in black-and-white, I'd\n\t// really rather not.\n\tfi, err := os.Stdout.Stat()\n\tif err == nil {\n\t\tm := os.ModeDevice | os.ModeCharDevice\n\t\tisTTY = fi.Mode()&m == m\n\t}\n}\n\n// colorWrite\nfunc cW(w io.Writer, color []byte, s string, args ...interface{}) {\n\tif isTTY {\n\t\tw.Write(color)\n\t}\n\tfmt.Fprintf(w, s, args...)\n\tif isTTY {\n\t\tw.Write(reset)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/throttle.go",
    "content": "package middleware\n\nimport (\n\t\"net/http\"\n\t\"time\"\n)\n\nconst (\n\terrCapacityExceeded = \"Server capacity exceeded.\"\n\terrTimedOut         = \"Timed out while waiting for a pending request to complete.\"\n\terrContextCanceled  = \"Context was canceled.\"\n)\n\nvar (\n\tdefaultBacklogTimeout = time.Second * 60\n)\n\n// Throttle is a middleware that limits number of currently processed requests\n// at a time.\nfunc Throttle(limit int) func(http.Handler) http.Handler {\n\treturn ThrottleBacklog(limit, 0, defaultBacklogTimeout)\n}\n\n// ThrottleBacklog is a middleware that limits number of currently processed\n// requests at a time and provides a backlog for holding a finite number of\n// pending requests.\nfunc ThrottleBacklog(limit int, backlogLimit int, backlogTimeout time.Duration) func(http.Handler) http.Handler {\n\tif limit < 1 {\n\t\tpanic(\"chi/middleware: Throttle expects limit > 0\")\n\t}\n\n\tif backlogLimit < 0 {\n\t\tpanic(\"chi/middleware: Throttle expects backlogLimit to be positive\")\n\t}\n\n\tt := throttler{\n\t\ttokens:         make(chan token, limit),\n\t\tbacklogTokens:  make(chan token, limit+backlogLimit),\n\t\tbacklogTimeout: backlogTimeout,\n\t}\n\n\t// Filling tokens.\n\tfor i := 0; i < limit+backlogLimit; i++ {\n\t\tif i < limit {\n\t\t\tt.tokens <- token{}\n\t\t}\n\t\tt.backlogTokens <- token{}\n\t}\n\n\tfn := func(h http.Handler) http.Handler {\n\t\tt.h = h\n\t\treturn &t\n\t}\n\n\treturn fn\n}\n\n// token represents a request that is being processed.\ntype token struct{}\n\n// throttler limits number of currently processed requests at a time.\ntype throttler struct {\n\th              http.Handler\n\ttokens         chan token\n\tbacklogTokens  chan token\n\tbacklogTimeout time.Duration\n}\n\n// ServeHTTP is the primary throttler request handler\nfunc (t *throttler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tctx := r.Context()\n\tselect {\n\tcase <-ctx.Done():\n\t\thttp.Error(w, errContextCanceled, http.StatusServiceUnavailable)\n\t\treturn\n\tcase btok := <-t.backlogTokens:\n\t\ttimer := time.NewTimer(t.backlogTimeout)\n\n\t\tdefer func() {\n\t\t\tt.backlogTokens <- btok\n\t\t}()\n\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\thttp.Error(w, errTimedOut, http.StatusServiceUnavailable)\n\t\t\treturn\n\t\tcase <-ctx.Done():\n\t\t\thttp.Error(w, errContextCanceled, http.StatusServiceUnavailable)\n\t\t\treturn\n\t\tcase tok := <-t.tokens:\n\t\t\tdefer func() {\n\t\t\t\tt.tokens <- tok\n\t\t\t}()\n\t\t\tt.h.ServeHTTP(w, r)\n\t\t}\n\t\treturn\n\tdefault:\n\t\thttp.Error(w, errCapacityExceeded, http.StatusServiceUnavailable)\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/throttle_test.go",
    "content": "package middleware\n\nimport (\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nvar testContent = []byte(\"Hello world!\")\n\nfunc TestThrottleBacklog(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(10, 50, time.Second*10))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 1) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 5, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\t// The throttler proccesses 10 consecutive requests, each one of those\n\t// requests lasts 1s. The maximum number of requests this can possible serve\n\t// before the clients time out (5s) is 40.\n\tfor i := 0; i < 40; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, testContent, buf)\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleClientTimeout(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(10, 50, time.Second*10))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 5) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 3, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\tfor i := 0; i < 10; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\t\t\t_, err := client.Get(server.URL)\n\t\t\tassertError(t, err)\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleTriggerGatewayTimeout(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(50, 100, time.Second*5))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 10) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 60, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\t// These requests will be processed normally until they finish.\n\tfor i := 0; i < 50; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\n\t\t}(i)\n\t}\n\n\ttime.Sleep(time.Second * 1)\n\n\t// These requests will wait for the first batch to complete but it will take\n\t// too much time, so they will eventually receive a timeout error.\n\tfor i := 0; i < 50; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusServiceUnavailable, res.StatusCode)\n\t\t\tassertEqual(t, errTimedOut, strings.TrimSpace(string(buf)))\n\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n\nfunc TestThrottleMaximum(t *testing.T) {\n\tr := chi.NewRouter()\n\n\tr.Use(ThrottleBacklog(50, 50, time.Second*5))\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\ttime.Sleep(time.Second * 2) // Expensive operation.\n\t\tw.Write(testContent)\n\t})\n\n\tserver := httptest.NewServer(r)\n\tdefer server.Close()\n\n\tclient := http.Client{\n\t\tTimeout: time.Second * 60, // Maximum waiting time.\n\t}\n\n\tvar wg sync.WaitGroup\n\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusOK, res.StatusCode)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, testContent, buf)\n\n\t\t}(i)\n\t}\n\n\t// Wait less time than what the server takes to reply.\n\ttime.Sleep(time.Second * 1)\n\n\t// At this point the server is still processing, all the following request\n\t// will be beyond the server capacity.\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func(i int) {\n\t\t\tdefer wg.Done()\n\n\t\t\tres, err := client.Get(server.URL)\n\t\t\tassertNoError(t, err)\n\n\t\t\tbuf, err := ioutil.ReadAll(res.Body)\n\t\t\tassertNoError(t, err)\n\t\t\tassertEqual(t, http.StatusServiceUnavailable, res.StatusCode)\n\t\t\tassertEqual(t, errCapacityExceeded, strings.TrimSpace(string(buf)))\n\n\t\t}(i)\n\t}\n\n\twg.Wait()\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/timeout.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Timeout is a middleware that cancels ctx after a given timeout and return\n// a 504 Gateway Timeout error to the client.\n//\n// It's required that you select the ctx.Done() channel to check for the signal\n// if the context has reached its deadline and return, otherwise the timeout\n// signal will be just ignored.\n//\n// ie. a route/handler may look like:\n//\n//  r.Get(\"/long\", func(ctx context.Context, w http.ResponseWriter, r *http.Request) {\n// \t processTime := time.Duration(rand.Intn(4)+1) * time.Second\n//\n// \t select {\n// \t case <-ctx.Done():\n// \t \treturn\n//\n// \t case <-time.After(processTime):\n// \t \t // The above channel simulates some hard work.\n// \t }\n//\n// \t w.Write([]byte(\"done\"))\n//  })\n//\nfunc Timeout(timeout time.Duration) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx, cancel := context.WithTimeout(r.Context(), timeout)\n\t\t\tdefer func() {\n\t\t\t\tcancel()\n\t\t\t\tif ctx.Err() == context.DeadlineExceeded {\n\t\t\t\t\tw.WriteHeader(http.StatusGatewayTimeout)\n\t\t\t\t}\n\t\t\t}()\n\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/url_format.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/go-chi/chi\"\n)\n\nvar (\n\t// URLFormatCtxKey is the context.Context key to store the URL format data\n\t// for a request.\n\tURLFormatCtxKey = &contextKey{\"URLFormat\"}\n)\n\n// URLFormat is a middleware that parses the url extension from a request path and stores it\n// on the context as a string under the key `middleware.URLFormatCtxKey`. The middleware will\n// trim the suffix from the routing path and continue routing.\n//\n// Routers should not include a url parameter for the suffix when using this middleware.\n//\n// Sample usage.. for url paths: `/articles/1`, `/articles/1.json` and `/articles/1.xml`\n//\n//  func routes() http.Handler {\n//    r := chi.NewRouter()\n//    r.Use(middleware.URLFormat)\n//\n//    r.Get(\"/articles/{id}\", ListArticles)\n//\n//    return r\n//  }\n//\n//  func ListArticles(w http.ResponseWriter, r *http.Request) {\n// \t  urlFormat, _ := r.Context().Value(middleware.URLFormatCtxKey).(string)\n//\n// \t  switch urlFormat {\n// \t  case \"json\":\n// \t  \trender.JSON(w, r, articles)\n// \t  case \"xml:\"\n// \t  \trender.XML(w, r, articles)\n// \t  default:\n// \t  \trender.JSON(w, r, articles)\n// \t  }\n// }\n//\nfunc URLFormat(next http.Handler) http.Handler {\n\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\n\t\tvar format string\n\t\tpath := r.URL.Path\n\n\t\tif strings.Index(path, \".\") > 0 {\n\t\t\tbase := strings.LastIndex(path, \"/\")\n\t\t\tidx := strings.Index(path[base:], \".\")\n\n\t\t\tif idx > 0 {\n\t\t\t\tidx += base\n\t\t\t\tformat = path[idx+1:]\n\n\t\t\t\trctx := chi.RouteContext(r.Context())\n\t\t\t\trctx.RoutePath = path[:idx]\n\t\t\t}\n\t\t}\n\n\t\tr = r.WithContext(context.WithValue(ctx, URLFormatCtxKey, format))\n\n\t\tnext.ServeHTTP(w, r)\n\t}\n\treturn http.HandlerFunc(fn)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/value.go",
    "content": "package middleware\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// WithValue is a middleware that sets a given key/value in a context chain.\nfunc WithValue(key interface{}, val interface{}) func(next http.Handler) http.Handler {\n\treturn func(next http.Handler) http.Handler {\n\t\tfn := func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), key, val))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t\treturn http.HandlerFunc(fn)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/wrap_writer.go",
    "content": "package middleware\n\n// The original work was derived from Goji's middleware, source:\n// https://github.com/zenazn/goji/tree/master/web/middleware\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// WrapResponseWriter is a proxy around an http.ResponseWriter that allows you to hook\n// into various parts of the response process.\ntype WrapResponseWriter interface {\n\thttp.ResponseWriter\n\t// Status returns the HTTP status of the request, or 0 if one has not\n\t// yet been sent.\n\tStatus() int\n\t// BytesWritten returns the total number of bytes sent to the client.\n\tBytesWritten() int\n\t// Tee causes the response body to be written to the given io.Writer in\n\t// addition to proxying the writes through. Only one io.Writer can be\n\t// tee'd to at once: setting a second one will overwrite the first.\n\t// Writes will be sent to the proxy before being written to this\n\t// io.Writer. It is illegal for the tee'd writer to be modified\n\t// concurrently with writes.\n\tTee(io.Writer)\n\t// Unwrap returns the original proxied target.\n\tUnwrap() http.ResponseWriter\n}\n\n// basicWriter wraps a http.ResponseWriter that implements the minimal\n// http.ResponseWriter interface.\ntype basicWriter struct {\n\thttp.ResponseWriter\n\twroteHeader bool\n\tcode        int\n\tbytes       int\n\ttee         io.Writer\n}\n\nfunc (b *basicWriter) WriteHeader(code int) {\n\tif !b.wroteHeader {\n\t\tb.code = code\n\t\tb.wroteHeader = true\n\t\tb.ResponseWriter.WriteHeader(code)\n\t}\n}\nfunc (b *basicWriter) Write(buf []byte) (int, error) {\n\tb.WriteHeader(http.StatusOK)\n\tn, err := b.ResponseWriter.Write(buf)\n\tif b.tee != nil {\n\t\t_, err2 := b.tee.Write(buf[:n])\n\t\t// Prefer errors generated by the proxied writer.\n\t\tif err == nil {\n\t\t\terr = err2\n\t\t}\n\t}\n\tb.bytes += n\n\treturn n, err\n}\nfunc (b *basicWriter) maybeWriteHeader() {\n\tif !b.wroteHeader {\n\t\tb.WriteHeader(http.StatusOK)\n\t}\n}\nfunc (b *basicWriter) Status() int {\n\treturn b.code\n}\nfunc (b *basicWriter) BytesWritten() int {\n\treturn b.bytes\n}\nfunc (b *basicWriter) Tee(w io.Writer) {\n\tb.tee = w\n}\nfunc (b *basicWriter) Unwrap() http.ResponseWriter {\n\treturn b.ResponseWriter\n}\n\ntype flushWriter struct {\n\tbasicWriter\n}\n\nfunc (f *flushWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\n\nvar _ http.Flusher = &flushWriter{}\n\n// httpFancyWriter is a HTTP writer that additionally satisfies http.CloseNotifier,\n// http.Flusher, http.Hijacker, and io.ReaderFrom. It exists for the common case\n// of wrapping the http.ResponseWriter that package http gives you, in order to\n// make the proxied object support the full method set of the proxied object.\ntype httpFancyWriter struct {\n\tbasicWriter\n}\n\nfunc (f *httpFancyWriter) CloseNotify() <-chan bool {\n\tcn := f.basicWriter.ResponseWriter.(http.CloseNotifier)\n\treturn cn.CloseNotify()\n}\nfunc (f *httpFancyWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\nfunc (f *httpFancyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\thj := f.basicWriter.ResponseWriter.(http.Hijacker)\n\treturn hj.Hijack()\n}\nfunc (f *httpFancyWriter) ReadFrom(r io.Reader) (int64, error) {\n\tif f.basicWriter.tee != nil {\n\t\tn, err := io.Copy(&f.basicWriter, r)\n\t\tf.basicWriter.bytes += int(n)\n\t\treturn n, err\n\t}\n\trf := f.basicWriter.ResponseWriter.(io.ReaderFrom)\n\tf.basicWriter.maybeWriteHeader()\n\tn, err := rf.ReadFrom(r)\n\tf.basicWriter.bytes += int(n)\n\treturn n, err\n}\n\nvar _ http.CloseNotifier = &httpFancyWriter{}\nvar _ http.Flusher = &httpFancyWriter{}\nvar _ http.Hijacker = &httpFancyWriter{}\nvar _ io.ReaderFrom = &httpFancyWriter{}\n\n// http2FancyWriter is a HTTP2 writer that additionally satisfies http.CloseNotifier,\n// http.Flusher, and io.ReaderFrom. It exists for the common case\n// of wrapping the http.ResponseWriter that package http gives you, in order to\n// make the proxied object support the full method set of the proxied object.\ntype http2FancyWriter struct {\n\tbasicWriter\n}\n\nfunc (f *http2FancyWriter) CloseNotify() <-chan bool {\n\tcn := f.basicWriter.ResponseWriter.(http.CloseNotifier)\n\treturn cn.CloseNotify()\n}\nfunc (f *http2FancyWriter) Flush() {\n\tfl := f.basicWriter.ResponseWriter.(http.Flusher)\n\tfl.Flush()\n}\n\nvar _ http.CloseNotifier = &http2FancyWriter{}\nvar _ http.Flusher = &http2FancyWriter{}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/wrap_writer17.go",
    "content": "// +build go1.7,!go1.8\n\npackage middleware\n\nimport (\n\t\"io\"\n\t\"net/http\"\n)\n\n// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to\n// hook into various parts of the response process.\nfunc NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {\n\t_, cn := w.(http.CloseNotifier)\n\t_, fl := w.(http.Flusher)\n\n\tbw := basicWriter{ResponseWriter: w}\n\n\tif protoMajor == 2 {\n\t\tif cn && fl {\n\t\t\treturn &http2FancyWriter{bw}\n\t\t}\n\t} else {\n\t\t_, hj := w.(http.Hijacker)\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif cn && fl && hj && rf {\n\t\t\treturn &httpFancyWriter{bw}\n\t\t}\n\t}\n\tif fl {\n\t\treturn &flushWriter{bw}\n\t}\n\n\treturn &bw\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/middleware/wrap_writer18.go",
    "content": "// +build go1.8 appengine\n\npackage middleware\n\nimport (\n\t\"io\"\n\t\"net/http\"\n)\n\n// NewWrapResponseWriter wraps an http.ResponseWriter, returning a proxy that allows you to\n// hook into various parts of the response process.\nfunc NewWrapResponseWriter(w http.ResponseWriter, protoMajor int) WrapResponseWriter {\n\t_, cn := w.(http.CloseNotifier)\n\t_, fl := w.(http.Flusher)\n\n\tbw := basicWriter{ResponseWriter: w}\n\n\tif protoMajor == 2 {\n\t\t_, ps := w.(http.Pusher)\n\t\tif cn && fl && ps {\n\t\t\treturn &http2FancyWriter{bw}\n\t\t}\n\t} else {\n\t\t_, hj := w.(http.Hijacker)\n\t\t_, rf := w.(io.ReaderFrom)\n\t\tif cn && fl && hj && rf {\n\t\t\treturn &httpFancyWriter{bw}\n\t\t}\n\t}\n\tif fl {\n\t\treturn &flushWriter{bw}\n\t}\n\n\treturn &bw\n}\n\nfunc (f *http2FancyWriter) Push(target string, opts *http.PushOptions) error {\n\treturn f.basicWriter.ResponseWriter.(http.Pusher).Push(target, opts)\n}\n\nvar _ http.Pusher = &http2FancyWriter{}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/mux.go",
    "content": "package chi\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar _ Router = &Mux{}\n\n// Mux is a simple HTTP route multiplexer that parses a request path,\n// records any URL params, and executes an end handler. It implements\n// the http.Handler interface and is friendly with the standard library.\n//\n// Mux is designed to be fast, minimal and offer a powerful API for building\n// modular and composable HTTP services with a large set of handlers. It's\n// particularly useful for writing large REST API services that break a handler\n// into many smaller parts composed of middlewares and end handlers.\ntype Mux struct {\n\t// The radix trie router\n\ttree *node\n\n\t// The middleware stack\n\tmiddlewares []func(http.Handler) http.Handler\n\n\t// Controls the behaviour of middleware chain generation when a mux\n\t// is registered as an inline group inside another mux.\n\tinline bool\n\tparent *Mux\n\n\t// The computed mux handler made of the chained middleware stack and\n\t// the tree router\n\thandler http.Handler\n\n\t// Routing context pool\n\tpool *sync.Pool\n\n\t// Custom route not found handler\n\tnotFoundHandler http.HandlerFunc\n\n\t// Custom method not allowed handler\n\tmethodNotAllowedHandler http.HandlerFunc\n}\n\n// NewMux returns a newly initialized Mux object that implements the Router\n// interface.\nfunc NewMux() *Mux {\n\tmux := &Mux{tree: &node{}, pool: &sync.Pool{}}\n\tmux.pool.New = func() interface{} {\n\t\treturn NewRouteContext()\n\t}\n\treturn mux\n}\n\n// ServeHTTP is the single method of the http.Handler interface that makes\n// Mux interoperable with the standard library. It uses a sync.Pool to get and\n// reuse routing contexts for each request.\nfunc (mx *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\t// Ensure the mux has some routes defined on the mux\n\tif mx.handler == nil {\n\t\tpanic(\"chi: attempting to route to a mux with no handlers.\")\n\t}\n\n\t// Check if a routing context already exists from a parent router.\n\trctx, _ := r.Context().Value(RouteCtxKey).(*Context)\n\tif rctx != nil {\n\t\tmx.handler.ServeHTTP(w, r)\n\t\treturn\n\t}\n\n\t// Fetch a RouteContext object from the sync pool, and call the computed\n\t// mx.handler that is comprised of mx.middlewares + mx.routeHTTP.\n\t// Once the request is finished, reset the routing context and put it back\n\t// into the pool for reuse from another request.\n\trctx = mx.pool.Get().(*Context)\n\trctx.Reset()\n\trctx.Routes = mx\n\tr = r.WithContext(context.WithValue(r.Context(), RouteCtxKey, rctx))\n\tmx.handler.ServeHTTP(w, r)\n\tmx.pool.Put(rctx)\n}\n\n// Use appends a middleware handler to the Mux middleware stack.\n//\n// The middleware stack for any Mux will execute before searching for a matching\n// route to a specific handler, which provides opportunity to respond early,\n// change the course of the request execution, or set request-scoped values for\n// the next http.Handler.\nfunc (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler) {\n\tif mx.handler != nil {\n\t\tpanic(\"chi: all middlewares must be defined before routes on a mux\")\n\t}\n\tmx.middlewares = append(mx.middlewares, middlewares...)\n}\n\n// Handle adds the route `pattern` that matches any http method to\n// execute the `handler` http.Handler.\nfunc (mx *Mux) Handle(pattern string, handler http.Handler) {\n\tmx.handle(mALL, pattern, handler)\n}\n\n// HandleFunc adds the route `pattern` that matches any http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) HandleFunc(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mALL, pattern, handlerFn)\n}\n\n// Method adds the route `pattern` that matches `method` http method to\n// execute the `handler` http.Handler.\nfunc (mx *Mux) Method(method, pattern string, handler http.Handler) {\n\tm, ok := methodMap[strings.ToUpper(method)]\n\tif !ok {\n\t\tpanic(fmt.Sprintf(\"chi: '%s' http method is not supported.\", method))\n\t}\n\tmx.handle(m, pattern, handler)\n}\n\n// MethodFunc adds the route `pattern` that matches `method` http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) MethodFunc(method, pattern string, handlerFn http.HandlerFunc) {\n\tmx.Method(method, pattern, handlerFn)\n}\n\n// Connect adds the route `pattern` that matches a CONNECT http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Connect(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mCONNECT, pattern, handlerFn)\n}\n\n// Delete adds the route `pattern` that matches a DELETE http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Delete(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mDELETE, pattern, handlerFn)\n}\n\n// Get adds the route `pattern` that matches a GET http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Get(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mGET, pattern, handlerFn)\n}\n\n// Head adds the route `pattern` that matches a HEAD http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Head(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mHEAD, pattern, handlerFn)\n}\n\n// Options adds the route `pattern` that matches a OPTIONS http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Options(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mOPTIONS, pattern, handlerFn)\n}\n\n// Patch adds the route `pattern` that matches a PATCH http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Patch(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPATCH, pattern, handlerFn)\n}\n\n// Post adds the route `pattern` that matches a POST http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Post(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPOST, pattern, handlerFn)\n}\n\n// Put adds the route `pattern` that matches a PUT http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Put(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mPUT, pattern, handlerFn)\n}\n\n// Trace adds the route `pattern` that matches a TRACE http method to\n// execute the `handlerFn` http.HandlerFunc.\nfunc (mx *Mux) Trace(pattern string, handlerFn http.HandlerFunc) {\n\tmx.handle(mTRACE, pattern, handlerFn)\n}\n\n// NotFound sets a custom http.HandlerFunc for routing paths that could\n// not be found. The default 404 handler is `http.NotFound`.\nfunc (mx *Mux) NotFound(handlerFn http.HandlerFunc) {\n\t// Build NotFound handler chain\n\tm := mx\n\thFn := handlerFn\n\tif mx.inline && mx.parent != nil {\n\t\tm = mx.parent\n\t\thFn = Chain(mx.middlewares...).HandlerFunc(hFn).ServeHTTP\n\t}\n\n\t// Update the notFoundHandler from this point forward\n\tm.notFoundHandler = hFn\n\tm.updateSubRoutes(func(subMux *Mux) {\n\t\tif subMux.notFoundHandler == nil {\n\t\t\tsubMux.NotFound(hFn)\n\t\t}\n\t})\n}\n\n// MethodNotAllowed sets a custom http.HandlerFunc for routing paths where the\n// method is unresolved. The default handler returns a 405 with an empty body.\nfunc (mx *Mux) MethodNotAllowed(handlerFn http.HandlerFunc) {\n\t// Build MethodNotAllowed handler chain\n\tm := mx\n\thFn := handlerFn\n\tif mx.inline && mx.parent != nil {\n\t\tm = mx.parent\n\t\thFn = Chain(mx.middlewares...).HandlerFunc(hFn).ServeHTTP\n\t}\n\n\t// Update the methodNotAllowedHandler from this point forward\n\tm.methodNotAllowedHandler = hFn\n\tm.updateSubRoutes(func(subMux *Mux) {\n\t\tif subMux.methodNotAllowedHandler == nil {\n\t\t\tsubMux.MethodNotAllowed(hFn)\n\t\t}\n\t})\n}\n\n// With adds inline middlewares for an endpoint handler.\nfunc (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router {\n\t// Similarly as in handle(), we must build the mux handler once further\n\t// middleware registration isn't allowed for this stack, like now.\n\tif !mx.inline && mx.handler == nil {\n\t\tmx.buildRouteHandler()\n\t}\n\n\t// Copy middlewares from parent inline muxs\n\tvar mws Middlewares\n\tif mx.inline {\n\t\tmws = make(Middlewares, len(mx.middlewares))\n\t\tcopy(mws, mx.middlewares)\n\t}\n\tmws = append(mws, middlewares...)\n\n\tim := &Mux{pool: mx.pool, inline: true, parent: mx, tree: mx.tree, middlewares: mws}\n\n\treturn im\n}\n\n// Group creates a new inline-Mux with a fresh middleware stack. It's useful\n// for a group of handlers along the same routing path that use an additional\n// set of middlewares. See _examples/.\nfunc (mx *Mux) Group(fn func(r Router)) Router {\n\tim := mx.With().(*Mux)\n\tif fn != nil {\n\t\tfn(im)\n\t}\n\treturn im\n}\n\n// Route creates a new Mux with a fresh middleware stack and mounts it\n// along the `pattern` as a subrouter. Effectively, this is a short-hand\n// call to Mount. See _examples/.\nfunc (mx *Mux) Route(pattern string, fn func(r Router)) Router {\n\tsubRouter := NewRouter()\n\tif fn != nil {\n\t\tfn(subRouter)\n\t}\n\tmx.Mount(pattern, subRouter)\n\treturn subRouter\n}\n\n// Mount attaches another http.Handler or chi Router as a subrouter along a routing\n// path. It's very useful to split up a large API as many independent routers and\n// compose them as a single service using Mount. See _examples/.\n//\n// Note that Mount() simply sets a wildcard along the `pattern` that will continue\n// routing at the `handler`, which in most cases is another chi.Router. As a result,\n// if you define two Mount() routes on the exact same pattern the mount will panic.\nfunc (mx *Mux) Mount(pattern string, handler http.Handler) {\n\t// Provide runtime safety for ensuring a pattern isn't mounted on an existing\n\t// routing pattern.\n\tif mx.tree.findPattern(pattern+\"*\") || mx.tree.findPattern(pattern+\"/*\") {\n\t\tpanic(fmt.Sprintf(\"chi: attempting to Mount() a handler on an existing path, '%s'\", pattern))\n\t}\n\n\t// Assign sub-Router's with the parent not found & method not allowed handler if not specified.\n\tsubr, ok := handler.(*Mux)\n\tif ok && subr.notFoundHandler == nil && mx.notFoundHandler != nil {\n\t\tsubr.NotFound(mx.notFoundHandler)\n\t}\n\tif ok && subr.methodNotAllowedHandler == nil && mx.methodNotAllowedHandler != nil {\n\t\tsubr.MethodNotAllowed(mx.methodNotAllowedHandler)\n\t}\n\n\t// Wrap the sub-router in a handlerFunc to scope the request path for routing.\n\tmountHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\trctx := RouteContext(r.Context())\n\t\trctx.RoutePath = mx.nextRoutePath(rctx)\n\t\thandler.ServeHTTP(w, r)\n\t})\n\n\tif pattern == \"\" || pattern[len(pattern)-1] != '/' {\n\t\tmx.handle(mALL|mSTUB, pattern, mountHandler)\n\t\tmx.handle(mALL|mSTUB, pattern+\"/\", mountHandler)\n\t\tpattern += \"/\"\n\t}\n\n\tmethod := mALL\n\tsubroutes, _ := handler.(Routes)\n\tif subroutes != nil {\n\t\tmethod |= mSTUB\n\t}\n\tn := mx.handle(method, pattern+\"*\", mountHandler)\n\n\tif subroutes != nil {\n\t\tn.subroutes = subroutes\n\t}\n}\n\n// Routes returns a slice of routing information from the tree,\n// useful for traversing available routes of a router.\nfunc (mx *Mux) Routes() []Route {\n\treturn mx.tree.routes()\n}\n\n// Middlewares returns a slice of middleware handler functions.\nfunc (mx *Mux) Middlewares() Middlewares {\n\treturn mx.middlewares\n}\n\n// Match searches the routing tree for a handler that matches the method/path.\n// It's similar to routing a http request, but without executing the handler\n// thereafter.\n//\n// Note: the *Context state is updated during execution, so manage\n// the state carefully or make a NewRouteContext().\nfunc (mx *Mux) Match(rctx *Context, method, path string) bool {\n\tm, ok := methodMap[method]\n\tif !ok {\n\t\treturn false\n\t}\n\n\tnode, _, h := mx.tree.FindRoute(rctx, m, path)\n\n\tif node != nil && node.subroutes != nil {\n\t\trctx.RoutePath = mx.nextRoutePath(rctx)\n\t\treturn node.subroutes.Match(rctx, method, rctx.RoutePath)\n\t}\n\n\treturn h != nil\n}\n\n// NotFoundHandler returns the default Mux 404 responder whenever a route\n// cannot be found.\nfunc (mx *Mux) NotFoundHandler() http.HandlerFunc {\n\tif mx.notFoundHandler != nil {\n\t\treturn mx.notFoundHandler\n\t}\n\treturn http.NotFound\n}\n\n// MethodNotAllowedHandler returns the default Mux 405 responder whenever\n// a method cannot be resolved for a route.\nfunc (mx *Mux) MethodNotAllowedHandler() http.HandlerFunc {\n\tif mx.methodNotAllowedHandler != nil {\n\t\treturn mx.methodNotAllowedHandler\n\t}\n\treturn methodNotAllowedHandler\n}\n\n// buildRouteHandler builds the single mux handler that is a chain of the middleware\n// stack, as defined by calls to Use(), and the tree router (Mux) itself. After this\n// point, no other middlewares can be registered on this Mux's stack. But you can still\n// compose additional middlewares via Group()'s or using a chained middleware handler.\nfunc (mx *Mux) buildRouteHandler() {\n\tmx.handler = chain(mx.middlewares, http.HandlerFunc(mx.routeHTTP))\n}\n\n// handle registers a http.Handler in the routing tree for a particular http method\n// and routing pattern.\nfunc (mx *Mux) handle(method methodTyp, pattern string, handler http.Handler) *node {\n\tif len(pattern) == 0 || pattern[0] != '/' {\n\t\tpanic(fmt.Sprintf(\"chi: routing pattern must begin with '/' in '%s'\", pattern))\n\t}\n\n\t// Build the final routing handler for this Mux.\n\tif !mx.inline && mx.handler == nil {\n\t\tmx.buildRouteHandler()\n\t}\n\n\t// Build endpoint handler with inline middlewares for the route\n\tvar h http.Handler\n\tif mx.inline {\n\t\tmx.handler = http.HandlerFunc(mx.routeHTTP)\n\t\th = Chain(mx.middlewares...).Handler(handler)\n\t} else {\n\t\th = handler\n\t}\n\n\t// Add the endpoint to the tree and return the node\n\treturn mx.tree.InsertRoute(method, pattern, h)\n}\n\n// routeHTTP routes a http.Request through the Mux routing tree to serve\n// the matching handler for a particular http method.\nfunc (mx *Mux) routeHTTP(w http.ResponseWriter, r *http.Request) {\n\t// Grab the route context object\n\trctx := r.Context().Value(RouteCtxKey).(*Context)\n\n\t// The request routing path\n\troutePath := rctx.RoutePath\n\tif routePath == \"\" {\n\t\tif r.URL.RawPath != \"\" {\n\t\t\troutePath = r.URL.RawPath\n\t\t} else {\n\t\t\troutePath = r.URL.Path\n\t\t}\n\t}\n\n\t// Check if method is supported by chi\n\tif rctx.RouteMethod == \"\" {\n\t\trctx.RouteMethod = r.Method\n\t}\n\tmethod, ok := methodMap[rctx.RouteMethod]\n\tif !ok {\n\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)\n\t\treturn\n\t}\n\n\t// Find the route\n\tif _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil {\n\t\th.ServeHTTP(w, r)\n\t\treturn\n\t}\n\tif rctx.methodNotAllowed {\n\t\tmx.MethodNotAllowedHandler().ServeHTTP(w, r)\n\t} else {\n\t\tmx.NotFoundHandler().ServeHTTP(w, r)\n\t}\n}\n\nfunc (mx *Mux) nextRoutePath(rctx *Context) string {\n\troutePath := \"/\"\n\tnx := len(rctx.routeParams.Keys) - 1 // index of last param in list\n\tif nx >= 0 && rctx.routeParams.Keys[nx] == \"*\" && len(rctx.routeParams.Values) > nx {\n\t\troutePath += rctx.routeParams.Values[nx]\n\t}\n\treturn routePath\n}\n\n// Recursively update data on child routers.\nfunc (mx *Mux) updateSubRoutes(fn func(subMux *Mux)) {\n\tfor _, r := range mx.tree.routes() {\n\t\tsubMux, ok := r.SubRoutes.(*Mux)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfn(subMux)\n\t}\n}\n\n// methodNotAllowedHandler is a helper function to respond with a 405,\n// method not allowed.\nfunc methodNotAllowedHandler(w http.ResponseWriter, r *http.Request) {\n\tw.WriteHeader(405)\n\tw.Write(nil)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/mux_test.go",
    "content": "package chi\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"os\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestMuxBasic(t *testing.T) {\n\tvar count uint64\n\tcountermw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcount++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tusermw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"user\"}, \"peter\")\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\texmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"ex\"}, \"a\")\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tlogbuf := bytes.NewBufferString(\"\")\n\tlogmsg := \"logmw test\"\n\tlogmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tlogbuf.WriteString(logmsg)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tcxindex := func(w http.ResponseWriter, r *http.Request) {\n\t\tctx := r.Context()\n\t\tuser := ctx.Value(ctxKey{\"user\"}).(string)\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(fmt.Sprintf(\"hi %s\", user)))\n\t}\n\n\tping := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\".\"))\n\t}\n\n\theadPing := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Ping\", \"1\")\n\t\tw.WriteHeader(200)\n\t}\n\n\tcreatePing := func(w http.ResponseWriter, r *http.Request) {\n\t\t// create ....\n\t\tw.WriteHeader(201)\n\t}\n\n\tpingAll := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"ping all\"))\n\t}\n\n\tpingAll2 := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"ping all2\"))\n\t}\n\n\tpingOne := func(w http.ResponseWriter, r *http.Request) {\n\t\tidParam := URLParam(r, \"id\")\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(fmt.Sprintf(\"ping one id: %s\", idParam)))\n\t}\n\n\tpingWoop := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"woop.\" + URLParam(r, \"iidd\")))\n\t}\n\n\tcatchAll := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\tw.Write([]byte(\"catchall\"))\n\t}\n\n\tm := NewRouter()\n\tm.Use(countermw)\n\tm.Use(usermw)\n\tm.Use(exmw)\n\tm.Use(logmw)\n\tm.Get(\"/\", cxindex)\n\tm.Method(\"GET\", \"/ping\", http.HandlerFunc(ping))\n\tm.MethodFunc(\"GET\", \"/pingall\", pingAll)\n\tm.MethodFunc(\"get\", \"/ping/all\", pingAll)\n\tm.Get(\"/ping/all2\", pingAll2)\n\n\tm.Head(\"/ping\", headPing)\n\tm.Post(\"/ping\", createPing)\n\tm.Get(\"/ping/{id}\", pingWoop)\n\tm.Get(\"/ping/{id}\", pingOne) // expected to overwrite to pingOne handler\n\tm.Get(\"/ping/{iidd}/woop\", pingWoop)\n\tm.HandleFunc(\"/admin/*\", catchAll)\n\t// m.Post(\"/admin/*\", catchAll)\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\t// GET /\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"hi peter\" {\n\t\tt.Fatalf(body)\n\t}\n\ttlogmsg, _ := logbuf.ReadString(0)\n\tif tlogmsg != logmsg {\n\t\tt.Error(\"expecting log message from middleware:\", logmsg)\n\t}\n\n\t// GET /ping\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping\", nil); body != \".\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /pingall\n\tif _, body := testRequest(t, ts, \"GET\", \"/pingall\", nil); body != \"ping all\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/all\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/all\", nil); body != \"ping all\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/all2\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/all2\", nil); body != \"ping all2\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/123\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/123\", nil); body != \"ping one id: 123\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/allan\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/allan\", nil); body != \"ping one id: allan\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// GET /ping/1/woop\n\tif _, body := testRequest(t, ts, \"GET\", \"/ping/1/woop\", nil); body != \"woop.1\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// HEAD /ping\n\tresp, err := http.Head(ts.URL + \"/ping\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif resp.StatusCode != 200 {\n\t\tt.Error(\"head failed, should be 200\")\n\t}\n\tif resp.Header.Get(\"X-Ping\") == \"\" {\n\t\tt.Error(\"expecting X-Ping header\")\n\t}\n\n\t// GET /admin/catch-this\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin/catch-thazzzzz\", nil); body != \"catchall\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// POST /admin/catch-this\n\tresp, err = http.Post(ts.URL+\"/admin/casdfsadfs\", \"text/plain\", bytes.NewReader([]byte{}))\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\tt.Error(\"POST failed, should be 200\")\n\t}\n\n\tif string(body) != \"catchall\" {\n\t\tt.Error(\"expecting response body: 'catchall'\")\n\t}\n\n\t// Custom http method DIE /ping/1/woop\n\tif resp, body := testRequest(t, ts, \"DIE\", \"/ping/1/woop\", nil); body != \"\" || resp.StatusCode != 405 {\n\t\tt.Fatalf(fmt.Sprintf(\"expecting 405 status and empty body, got %d '%s'\", resp.StatusCode, body))\n\t}\n}\n\nfunc TestMuxMounts(t *testing.T) {\n\tr := NewRouter()\n\n\tr.Get(\"/{hash}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tv := URLParam(r, \"hash\")\n\t\tw.Write([]byte(fmt.Sprintf(\"/%s\", v)))\n\t})\n\n\tr.Route(\"/{hash}/share\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tv := URLParam(r, \"hash\")\n\t\t\tw.Write([]byte(fmt.Sprintf(\"/%s/share\", v)))\n\t\t})\n\t\tr.Get(\"/{network}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tv := URLParam(r, \"hash\")\n\t\t\tn := URLParam(r, \"network\")\n\t\t\tw.Write([]byte(fmt.Sprintf(\"/%s/share/%s\", v, n)))\n\t\t})\n\t})\n\n\tm := NewRouter()\n\tm.Mount(\"/sharing\", r)\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc\", nil); body != \"/aBc\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc/share\", nil); body != \"/aBc/share\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/sharing/aBc/share/twitter\", nil); body != \"/aBc/share/twitter\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxPlain(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxEmptyRoutes(t *testing.T) {\n\tmux := NewRouter()\n\n\tapiRouter := NewRouter()\n\t// oops, we forgot to declare any route handlers\n\n\tmux.Handle(\"/api*\", apiRouter)\n\n\tif _, body := testHandler(t, mux, \"GET\", \"/\", nil); body != \"404 page not found\\n\" {\n\t\tt.Fatalf(body)\n\t}\n\n\tfunc() {\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif r != `chi: attempting to route to a mux with no handlers.` {\n\t\t\t\t\tt.Fatalf(\"expecting empty route panic\")\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\t_, body := testHandler(t, mux, \"GET\", \"/api\", nil)\n\t\tt.Fatalf(\"oops, we are expecting a panic instead of getting resp: %s\", body)\n\t}()\n\n\tfunc() {\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif r != `chi: attempting to route to a mux with no handlers.` {\n\t\t\t\t\tt.Fatalf(\"expecting empty route panic\")\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\t_, body := testHandler(t, mux, \"GET\", \"/api/abc\", nil)\n\t\tt.Fatalf(\"oops, we are expecting a panic instead of getting resp: %s\", body)\n\t}()\n}\n\n// Test a mux that routes a trailing slash, see also middleware/strip_test.go\n// for an example of using a middleware to handle trailing slashes.\nfunc TestMuxTrailingSlash(t *testing.T) {\n\tr := NewRouter()\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tsubRoutes := NewRouter()\n\tindexHandler := func(w http.ResponseWriter, r *http.Request) {\n\t\taccountID := URLParam(r, \"accountID\")\n\t\tw.Write([]byte(accountID))\n\t}\n\tsubRoutes.Get(\"/\", indexHandler)\n\n\tr.Mount(\"/accounts/{accountID}\", subRoutes)\n\tr.Get(\"/accounts/{accountID}/\", indexHandler)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/accounts/admin\", nil); body != \"admin\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/accounts/admin/\", nil); body != \"admin\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxNestedNotFound(t *testing.T) {\n\tr := NewRouter()\n\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"mw\"}, \"mw\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\n\tr.With(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"with\"}, \"with\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}).NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tchkMw := r.Context().Value(ctxKey{\"mw\"}).(string)\n\t\tchkWith := r.Context().Value(ctxKey{\"with\"}).(string)\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(fmt.Sprintf(\"root 404 %s %s\", chkMw, chkWith)))\n\t})\n\n\tsr1 := NewRouter()\n\n\tsr1.Get(\"/sub\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub\"))\n\t})\n\tsr1.Group(func(sr1 Router) {\n\t\tsr1.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"mw2\"}, \"mw2\"))\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t})\n\t\t})\n\t\tsr1.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tchkMw2 := r.Context().Value(ctxKey{\"mw2\"}).(string)\n\t\t\tw.WriteHeader(404)\n\t\t\tw.Write([]byte(fmt.Sprintf(\"sub 404 %s\", chkMw2)))\n\t\t})\n\t})\n\n\tsr2 := NewRouter()\n\tsr2.Get(\"/sub\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub2\"))\n\t})\n\n\tr.Mount(\"/admin1\", sr1)\n\tr.Mount(\"/admin2\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/nothing-here\", nil); body != \"root 404 mw with\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin1/sub\", nil); body != \"sub\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin1/nope\", nil); body != \"sub 404 mw2\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin2/sub\", nil); body != \"sub2\" {\n\t\tt.Fatalf(body)\n\t}\n\n\t// Not found pages should bubble up to the root.\n\tif _, body := testRequest(t, ts, \"GET\", \"/admin2/nope\", nil); body != \"root 404 mw with\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxNestedMethodNotAllowed(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/root\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"root\"))\n\t})\n\tr.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(405)\n\t\tw.Write([]byte(\"root 405\"))\n\t})\n\n\tsr1 := NewRouter()\n\tsr1.Get(\"/sub1\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub1\"))\n\t})\n\tsr1.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(405)\n\t\tw.Write([]byte(\"sub1 405\"))\n\t})\n\n\tsr2 := NewRouter()\n\tsr2.Get(\"/sub2\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"sub2\"))\n\t})\n\n\tr.Mount(\"/prefix1\", sr1)\n\tr.Mount(\"/prefix2\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/root\", nil); body != \"root\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/root\", nil); body != \"root 405\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/prefix1/sub1\", nil); body != \"sub1\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/prefix1/sub1\", nil); body != \"sub1 405\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/prefix2/sub2\", nil); body != \"sub2\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"PUT\", \"/prefix2/sub2\", nil); body != \"root 405\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxComplicatedNotFound(t *testing.T) {\n\t// sub router with groups\n\tsub := NewRouter()\n\tsub.Route(\"/resource\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"private get\"))\n\t\t})\n\t})\n\n\t// Root router with groups\n\tr := NewRouter()\n\tr.Get(\"/auth\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"auth get\"))\n\t})\n\tr.Route(\"/public\", func(r Router) {\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"public get\"))\n\t\t})\n\t})\n\tr.Mount(\"/private\", sub)\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"custom not-found\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\t// check that we didn't break correct routes\n\tif _, body := testRequest(t, ts, \"GET\", \"/auth\", nil); body != \"auth get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public\", nil); body != \"public get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public/\", nil); body != \"public get\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/resource\", nil); body != \"private get\" {\n\t\tt.Fatalf(body)\n\t}\n\t// check custom not-found on all levels\n\tif _, body := testRequest(t, ts, \"GET\", \"/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/public/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/private/resource/nope\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n\t// check custom not-found on trailing slash routes\n\tif _, body := testRequest(t, ts, \"GET\", \"/auth/\", nil); body != \"custom not-found\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxWith(t *testing.T) {\n\tvar cmwInit1, cmwHandler1 uint64\n\tvar cmwInit2, cmwHandler2 uint64\n\tmw1 := func(next http.Handler) http.Handler {\n\t\tcmwInit1++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcmwHandler1++\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"inline1\"}, \"yes\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\tmw2 := func(next http.Handler) http.Handler {\n\t\tcmwInit2++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tcmwHandler2++\n\t\t\tr = r.WithContext(context.WithValue(r.Context(), ctxKey{\"inline2\"}, \"yes\"))\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.With(mw1).With(mw2).Get(\"/inline\", func(w http.ResponseWriter, r *http.Request) {\n\t\tv1 := r.Context().Value(ctxKey{\"inline1\"}).(string)\n\t\tv2 := r.Context().Value(ctxKey{\"inline2\"}).(string)\n\t\tw.Write([]byte(fmt.Sprintf(\"inline %s %s\", v1, v2)))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/inline\", nil); body != \"inline yes yes\" {\n\t\tt.Fatalf(body)\n\t}\n\tif cmwInit1 != 1 {\n\t\tt.Fatalf(\"expecting cmwInit1 to be 1, got %d\", cmwInit1)\n\t}\n\tif cmwHandler1 != 1 {\n\t\tt.Fatalf(\"expecting cmwHandler1 to be 1, got %d\", cmwHandler1)\n\t}\n\tif cmwInit2 != 1 {\n\t\tt.Fatalf(\"expecting cmwInit2 to be 1, got %d\", cmwInit2)\n\t}\n\tif cmwHandler2 != 1 {\n\t\tt.Fatalf(\"expecting cmwHandler2 to be 1, got %d\", cmwHandler2)\n\t}\n}\n\nfunc TestRouterFromMuxWith(t *testing.T) {\n\tt.Parallel()\n\n\tr := NewRouter()\n\n\twith := r.With(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\twith.Get(\"/with_middleware\", func(w http.ResponseWriter, r *http.Request) {})\n\n\tts := httptest.NewServer(with)\n\tdefer ts.Close()\n\n\t// Without the fix this test was committed with, this causes a panic.\n\ttestRequest(t, ts, http.MethodGet, \"/with_middleware\", nil)\n}\n\nfunc TestMuxMiddlewareStack(t *testing.T) {\n\tvar stdmwInit, stdmwHandler uint64\n\tstdmw := func(next http.Handler) http.Handler {\n\t\tstdmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\t_ = stdmw\n\n\tvar ctxmwInit, ctxmwHandler uint64\n\tctxmw := func(next http.Handler) http.Handler {\n\t\tctxmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctxmwHandler++\n\t\t\tctx := r.Context()\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"count.ctxmwHandler\"}, ctxmwHandler)\n\t\t\tr = r.WithContext(ctx)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tvar inCtxmwInit, inCtxmwHandler uint64\n\tinCtxmw := func(next http.Handler) http.Handler {\n\t\tinCtxmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tinCtxmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Use(stdmw)\n\tr.Use(ctxmw)\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tif r.URL.Path == \"/ping\" {\n\t\t\t\tw.Write([]byte(\"pong\"))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\n\tvar handlerCount uint64\n\n\tr.With(inCtxmw).Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\thandlerCount++\n\t\tctx := r.Context()\n\t\tctxmwHandlerCount := ctx.Value(ctxKey{\"count.ctxmwHandler\"}).(uint64)\n\t\tw.Write([]byte(fmt.Sprintf(\"inits:%d reqs:%d ctxValue:%d\", ctxmwInit, handlerCount, ctxmwHandlerCount)))\n\t})\n\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"wooot\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\ttestRequest(t, ts, \"GET\", \"/\", nil)\n\ttestRequest(t, ts, \"GET\", \"/\", nil)\n\tvar body string\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\tif body != \"inits:1 reqs:3 ctxValue:3\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\n\t_, body = testRequest(t, ts, \"GET\", \"/ping\", nil)\n\tif body != \"pong\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n}\n\nfunc TestMuxRouteGroups(t *testing.T) {\n\tvar stdmwInit, stdmwHandler uint64\n\n\tstdmw := func(next http.Handler) http.Handler {\n\t\tstdmwInit++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tvar stdmwInit2, stdmwHandler2 uint64\n\tstdmw2 := func(next http.Handler) http.Handler {\n\t\tstdmwInit2++\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tstdmwHandler2++\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tr := NewRouter()\n\tr.Group(func(r Router) {\n\t\tr.Use(stdmw)\n\t\tr.Get(\"/group\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"root group\"))\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(stdmw2)\n\t\tr.Get(\"/group2\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"root group2\"))\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\t// GET /group\n\t_, body := testRequest(t, ts, \"GET\", \"/group\", nil)\n\tif body != \"root group\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\tif stdmwInit != 1 || stdmwHandler != 1 {\n\t\tt.Logf(\"stdmw counters failed, should be 1:1, got %d:%d\", stdmwInit, stdmwHandler)\n\t}\n\n\t// GET /group2\n\t_, body = testRequest(t, ts, \"GET\", \"/group2\", nil)\n\tif body != \"root group2\" {\n\t\tt.Fatalf(\"got: '%s'\", body)\n\t}\n\tif stdmwInit2 != 1 || stdmwHandler2 != 1 {\n\t\tt.Fatalf(\"stdmw2 counters failed, should be 1:1, got %d:%d\", stdmwInit2, stdmwHandler2)\n\t}\n}\n\nfunc TestMuxBig(t *testing.T) {\n\tr := bigMux()\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/favicon.ico\", nil)\n\tif body != \"fav\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/4/view\", nil)\n\tif body != \"/hubs/4/view reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%v'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/4/view/index.html\", nil)\n\tif body != \"/hubs/4/view/index.html reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"POST\", \"/hubs/ethereumhub/view/index.html\", nil)\n\tif body != \"/hubs/ethereumhub/view/index.html reqid:1 session:anonymous\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\tif body != \"/ reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/suggestions\", nil)\n\tif body != \"/suggestions reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/woot/444/hiiii\", nil)\n\tif body != \"/woot/444/hiiii\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123\", nil)\n\texpected = \"/hubs/123 reqid:1 session:elvis\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/touch\", nil)\n\tif body != \"/hubs/123/touch reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/webhooks\", nil)\n\tif body != \"/hubs/123/webhooks reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/posts\", nil)\n\tif body != \"/hubs/123/posts reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders\", nil)\n\tif body != \"404 page not found\\n\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/\", nil)\n\tif body != \"/folders/ reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/public\", nil)\n\tif body != \"/folders/public reqid:1 session:elvis\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/folders/nothing\", nil)\n\tif body != \"404 page not found\\n\" {\n\t\tt.Fatalf(\"got '%s'\", body)\n\t}\n}\n\nfunc bigMux() Router {\n\tvar r, sr1, sr2, sr3, sr4, sr5, sr6 *Mux\n\tr = NewRouter()\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"requestID\"}, \"1\")\n\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t})\n\t})\n\tr.Use(func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"session.user\"}, \"anonymous\")\n\t\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t\t})\n\t\t})\n\t\tr.Get(\"/favicon.ico\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Write([]byte(\"fav\"))\n\t\t})\n\t\tr.Get(\"/hubs/{hubID}/view\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Get(\"/hubs/{hubID}/view/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view/%s reqid:%s session:%s\", URLParamFromCtx(ctx, \"hubID\"),\n\t\t\t\tURLParam(r, \"*\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Post(\"/hubs/{hubSlug}/view/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/hubs/%s/view/%s reqid:%s session:%s\", URLParamFromCtx(ctx, \"hubSlug\"),\n\t\t\t\tURLParam(r, \"*\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t})\n\tr.Group(func(r Router) {\n\t\tr.Use(func(next http.Handler) http.Handler {\n\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := context.WithValue(r.Context(), ctxKey{\"session.user\"}, \"elvis\")\n\t\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t\t})\n\t\t})\n\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/ reqid:%s session:%s\", ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\t\tr.Get(\"/suggestions\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\ts := fmt.Sprintf(\"/suggestions reqid:%s session:%s\", ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\n\t\tr.Get(\"/woot/{wootID}/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\ts := fmt.Sprintf(\"/woot/%s/%s\", URLParam(r, \"wootID\"), URLParam(r, \"*\"))\n\t\t\tw.Write([]byte(s))\n\t\t})\n\n\t\tr.Route(\"/hubs\", func(r Router) {\n\t\t\tsr1 = r.(*Mux)\n\t\t\tr.Route(\"/{hubID}\", func(r Router) {\n\t\t\t\tsr2 = r.(*Mux)\n\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s reqid:%s session:%s\",\n\t\t\t\t\t\tURLParam(r, \"hubID\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\t\t\t\tr.Get(\"/touch\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/touch reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\n\t\t\t\tsr3 = NewRouter()\n\t\t\t\tsr3.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\tctx := r.Context()\n\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/webhooks reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t})\n\t\t\t\tsr3.Route(\"/{webhookID}\", func(r Router) {\n\t\t\t\t\tsr4 = r.(*Mux)\n\t\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tctx := r.Context()\n\t\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/webhooks/%s reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\t\tURLParam(r, \"webhookID\"), ctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\tr.Mount(\"/webhooks\", Chain(func(next http.Handler) http.Handler {\n\t\t\t\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tnext.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), ctxKey{\"hook\"}, true)))\n\t\t\t\t\t})\n\t\t\t\t}).Handler(sr3))\n\n\t\t\t\tr.Route(\"/posts\", func(r Router) {\n\t\t\t\t\tsr5 = r.(*Mux)\n\t\t\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\t\t\tctx := r.Context()\n\t\t\t\t\t\ts := fmt.Sprintf(\"/hubs/%s/posts reqid:%s session:%s\", URLParam(r, \"hubID\"),\n\t\t\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\t\t\tw.Write([]byte(s))\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\n\t\tr.Route(\"/folders/\", func(r Router) {\n\t\t\tsr6 = r.(*Mux)\n\t\t\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := r.Context()\n\t\t\t\ts := fmt.Sprintf(\"/folders/ reqid:%s session:%s\",\n\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\tw.Write([]byte(s))\n\t\t\t})\n\t\t\tr.Get(\"/public\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\t\tctx := r.Context()\n\t\t\t\ts := fmt.Sprintf(\"/folders/public reqid:%s session:%s\",\n\t\t\t\t\tctx.Value(ctxKey{\"requestID\"}), ctx.Value(ctxKey{\"session.user\"}))\n\t\t\t\tw.Write([]byte(s))\n\t\t\t})\n\t\t})\n\t})\n\n\treturn r\n}\n\nfunc TestMuxSubroutesBasic(t *testing.T) {\n\thIndex := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"index\"))\n\t})\n\thArticlesList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"articles-list\"))\n\t})\n\thSearchArticles := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"search-articles\"))\n\t})\n\thGetArticle := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"get-article:%s\", URLParam(r, \"id\"))))\n\t})\n\thSyncArticle := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(fmt.Sprintf(\"sync-article:%s\", URLParam(r, \"id\"))))\n\t})\n\n\tr := NewRouter()\n\tvar rr1, rr2 *Mux\n\tr.Get(\"/\", hIndex)\n\tr.Route(\"/articles\", func(r Router) {\n\t\trr1 = r.(*Mux)\n\t\tr.Get(\"/\", hArticlesList)\n\t\tr.Get(\"/search\", hSearchArticles)\n\t\tr.Route(\"/{id}\", func(r Router) {\n\t\t\trr2 = r.(*Mux)\n\t\t\tr.Get(\"/\", hGetArticle)\n\t\t\tr.Get(\"/sync\", hSyncArticle)\n\t\t})\n\t})\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, r.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, rr1.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, rr2.tree, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/\", nil)\n\texpected = \"index\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles\", nil)\n\texpected = \"articles-list\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/search\", nil)\n\texpected = \"search-articles\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/123\", nil)\n\texpected = \"get-article:123\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/articles/123/sync\", nil)\n\texpected = \"sync-article:123\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n}\n\nfunc TestMuxSubroutes(t *testing.T) {\n\thHubView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub1\"))\n\t})\n\thHubView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub2\"))\n\t})\n\thHubView3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub3\"))\n\t})\n\thAccountView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"account1\"))\n\t})\n\thAccountView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"account2\"))\n\t})\n\n\tr := NewRouter()\n\tr.Get(\"/hubs/{hubID}/view\", hHubView1)\n\tr.Get(\"/hubs/{hubID}/view/*\", hHubView2)\n\n\tsr := NewRouter()\n\tsr.Get(\"/\", hHubView3)\n\tr.Mount(\"/hubs/{hubID}/users\", sr)\n\tr.Get(\"/hubs/{hubID}/users/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hub3 override\"))\n\t})\n\n\tsr3 := NewRouter()\n\tsr3.Get(\"/\", hAccountView1)\n\tsr3.Get(\"/hi\", hAccountView2)\n\n\tvar sr2 *Mux\n\tr.Route(\"/accounts/{accountID}\", func(r Router) {\n\t\tsr2 = r.(*Mux)\n\t\t// r.Get(\"/\", hAccountView1)\n\t\tr.Mount(\"/\", sr3)\n\t})\n\n\t// This is the same as the r.Route() call mounted on sr2\n\t// sr2 := NewRouter()\n\t// sr2.Mount(\"/\", sr3)\n\t// r.Mount(\"/accounts/{accountID}\", sr2)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tvar body, expected string\n\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/view\", nil)\n\texpected = \"hub1\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/view/index.html\", nil)\n\texpected = \"hub2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/users\", nil)\n\texpected = \"hub3\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/hubs/123/users/\", nil)\n\texpected = \"hub3 override\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/accounts/44\", nil)\n\texpected = \"account1\"\n\tif body != expected {\n\t\tt.Fatalf(\"request:%s expected:%s got:%s\", \"GET /accounts/44\", expected, body)\n\t}\n\t_, body = testRequest(t, ts, \"GET\", \"/accounts/44/hi\", nil)\n\texpected = \"account2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\n\t// Test that we're building the routingPatterns properly\n\trouter := r\n\treq, _ := http.NewRequest(\"GET\", \"/accounts/44/hi\", nil)\n\n\trctx := NewRouteContext()\n\treq = req.WithContext(context.WithValue(req.Context(), RouteCtxKey, rctx))\n\n\tw := httptest.NewRecorder()\n\trouter.ServeHTTP(w, req)\n\n\tbody = string(w.Body.Bytes())\n\texpected = \"account2\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n\n\troutePatterns := rctx.RoutePatterns\n\tif len(rctx.RoutePatterns) != 3 {\n\t\tt.Fatalf(\"expected 3 routing patterns, got:%d\", len(rctx.RoutePatterns))\n\t}\n\texpected = \"/accounts/{accountID}/*\"\n\tif routePatterns[0] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[0])\n\t}\n\texpected = \"/*\"\n\tif routePatterns[1] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[1])\n\t}\n\texpected = \"/hi\"\n\tif routePatterns[2] != expected {\n\t\tt.Fatalf(\"routePattern, expected:%s got:%s\", expected, routePatterns[2])\n\t}\n\n}\n\nfunc TestSingleHandler(t *testing.T) {\n\th := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tname := URLParam(r, \"name\")\n\t\tw.Write([]byte(\"hi \" + name))\n\t})\n\n\tr, _ := http.NewRequest(\"GET\", \"/\", nil)\n\trctx := NewRouteContext()\n\tr = r.WithContext(context.WithValue(r.Context(), RouteCtxKey, rctx))\n\trctx.URLParams.Add(\"name\", \"joe\")\n\n\tw := httptest.NewRecorder()\n\th.ServeHTTP(w, r)\n\n\tbody := string(w.Body.Bytes())\n\texpected := \"hi joe\"\n\tif body != expected {\n\t\tt.Fatalf(\"expected:%s got:%s\", expected, body)\n\t}\n}\n\n// TODO: a Router wrapper test..\n//\n// type ACLMux struct {\n// \t*Mux\n// \tXX string\n// }\n//\n// func NewACLMux() *ACLMux {\n// \treturn &ACLMux{Mux: NewRouter(), XX: \"hihi\"}\n// }\n//\n// // TODO: this should be supported...\n// func TestWoot(t *testing.T) {\n// \tvar r Router = NewRouter()\n//\n// \tvar r2 Router = NewACLMux() //NewRouter()\n// \tr2.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n// \t\tw.Write([]byte(\"hi\"))\n// \t})\n//\n// \tr.Mount(\"/\", r2)\n// }\n\nfunc TestServeHTTPExistingContext(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\ts, _ := r.Context().Value(ctxKey{\"testCtx\"}).(string)\n\t\tw.Write([]byte(s))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\ts, _ := r.Context().Value(ctxKey{\"testCtx\"}).(string)\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(s))\n\t})\n\n\ttestcases := []struct {\n\t\tMethod         string\n\t\tPath           string\n\t\tCtx            context.Context\n\t\tExpectedStatus int\n\t\tExpectedBody   string\n\t}{\n\t\t{\n\t\t\tMethod:         \"GET\",\n\t\t\tPath:           \"/hi\",\n\t\t\tCtx:            context.WithValue(context.Background(), ctxKey{\"testCtx\"}, \"hi ctx\"),\n\t\t\tExpectedStatus: 200,\n\t\t\tExpectedBody:   \"hi ctx\",\n\t\t},\n\t\t{\n\t\t\tMethod:         \"GET\",\n\t\t\tPath:           \"/hello\",\n\t\t\tCtx:            context.WithValue(context.Background(), ctxKey{\"testCtx\"}, \"nothing here ctx\"),\n\t\t\tExpectedStatus: 404,\n\t\t\tExpectedBody:   \"nothing here ctx\",\n\t\t},\n\t}\n\n\tfor _, tc := range testcases {\n\t\tresp := httptest.NewRecorder()\n\t\treq, err := http.NewRequest(tc.Method, tc.Path, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"%v\", err)\n\t\t}\n\t\treq = req.WithContext(tc.Ctx)\n\t\tr.ServeHTTP(resp, req)\n\t\tb, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"%v\", err)\n\t\t}\n\t\tif resp.Code != tc.ExpectedStatus {\n\t\t\tt.Fatalf(\"%v != %v\", tc.ExpectedStatus, resp.Code)\n\t\t}\n\t\tif string(b) != tc.ExpectedBody {\n\t\t\tt.Fatalf(\"%s != %s\", tc.ExpectedBody, b)\n\t\t}\n\t}\n}\n\nfunc TestNestedGroups(t *testing.T) {\n\thandlerPrintCounter := func(w http.ResponseWriter, r *http.Request) {\n\t\tcounter, _ := r.Context().Value(ctxKey{\"counter\"}).(int)\n\t\tw.Write([]byte(fmt.Sprintf(\"%v\", counter)))\n\t}\n\n\tmwIncreaseCounter := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tctx := r.Context()\n\t\t\tcounter, _ := ctx.Value(ctxKey{\"counter\"}).(int)\n\t\t\tcounter++\n\t\t\tctx = context.WithValue(ctx, ctxKey{\"counter\"}, counter)\n\t\t\tnext.ServeHTTP(w, r.WithContext(ctx))\n\t\t})\n\t}\n\n\t// Each route represents value of its counter (number of applied middlewares).\n\tr := NewRouter() // counter == 0\n\tr.Get(\"/0\", handlerPrintCounter)\n\tr.Group(func(r Router) {\n\t\tr.Use(mwIncreaseCounter) // counter == 1\n\t\tr.Get(\"/1\", handlerPrintCounter)\n\n\t\t// r.Handle(GET, \"/2\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\tr.With(mwIncreaseCounter).Get(\"/2\", handlerPrintCounter)\n\n\t\tr.Group(func(r Router) {\n\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 3\n\t\t\tr.Get(\"/3\", handlerPrintCounter)\n\t\t})\n\t\tr.Route(\"/\", func(r Router) {\n\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 3\n\n\t\t\t// r.Handle(GET, \"/4\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\t\tr.With(mwIncreaseCounter).Get(\"/4\", handlerPrintCounter)\n\n\t\t\tr.Group(func(r Router) {\n\t\t\t\tr.Use(mwIncreaseCounter, mwIncreaseCounter) // counter == 5\n\t\t\t\tr.Get(\"/5\", handlerPrintCounter)\n\t\t\t\t// r.Handle(GET, \"/6\", Chain(mwIncreaseCounter).HandlerFunc(handlerPrintCounter))\n\t\t\t\tr.With(mwIncreaseCounter).Get(\"/6\", handlerPrintCounter)\n\n\t\t\t})\n\t\t})\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tfor _, route := range []string{\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\"} {\n\t\tif _, body := testRequest(t, ts, \"GET\", \"/\"+route, nil); body != route {\n\t\t\tt.Errorf(\"expected %v, got %v\", route, body)\n\t\t}\n\t}\n}\n\nfunc TestMiddlewarePanicOnLateUse(t *testing.T) {\n\thandler := func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"hello\\n\"))\n\t}\n\n\tmw := func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\tnext.ServeHTTP(w, r)\n\t\t})\n\t}\n\n\tdefer func() {\n\t\tif recover() == nil {\n\t\t\tt.Error(\"expected panic()\")\n\t\t}\n\t}()\n\n\tr := NewRouter()\n\tr.Get(\"/\", handler)\n\tr.Use(mw) // Too late to apply middleware, we're expecting panic().\n}\n\nfunc TestMountingExistingPath(t *testing.T) {\n\thandler := func(w http.ResponseWriter, r *http.Request) {}\n\n\tdefer func() {\n\t\tif recover() == nil {\n\t\t\tt.Error(\"expected panic()\")\n\t\t}\n\t}()\n\n\tr := NewRouter()\n\tr.Get(\"/\", handler)\n\tr.Mount(\"/hi\", http.HandlerFunc(handler))\n\tr.Mount(\"/hi\", http.HandlerFunc(handler))\n}\n\nfunc TestMountingSimilarPattern(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\n\tr2 := NewRouter()\n\tr2.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"foobar\"))\n\t})\n\n\tr3 := NewRouter()\n\tr3.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"foo\"))\n\t})\n\n\tr.Mount(\"/foobar\", r2)\n\tr.Mount(\"/foo\", r3)\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/hi\", nil); body != \"bye\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxEmptyParams(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(`/users/{x}/{y}/{z}`, func(w http.ResponseWriter, r *http.Request) {\n\t\tx := URLParam(r, \"x\")\n\t\ty := URLParam(r, \"y\")\n\t\tz := URLParam(r, \"z\")\n\t\tw.Write([]byte(fmt.Sprintf(\"%s-%s-%s\", x, y, z)))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/users/a/b/c\", nil); body != \"a-b-c\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/users///c\", nil); body != \"--c\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxMissingParams(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(`/user/{userId:\\d+}`, func(w http.ResponseWriter, r *http.Request) {\n\t\tuserID := URLParam(r, \"userId\")\n\t\tw.Write([]byte(fmt.Sprintf(\"userId = '%s'\", userID)))\n\t})\n\tr.NotFound(func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(404)\n\t\tw.Write([]byte(\"nothing here\"))\n\t})\n\n\tts := httptest.NewServer(r)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/user/123\", nil); body != \"userId = '123'\" {\n\t\tt.Fatalf(body)\n\t}\n\tif _, body := testRequest(t, ts, \"GET\", \"/user/\", nil); body != \"nothing here\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxContextIsThreadSafe(t *testing.T) {\n\trouter := NewRouter()\n\trouter.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\tctx, cancel := context.WithTimeout(r.Context(), 1*time.Millisecond)\n\t\tdefer cancel()\n\n\t\t<-ctx.Done()\n\t})\n\n\twg := sync.WaitGroup{}\n\n\tfor i := 0; i < 100; i++ {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor j := 0; j < 10000; j++ {\n\t\t\t\tw := httptest.NewRecorder()\n\t\t\t\tr, err := http.NewRequest(\"GET\", \"/ok\", nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatal(err)\n\t\t\t\t}\n\n\t\t\t\tctx, cancel := context.WithCancel(r.Context())\n\t\t\t\tr = r.WithContext(ctx)\n\n\t\t\t\tgo func() {\n\t\t\t\t\tcancel()\n\t\t\t\t}()\n\t\t\t\trouter.ServeHTTP(w, r)\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n}\n\nfunc TestEscapedURLParams(t *testing.T) {\n\tm := NewRouter()\n\tm.Get(\"/api/{identifier}/{region}/{size}/{rotation}/*\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(200)\n\t\trctx := RouteContext(r.Context())\n\t\tif rctx == nil {\n\t\t\tt.Error(\"no context\")\n\t\t\treturn\n\t\t}\n\t\tidentifier := URLParam(r, \"identifier\")\n\t\tif identifier != \"http:%2f%2fexample.com%2fimage.png\" {\n\t\t\tt.Errorf(\"identifier path parameter incorrect %s\", identifier)\n\t\t\treturn\n\t\t}\n\t\tregion := URLParam(r, \"region\")\n\t\tif region != \"full\" {\n\t\t\tt.Errorf(\"region path parameter incorrect %s\", region)\n\t\t\treturn\n\t\t}\n\t\tsize := URLParam(r, \"size\")\n\t\tif size != \"max\" {\n\t\t\tt.Errorf(\"size path parameter incorrect %s\", size)\n\t\t\treturn\n\t\t}\n\t\trotation := URLParam(r, \"rotation\")\n\t\tif rotation != \"0\" {\n\t\t\tt.Errorf(\"rotation path parameter incorrect %s\", rotation)\n\t\t\treturn\n\t\t}\n\t\tw.Write([]byte(\"success\"))\n\t})\n\n\tts := httptest.NewServer(m)\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/api/http:%2f%2fexample.com%2fimage.png/full/max/0/color.png\", nil); body != \"success\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc TestMuxMatch(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/hi\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Header().Set(\"X-Test\", \"yes\")\n\t\tw.Write([]byte(\"bye\"))\n\t})\n\tr.Route(\"/articles\", func(r Router) {\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-Article\", id)\n\t\t\tw.Write([]byte(\"article:\" + id))\n\t\t})\n\t})\n\tr.Route(\"/users\", func(r Router) {\n\t\tr.Head(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tw.Header().Set(\"X-User\", \"-\")\n\t\t\tw.Write([]byte(\"user\"))\n\t\t})\n\t\tr.Get(\"/{id}\", func(w http.ResponseWriter, r *http.Request) {\n\t\t\tid := URLParam(r, \"id\")\n\t\t\tw.Header().Set(\"X-User\", id)\n\t\t\tw.Write([]byte(\"user:\" + id))\n\t\t})\n\t})\n\n\ttctx := NewRouteContext()\n\n\ttctx.Reset()\n\tif r.Match(tctx, \"GET\", \"/users/1\") == false {\n\t\tt.Fatal(\"expecting to find match for route:\", \"GET\", \"/users/1\")\n\t}\n\n\ttctx.Reset()\n\tif r.Match(tctx, \"HEAD\", \"/articles/10\") == true {\n\t\tt.Fatal(\"not expecting to find match for route:\", \"HEAD\", \"/articles/10\")\n\t}\n}\n\nfunc TestServerBaseContext(t *testing.T) {\n\tr := NewRouter()\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tbaseYes := r.Context().Value(ctxKey{\"base\"}).(string)\n\t\tif _, ok := r.Context().Value(http.ServerContextKey).(*http.Server); !ok {\n\t\t\tpanic(\"missing server context\")\n\t\t}\n\t\tif _, ok := r.Context().Value(http.LocalAddrContextKey).(net.Addr); !ok {\n\t\t\tpanic(\"missing local addr context\")\n\t\t}\n\t\tw.Write([]byte(baseYes))\n\t})\n\n\t// Setup http Server with a base context\n\tctx := context.WithValue(context.Background(), ctxKey{\"base\"}, \"yes\")\n\tts := httptest.NewServer(ServerBaseContext(ctx, r))\n\tdefer ts.Close()\n\n\tif _, body := testRequest(t, ts, \"GET\", \"/\", nil); body != \"yes\" {\n\t\tt.Fatalf(body)\n\t}\n}\n\nfunc testRequest(t *testing.T, ts *httptest.Server, method, path string, body io.Reader) (*http.Response, string) {\n\treq, err := http.NewRequest(method, ts.URL+path, body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\n\trespBody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t\treturn nil, \"\"\n\t}\n\tdefer resp.Body.Close()\n\n\treturn resp, string(respBody)\n}\n\nfunc testHandler(t *testing.T, h http.Handler, method, path string, body io.Reader) (*http.Response, string) {\n\tr, _ := http.NewRequest(method, path, body)\n\tw := httptest.NewRecorder()\n\th.ServeHTTP(w, r)\n\treturn w.Result(), string(w.Body.Bytes())\n}\n\ntype testFileSystem struct {\n\topen func(name string) (http.File, error)\n}\n\nfunc (fs *testFileSystem) Open(name string) (http.File, error) {\n\treturn fs.open(name)\n}\n\ntype testFile struct {\n\tname     string\n\tcontents []byte\n}\n\nfunc (tf *testFile) Close() error {\n\treturn nil\n}\n\nfunc (tf *testFile) Read(p []byte) (n int, err error) {\n\tcopy(p, tf.contents)\n\treturn len(p), nil\n}\n\nfunc (tf *testFile) Seek(offset int64, whence int) (int64, error) {\n\treturn 0, nil\n}\n\nfunc (tf *testFile) Readdir(count int) ([]os.FileInfo, error) {\n\tstat, _ := tf.Stat()\n\treturn []os.FileInfo{stat}, nil\n}\n\nfunc (tf *testFile) Stat() (os.FileInfo, error) {\n\treturn &testFileInfo{tf.name, int64(len(tf.contents))}, nil\n}\n\ntype testFileInfo struct {\n\tname string\n\tsize int64\n}\n\nfunc (tfi *testFileInfo) Name() string       { return tfi.name }\nfunc (tfi *testFileInfo) Size() int64        { return tfi.size }\nfunc (tfi *testFileInfo) Mode() os.FileMode  { return 0755 }\nfunc (tfi *testFileInfo) ModTime() time.Time { return time.Now() }\nfunc (tfi *testFileInfo) IsDir() bool        { return false }\nfunc (tfi *testFileInfo) Sys() interface{}   { return nil }\n\ntype ctxKey struct {\n\tname string\n}\n\nfunc (k ctxKey) String() string {\n\treturn \"context value \" + k.name\n}\n\nfunc BenchmarkMux(b *testing.B) {\n\th1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\tmx := NewRouter()\n\tmx.Get(\"/\", h1)\n\tmx.Get(\"/hi\", h2)\n\tmx.Get(\"/sup/{id}/and/{this}\", h3)\n\n\tmx.Route(\"/sharing/{hash}\", func(mx Router) {\n\t\tmx.Get(\"/\", h4)          // subrouter-1\n\t\tmx.Get(\"/{network}\", h5) // subrouter-1\n\t\tmx.Get(\"/twitter\", h5)\n\t\tmx.Route(\"/direct\", func(mx Router) {\n\t\t\tmx.Get(\"/\", h6) // subrouter-2\n\t\t})\n\t})\n\n\troutes := []string{\n\t\t\"/\",\n\t\t\"/sup/123/and/this\",\n\t\t\"/sharing/aBc\",         // subrouter-1\n\t\t\"/sharing/aBc/twitter\", // subrouter-1\n\t\t\"/sharing/aBc/direct\",  // subrouter-2\n\t}\n\n\tfor _, path := range routes {\n\t\tb.Run(\"route:\"+path, func(b *testing.B) {\n\t\t\tw := httptest.NewRecorder()\n\t\t\tr, _ := http.NewRequest(\"GET\", path, nil)\n\n\t\t\tb.ReportAllocs()\n\t\t\tb.ResetTimer()\n\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\tmx.ServeHTTP(w, r)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/testdata/cert.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIC/zCCAeegAwIBAgIRANioW0Re7DtpT4qZpJU1iK8wDQYJKoZIhvcNAQELBQAw\nEjEQMA4GA1UEChMHQWNtZSBDbzAeFw0xNjEyMzExNDU0MzBaFw0xNzEyMzExNDU0\nMzBaMBIxEDAOBgNVBAoTB0FjbWUgQ28wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\nggEKAoIBAQDpFfOsaXDYlL+ektfsqGYrSAsoTbe7zqjpow9nqUU4PmLRu2YMaaW8\nfAoneUnJxsJw7ql38+VMpphZUOmOWvsO7uV/lfnTIQfTwllHDdgAR5A11d84Zy/y\nTiNIFJduuaPtEhQs1dxPhU7TG8sEfFRhBoUDPv473akeGPNkVU756RVBYM6rUc3b\nYygD0PXGsQ2obrImbYUyyHH5YClCvGl1No57n3ugLqSSfwbgR3/Gw7kkGKy0PMOu\nTuHuJnTEmofJPkqEyFRVMlIAtfqFqJUfDHTOuQGWIUPnjDg+fqTI9EPJ+pElBqDQ\nIqW93BY5XePMdrTQc1h6xkduDfuLeA7TAgMBAAGjUDBOMA4GA1UdDwEB/wQEAwIF\noDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMBkGA1UdEQQSMBCC\nDmxvY2FsaG9zdDo3MDcyMA0GCSqGSIb3DQEBCwUAA4IBAQDnsWmZdf7209A/XHUe\nxoONCbU8jaYFVoA+CN9J+3CASzrzTQ4fh9RJdm2FZuv4sWnb5c5hDN7H/M/nLcb0\n+uu7ACBGhd7yACYCQm/z3Pm3CY2BRIo0vCCRioGx+6J3CPGWFm0vHwNBge0iBOKC\nWn+/YOlTDth/M3auHYlr7hdFmf57U4V/5iTr4wiKxwM9yMPcVRQF/1XpPd7A0VqM\nnFSEfDpFjrA7MvT3DrRqQGqF/ZXxDbro2nyki3YG8FwgKlFNVN9w55zNiriQ+WNA\nuz86lKg1FTc+m/R/0CD//7+7mme28N813EPVdV83TgxWNrfvAIRazkHE7YxETry0\nBJDg\n-----END CERTIFICATE-----"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/testdata/key.pem",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA6RXzrGlw2JS/npLX7KhmK0gLKE23u86o6aMPZ6lFOD5i0btm\nDGmlvHwKJ3lJycbCcO6pd/PlTKaYWVDpjlr7Du7lf5X50yEH08JZRw3YAEeQNdXf\nOGcv8k4jSBSXbrmj7RIULNXcT4VO0xvLBHxUYQaFAz7+O92pHhjzZFVO+ekVQWDO\nq1HN22MoA9D1xrENqG6yJm2FMshx+WApQrxpdTaOe597oC6kkn8G4Ed/xsO5JBis\ntDzDrk7h7iZ0xJqHyT5KhMhUVTJSALX6haiVHwx0zrkBliFD54w4Pn6kyPRDyfqR\nJQag0CKlvdwWOV3jzHa00HNYesZHbg37i3gO0wIDAQABAoIBAFvqYDE5U1rVLctm\ntOeKcN/YhS3bl/zjvhCEUOrcAYPwdh+m+tMiRk1RzN9MISEE1GCcfQ/kiiPz/lga\nZD/S+PYmlzH8/ouXlvKWzYYLm4ZgsinIsUIYzvuKfLdMB3uOkWpHmtUjcMGbHD57\n009tiAjK/WEOUkthWfOYe0KxsXczBn3PTAWZuiIkuA3RVWa7pCCFHUENkViP58wl\nKy1hYKnunKPApRwuiC6qIT5ZOCSukdCCbkmRnj/x+P8+nsosu+1d85MNZb8uLRi0\nRzMmuOfOK2poDsrNHQX7itKlu7rzMJQc3+RauqIZovNe/BmSq+tYBLboXvUp18g/\n+VqKeEECgYEA/LaD1tJepzD/1lhgunFcnDjxsDJqLUpfR5eDMX1qhGJphuPBLOXS\nushmVVjbVIn25Wxeoe4RYrZ6Tuu0FEJJgV44Lt42OOFgK2gyrCJpYmlxpRaw+7jc\nDbp1Sh3/9VqMZjR/mQIzTnfOtS2n4Fk1Q53hdJn5Pn+uPMmMO4hF87sCgYEA7B4V\nBACsd6eqVxKkEMc72VLeYb0Ri0bl0FwbvIKXImppwA0tbMDmeA+6yhcRm23dhd5v\ncfNhJepRIzkM2CkhnazlsAbDoJPqb7/sbNzodtW1P0op7YIFYbrkcX4yOu9O1DNI\nIj4PR8H1WcpPjhvr3q+iNO5agQX7bMQ1BnnJg8kCgYBA1tdm090DSrgpl81hqNpZ\nHucsDRNfAXkG1mIL3aDpzJJE0MTsrx7tW6Od/ElyHF/jp3V0WK/PQwCIpUMz+3n+\nnl0N8We6GmFhYb+2mLGvVVyaPgM04s5bG18ioCXfHtdtFcUzTfQ6CtVXeRpcnqbi\n7Ww+TY88sOfUouW/FIzWJwKBgQCsLauJhaw+fOc8I328NmywJzu+7g5TD9oZvHEF\nX/0xvYNr5rAPNANb3ayKHZRbURxOuEtwPtfCvEF6e+mf3y6COkgrumMBP5ue7cdM\nAzMJJQHMKxqz9TJTd+OJ10ptq4BCQTsCrVqbKxbs6RhmOnofoteX3Y/lsiULxXAd\nTsXh8QKBgQDQHosH8VoL7vIK+SqY5uoHAhMytSVNx4IaZZg4ho8oyjw12QXcidgV\nQJZQMdPEv8cAK78WcQdSthop+O/tu2cKLHyAmWmO3oU7gIQECui0aMXSqraO6Vde\nC5tqYlyLa7bHZS3AqrjRv9BRfwPKVkmBoYdA652rN/tE/K4UWsghnA==\n-----END RSA PRIVATE KEY-----"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/tree.go",
    "content": "package chi\n\n// Radix tree implementation below is a based on the original work by\n// Armon Dadgar in https://github.com/armon/go-radix/blob/master/radix.go\n// (MIT licensed). It's been heavily modified for use as a HTTP routing tree.\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"net/http\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype methodTyp int\n\nconst (\n\tmSTUB methodTyp = 1 << iota\n\tmCONNECT\n\tmDELETE\n\tmGET\n\tmHEAD\n\tmOPTIONS\n\tmPATCH\n\tmPOST\n\tmPUT\n\tmTRACE\n)\n\nvar mALL = mCONNECT | mDELETE | mGET | mHEAD |\n\tmOPTIONS | mPATCH | mPOST | mPUT | mTRACE\n\nvar methodMap = map[string]methodTyp{\n\t\"CONNECT\": mCONNECT,\n\t\"DELETE\":  mDELETE,\n\t\"GET\":     mGET,\n\t\"HEAD\":    mHEAD,\n\t\"OPTIONS\": mOPTIONS,\n\t\"PATCH\":   mPATCH,\n\t\"POST\":    mPOST,\n\t\"PUT\":     mPUT,\n\t\"TRACE\":   mTRACE,\n}\n\n// RegisterMethod adds support for custom HTTP method handlers, available\n// via Router#Method and Router#MethodFunc\nfunc RegisterMethod(method string) {\n\tif method == \"\" {\n\t\treturn\n\t}\n\tmethod = strings.ToUpper(method)\n\tif _, ok := methodMap[method]; ok {\n\t\treturn\n\t}\n\tn := len(methodMap)\n\tif n > strconv.IntSize {\n\t\tpanic(fmt.Sprintf(\"chi: max number of methods reached (%d)\", strconv.IntSize))\n\t}\n\tmt := methodTyp(math.Exp2(float64(n)))\n\tmethodMap[method] = mt\n\tmALL |= mt\n}\n\ntype nodeTyp uint8\n\nconst (\n\tntStatic   nodeTyp = iota // /home\n\tntRegexp                  // /{id:[0-9]+}\n\tntParam                   // /{user}\n\tntCatchAll                // /api/v1/*\n)\n\ntype node struct {\n\t// node type: static, regexp, param, catchAll\n\ttyp nodeTyp\n\n\t// first byte of the prefix\n\tlabel byte\n\n\t// first byte of the child prefix\n\ttail byte\n\n\t// prefix is the common prefix we ignore\n\tprefix string\n\n\t// regexp matcher for regexp nodes\n\trex *regexp.Regexp\n\n\t// HTTP handler endpoints on the leaf node\n\tendpoints endpoints\n\n\t// subroutes on the leaf node\n\tsubroutes Routes\n\n\t// child nodes should be stored in-order for iteration,\n\t// in groups of the node type.\n\tchildren [ntCatchAll + 1]nodes\n}\n\n// endpoints is a mapping of http method constants to handlers\n// for a given route.\ntype endpoints map[methodTyp]*endpoint\n\ntype endpoint struct {\n\t// endpoint handler\n\thandler http.Handler\n\n\t// pattern is the routing pattern for handler nodes\n\tpattern string\n\n\t// parameter keys recorded on handler nodes\n\tparamKeys []string\n}\n\nfunc (s endpoints) Value(method methodTyp) *endpoint {\n\tmh, ok := s[method]\n\tif !ok {\n\t\tmh = &endpoint{}\n\t\ts[method] = mh\n\t}\n\treturn mh\n}\n\nfunc (n *node) InsertRoute(method methodTyp, pattern string, handler http.Handler) *node {\n\tvar parent *node\n\tsearch := pattern\n\n\tfor {\n\t\t// Handle key exhaustion\n\t\tif len(search) == 0 {\n\t\t\t// Insert or update the node's leaf handler\n\t\t\tn.setEndpoint(method, handler, pattern)\n\t\t\treturn n\n\t\t}\n\n\t\t// We're going to be searching for a wild node next,\n\t\t// in this case, we need to get the tail\n\t\tvar label = search[0]\n\t\tvar segTail byte\n\t\tvar segEndIdx int\n\t\tvar segTyp nodeTyp\n\t\tvar segRexpat string\n\t\tif label == '{' || label == '*' {\n\t\t\tsegTyp, _, segRexpat, segTail, _, segEndIdx = patNextSegment(search)\n\t\t}\n\n\t\tvar prefix string\n\t\tif segTyp == ntRegexp {\n\t\t\tprefix = segRexpat\n\t\t}\n\n\t\t// Look for the edge to attach to\n\t\tparent = n\n\t\tn = n.getEdge(segTyp, label, segTail, prefix)\n\n\t\t// No edge, create one\n\t\tif n == nil {\n\t\t\tchild := &node{label: label, tail: segTail, prefix: search}\n\t\t\thn := parent.addChild(child, search)\n\t\t\thn.setEndpoint(method, handler, pattern)\n\n\t\t\treturn hn\n\t\t}\n\n\t\t// Found an edge to match the pattern\n\n\t\tif n.typ > ntStatic {\n\t\t\t// We found a param node, trim the param from the search path and continue.\n\t\t\t// This param/wild pattern segment would already be on the tree from a previous\n\t\t\t// call to addChild when creating a new node.\n\t\t\tsearch = search[segEndIdx:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Static nodes fall below here.\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\t// the common prefix is as long as the current node's prefix we're attempting to insert.\n\t\t\t// keep the search going.\n\t\t\tsearch = search[commonPrefix:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split the node\n\t\tchild := &node{\n\t\t\ttyp:    ntStatic,\n\t\t\tprefix: search[:commonPrefix],\n\t\t}\n\t\tparent.replaceChild(search[0], segTail, child)\n\n\t\t// Restore the existing node\n\t\tn.label = n.prefix[commonPrefix]\n\t\tn.prefix = n.prefix[commonPrefix:]\n\t\tchild.addChild(n, n.prefix)\n\n\t\t// If the new key is a subset, set the method/handler on this node and finish.\n\t\tsearch = search[commonPrefix:]\n\t\tif len(search) == 0 {\n\t\t\tchild.setEndpoint(method, handler, pattern)\n\t\t\treturn child\n\t\t}\n\n\t\t// Create a new edge for the node\n\t\tsubchild := &node{\n\t\t\ttyp:    ntStatic,\n\t\t\tlabel:  search[0],\n\t\t\tprefix: search,\n\t\t}\n\t\thn := child.addChild(subchild, search)\n\t\thn.setEndpoint(method, handler, pattern)\n\t\treturn hn\n\t}\n}\n\n// addChild appends the new `child` node to the tree using the `pattern` as the trie key.\n// For a URL router like chi's, we split the static, param, regexp and wildcard segments\n// into different nodes. In addition, addChild will recursively call itself until every\n// pattern segment is added to the url pattern tree as individual nodes, depending on type.\nfunc (n *node) addChild(child *node, prefix string) *node {\n\tsearch := prefix\n\n\t// handler leaf node added to the tree is the child.\n\t// this may be overridden later down the flow\n\thn := child\n\n\t// Parse next segment\n\tsegTyp, _, segRexpat, segTail, segStartIdx, segEndIdx := patNextSegment(search)\n\n\t// Add child depending on next up segment\n\tswitch segTyp {\n\n\tcase ntStatic:\n\t\t// Search prefix is all static (that is, has no params in path)\n\t\t// noop\n\n\tdefault:\n\t\t// Search prefix contains a param, regexp or wildcard\n\n\t\tif segTyp == ntRegexp {\n\t\t\trex, err := regexp.Compile(segRexpat)\n\t\t\tif err != nil {\n\t\t\t\tpanic(fmt.Sprintf(\"chi: invalid regexp pattern '%s' in route param\", segRexpat))\n\t\t\t}\n\t\t\tchild.prefix = segRexpat\n\t\t\tchild.rex = rex\n\t\t}\n\n\t\tif segStartIdx == 0 {\n\t\t\t// Route starts with a param\n\t\t\tchild.typ = segTyp\n\n\t\t\tif segTyp == ntCatchAll {\n\t\t\t\tsegStartIdx = -1\n\t\t\t} else {\n\t\t\t\tsegStartIdx = segEndIdx\n\t\t\t}\n\t\t\tif segStartIdx < 0 {\n\t\t\t\tsegStartIdx = len(search)\n\t\t\t}\n\t\t\tchild.tail = segTail // for params, we set the tail\n\n\t\t\tif segStartIdx != len(search) {\n\t\t\t\t// add static edge for the remaining part, split the end.\n\t\t\t\t// its not possible to have adjacent param nodes, so its certainly\n\t\t\t\t// going to be a static node next.\n\n\t\t\t\tsearch = search[segStartIdx:] // advance search position\n\n\t\t\t\tnn := &node{\n\t\t\t\t\ttyp:    ntStatic,\n\t\t\t\t\tlabel:  search[0],\n\t\t\t\t\tprefix: search,\n\t\t\t\t}\n\t\t\t\thn = child.addChild(nn, search)\n\t\t\t}\n\n\t\t} else if segStartIdx > 0 {\n\t\t\t// Route has some param\n\n\t\t\t// starts with a static segment\n\t\t\tchild.typ = ntStatic\n\t\t\tchild.prefix = search[:segStartIdx]\n\t\t\tchild.rex = nil\n\n\t\t\t// add the param edge node\n\t\t\tsearch = search[segStartIdx:]\n\n\t\t\tnn := &node{\n\t\t\t\ttyp:   segTyp,\n\t\t\t\tlabel: search[0],\n\t\t\t\ttail:  segTail,\n\t\t\t}\n\t\t\thn = child.addChild(nn, search)\n\n\t\t}\n\t}\n\n\tn.children[child.typ] = append(n.children[child.typ], child)\n\tn.children[child.typ].Sort()\n\treturn hn\n}\n\nfunc (n *node) replaceChild(label, tail byte, child *node) {\n\tfor i := 0; i < len(n.children[child.typ]); i++ {\n\t\tif n.children[child.typ][i].label == label && n.children[child.typ][i].tail == tail {\n\t\t\tn.children[child.typ][i] = child\n\t\t\tn.children[child.typ][i].label = label\n\t\t\tn.children[child.typ][i].tail = tail\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"chi: replacing missing child\")\n}\n\nfunc (n *node) getEdge(ntyp nodeTyp, label, tail byte, prefix string) *node {\n\tnds := n.children[ntyp]\n\tfor i := 0; i < len(nds); i++ {\n\t\tif nds[i].label == label && nds[i].tail == tail {\n\t\t\tif ntyp == ntRegexp && nds[i].prefix != prefix {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nds[i]\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (n *node) setEndpoint(method methodTyp, handler http.Handler, pattern string) {\n\t// Set the handler for the method type on the node\n\tif n.endpoints == nil {\n\t\tn.endpoints = make(endpoints, 0)\n\t}\n\n\tparamKeys := patParamKeys(pattern)\n\n\tif method&mSTUB == mSTUB {\n\t\tn.endpoints.Value(mSTUB).handler = handler\n\t}\n\tif method&mALL == mALL {\n\t\th := n.endpoints.Value(mALL)\n\t\th.handler = handler\n\t\th.pattern = pattern\n\t\th.paramKeys = paramKeys\n\t\tfor _, m := range methodMap {\n\t\t\th := n.endpoints.Value(m)\n\t\t\th.handler = handler\n\t\t\th.pattern = pattern\n\t\t\th.paramKeys = paramKeys\n\t\t}\n\t} else {\n\t\th := n.endpoints.Value(method)\n\t\th.handler = handler\n\t\th.pattern = pattern\n\t\th.paramKeys = paramKeys\n\t}\n}\n\nfunc (n *node) FindRoute(rctx *Context, method methodTyp, path string) (*node, endpoints, http.Handler) {\n\t// Reset the context routing pattern and params\n\trctx.routePattern = \"\"\n\trctx.routeParams.Keys = rctx.routeParams.Keys[:0]\n\trctx.routeParams.Values = rctx.routeParams.Values[:0]\n\n\t// Find the routing handlers for the path\n\trn := n.findRoute(rctx, method, path)\n\tif rn == nil {\n\t\treturn nil, nil, nil\n\t}\n\n\t// Record the routing params in the request lifecycle\n\trctx.URLParams.Keys = append(rctx.URLParams.Keys, rctx.routeParams.Keys...)\n\trctx.URLParams.Values = append(rctx.URLParams.Values, rctx.routeParams.Values...)\n\n\t// Record the routing pattern in the request lifecycle\n\tif rn.endpoints[method].pattern != \"\" {\n\t\trctx.routePattern = rn.endpoints[method].pattern\n\t\trctx.RoutePatterns = append(rctx.RoutePatterns, rctx.routePattern)\n\t}\n\n\treturn rn, rn.endpoints, rn.endpoints[method].handler\n}\n\n// Recursive edge traversal by checking all nodeTyp groups along the way.\n// It's like searching through a multi-dimensional radix trie.\nfunc (n *node) findRoute(rctx *Context, method methodTyp, path string) *node {\n\tnn := n\n\tsearch := path\n\n\tfor t, nds := range nn.children {\n\t\tntyp := nodeTyp(t)\n\t\tif len(nds) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar xn *node\n\t\txsearch := search\n\n\t\tvar label byte\n\t\tif search != \"\" {\n\t\t\tlabel = search[0]\n\t\t}\n\n\t\tswitch ntyp {\n\t\tcase ntStatic:\n\t\t\txn = nds.findEdge(label)\n\t\t\tif xn == nil || !strings.HasPrefix(xsearch, xn.prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\txsearch = xsearch[len(xn.prefix):]\n\n\t\tcase ntParam, ntRegexp:\n\t\t\t// short-circuit and return no matching route for empty param values\n\t\t\tif xsearch == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// serially loop through each node grouped by the tail delimiter\n\t\t\tfor idx := 0; idx < len(nds); idx++ {\n\t\t\t\txn = nds[idx]\n\n\t\t\t\t// label for param nodes is the delimiter byte\n\t\t\t\tp := strings.IndexByte(xsearch, xn.tail)\n\n\t\t\t\tif p < 0 {\n\t\t\t\t\tif xn.tail == '/' {\n\t\t\t\t\t\tp = len(xsearch)\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}\n\n\t\t\t\tif ntyp == ntRegexp && xn.rex != nil {\n\t\t\t\t\tif xn.rex.Match([]byte(xsearch[:p])) == false {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if strings.IndexByte(xsearch[:p], '/') != -1 {\n\t\t\t\t\t// avoid a match across path segments\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\trctx.routeParams.Values = append(rctx.routeParams.Values, xsearch[:p])\n\t\t\t\txsearch = xsearch[p:]\n\t\t\t\tbreak\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// catch-all nodes\n\t\t\trctx.routeParams.Values = append(rctx.routeParams.Values, search)\n\t\t\txn = nds[0]\n\t\t\txsearch = \"\"\n\t\t}\n\n\t\tif xn == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// did we find it yet?\n\t\tif len(xsearch) == 0 {\n\t\t\tif xn.isLeaf() {\n\t\t\t\th, _ := xn.endpoints[method]\n\t\t\t\tif h != nil && h.handler != nil {\n\t\t\t\t\trctx.routeParams.Keys = append(rctx.routeParams.Keys, h.paramKeys...)\n\t\t\t\t\treturn xn\n\t\t\t\t}\n\n\t\t\t\t// flag that the routing context found a route, but not a corresponding\n\t\t\t\t// supported method\n\t\t\t\trctx.methodNotAllowed = true\n\t\t\t}\n\t\t}\n\n\t\t// recursively find the next node..\n\t\tfin := xn.findRoute(rctx, method, xsearch)\n\t\tif fin != nil {\n\t\t\treturn fin\n\t\t}\n\n\t\t// Did not find final handler, let's remove the param here if it was set\n\t\tif xn.typ > ntStatic {\n\t\t\tif len(rctx.routeParams.Values) > 0 {\n\t\t\t\trctx.routeParams.Values = rctx.routeParams.Values[:len(rctx.routeParams.Values)-1]\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn nil\n}\n\nfunc (n *node) findEdge(ntyp nodeTyp, label byte) *node {\n\tnds := n.children[ntyp]\n\tnum := len(nds)\n\tidx := 0\n\n\tswitch ntyp {\n\tcase ntStatic, ntParam, ntRegexp:\n\t\ti, j := 0, num-1\n\t\tfor i <= j {\n\t\t\tidx = i + (j-i)/2\n\t\t\tif label > nds[idx].label {\n\t\t\t\ti = idx + 1\n\t\t\t} else if label < nds[idx].label {\n\t\t\t\tj = idx - 1\n\t\t\t} else {\n\t\t\t\ti = num // breaks cond\n\t\t\t}\n\t\t}\n\t\tif nds[idx].label != label {\n\t\t\treturn nil\n\t\t}\n\t\treturn nds[idx]\n\n\tdefault: // catch all\n\t\treturn nds[idx]\n\t}\n}\n\nfunc (n *node) isEmpty() bool {\n\tfor _, nds := range n.children {\n\t\tif len(nds) > 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (n *node) isLeaf() bool {\n\treturn n.endpoints != nil\n}\n\nfunc (n *node) findPattern(pattern string) bool {\n\tnn := n\n\tfor _, nds := range nn.children {\n\t\tif len(nds) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tn = nn.findEdge(nds[0].typ, pattern[0])\n\t\tif n == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar idx int\n\t\tvar xpattern string\n\n\t\tswitch n.typ {\n\t\tcase ntStatic:\n\t\t\tidx = longestPrefix(pattern, n.prefix)\n\t\t\tif idx < len(n.prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\tcase ntParam, ntRegexp:\n\t\t\tidx = strings.IndexByte(pattern, '}') + 1\n\n\t\tcase ntCatchAll:\n\t\t\tidx = longestPrefix(pattern, \"*\")\n\n\t\tdefault:\n\t\t\tpanic(\"chi: unknown node type\")\n\t\t}\n\n\t\txpattern = pattern[idx:]\n\t\tif len(xpattern) == 0 {\n\t\t\treturn true\n\t\t}\n\n\t\treturn n.findPattern(xpattern)\n\t}\n\treturn false\n}\n\nfunc (n *node) routes() []Route {\n\trts := []Route{}\n\n\tn.walk(func(eps endpoints, subroutes Routes) bool {\n\t\tif eps[mSTUB] != nil && eps[mSTUB].handler != nil && subroutes == nil {\n\t\t\treturn false\n\t\t}\n\n\t\t// Group methodHandlers by unique patterns\n\t\tpats := make(map[string]endpoints, 0)\n\n\t\tfor mt, h := range eps {\n\t\t\tif h.pattern == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp, ok := pats[h.pattern]\n\t\t\tif !ok {\n\t\t\t\tp = endpoints{}\n\t\t\t\tpats[h.pattern] = p\n\t\t\t}\n\t\t\tp[mt] = h\n\t\t}\n\n\t\tfor p, mh := range pats {\n\t\t\ths := make(map[string]http.Handler, 0)\n\t\t\tif mh[mALL] != nil && mh[mALL].handler != nil {\n\t\t\t\ths[\"*\"] = mh[mALL].handler\n\t\t\t}\n\n\t\t\tfor mt, h := range mh {\n\t\t\t\tif h.handler == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tm := methodTypString(mt)\n\t\t\t\tif m == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ths[m] = h.handler\n\t\t\t}\n\n\t\t\trt := Route{p, hs, subroutes}\n\t\t\trts = append(rts, rt)\n\t\t}\n\n\t\treturn false\n\t})\n\n\treturn rts\n}\n\nfunc (n *node) walk(fn func(eps endpoints, subroutes Routes) bool) bool {\n\t// Visit the leaf values if any\n\tif (n.endpoints != nil || n.subroutes != nil) && fn(n.endpoints, n.subroutes) {\n\t\treturn true\n\t}\n\n\t// Recurse on the children\n\tfor _, ns := range n.children {\n\t\tfor _, cn := range ns {\n\t\t\tif cn.walk(fn) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// patNextSegment returns the next segment details from a pattern:\n// node type, param key, regexp string, param tail byte, param starting index, param ending index\nfunc patNextSegment(pattern string) (nodeTyp, string, string, byte, int, int) {\n\tps := strings.Index(pattern, \"{\")\n\tws := strings.Index(pattern, \"*\")\n\n\tif ps < 0 && ws < 0 {\n\t\treturn ntStatic, \"\", \"\", 0, 0, len(pattern) // we return the entire thing\n\t}\n\n\t// Sanity check\n\tif ps >= 0 && ws >= 0 && ws < ps {\n\t\tpanic(\"chi: wildcard '*' must be the last pattern in a route, otherwise use a '{param}'\")\n\t}\n\n\tvar tail byte = '/' // Default endpoint tail to / byte\n\n\tif ps >= 0 {\n\t\t// Param/Regexp pattern is next\n\t\tnt := ntParam\n\n\t\t// Read to closing } taking into account opens and closes in curl count (cc)\n\t\tcc := 0\n\t\tpe := ps\n\t\tfor i, c := range pattern[ps:] {\n\t\t\tif c == '{' {\n\t\t\t\tcc++\n\t\t\t} else if c == '}' {\n\t\t\t\tcc--\n\t\t\t\tif cc == 0 {\n\t\t\t\t\tpe = ps + i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif pe == ps {\n\t\t\tpanic(\"chi: route param closing delimiter '}' is missing\")\n\t\t}\n\n\t\tkey := pattern[ps+1 : pe]\n\t\tpe++ // set end to next position\n\n\t\tif pe < len(pattern) {\n\t\t\ttail = pattern[pe]\n\t\t}\n\n\t\tvar rexpat string\n\t\tif idx := strings.Index(key, \":\"); idx >= 0 {\n\t\t\tnt = ntRegexp\n\t\t\trexpat = key[idx+1:]\n\t\t\tkey = key[:idx]\n\t\t}\n\n\t\tif len(rexpat) > 0 {\n\t\t\tif rexpat[0] != '^' {\n\t\t\t\trexpat = \"^\" + rexpat\n\t\t\t}\n\t\t\tif rexpat[len(rexpat)-1] != '$' {\n\t\t\t\trexpat = rexpat + \"$\"\n\t\t\t}\n\t\t}\n\n\t\treturn nt, key, rexpat, tail, ps, pe\n\t}\n\n\t// Wildcard pattern as finale\n\t// TODO: should we panic if there is stuff after the * ???\n\treturn ntCatchAll, \"*\", \"\", 0, ws, len(pattern)\n}\n\nfunc patParamKeys(pattern string) []string {\n\tpat := pattern\n\tparamKeys := []string{}\n\tfor {\n\t\tptyp, paramKey, _, _, _, e := patNextSegment(pat)\n\t\tif ptyp == ntStatic {\n\t\t\treturn paramKeys\n\t\t}\n\t\tfor i := 0; i < len(paramKeys); i++ {\n\t\t\tif paramKeys[i] == paramKey {\n\t\t\t\tpanic(fmt.Sprintf(\"chi: routing pattern '%s' contains duplicate param key, '%s'\", pattern, paramKey))\n\t\t\t}\n\t\t}\n\t\tparamKeys = append(paramKeys, paramKey)\n\t\tpat = pat[e:]\n\t}\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\nfunc methodTypString(method methodTyp) string {\n\tfor s, t := range methodMap {\n\t\tif method == t {\n\t\t\treturn s\n\t\t}\n\t}\n\treturn \"\"\n}\n\ntype nodes []*node\n\n// Sort the list of nodes by label\nfunc (ns nodes) Sort()              { sort.Sort(ns); ns.tailSort() }\nfunc (ns nodes) Len() int           { return len(ns) }\nfunc (ns nodes) Swap(i, j int)      { ns[i], ns[j] = ns[j], ns[i] }\nfunc (ns nodes) Less(i, j int) bool { return ns[i].label < ns[j].label }\n\n// tailSort pushes nodes with '/' as the tail to the end of the list for param nodes.\n// The list order determines the traversal order.\nfunc (ns nodes) tailSort() {\n\tfor i := len(ns) - 1; i >= 0; i-- {\n\t\tif ns[i].typ > ntStatic && ns[i].tail == '/' {\n\t\t\tns.Swap(i, len(ns)-1)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (ns nodes) findEdge(label byte) *node {\n\tnum := len(ns)\n\tidx := 0\n\ti, j := 0, num-1\n\tfor i <= j {\n\t\tidx = i + (j-i)/2\n\t\tif label > ns[idx].label {\n\t\t\ti = idx + 1\n\t\t} else if label < ns[idx].label {\n\t\t\tj = idx - 1\n\t\t} else {\n\t\t\ti = num // breaks cond\n\t\t}\n\t}\n\tif ns[idx].label != label {\n\t\treturn nil\n\t}\n\treturn ns[idx]\n}\n\n// Route describes the details of a routing handler.\ntype Route struct {\n\tPattern   string\n\tHandlers  map[string]http.Handler\n\tSubRoutes Routes\n}\n\n// WalkFunc is the type of the function called for each method and route visited by Walk.\ntype WalkFunc func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error\n\n// Walk walks any router tree that implements Routes interface.\nfunc Walk(r Routes, walkFn WalkFunc) error {\n\treturn walk(r, walkFn, \"\")\n}\n\nfunc walk(r Routes, walkFn WalkFunc, parentRoute string, parentMw ...func(http.Handler) http.Handler) error {\n\tfor _, route := range r.Routes() {\n\t\tmws := make([]func(http.Handler) http.Handler, len(parentMw))\n\t\tcopy(mws, parentMw)\n\t\tmws = append(mws, r.Middlewares()...)\n\n\t\tif route.SubRoutes != nil {\n\t\t\tif err := walk(route.SubRoutes, walkFn, parentRoute+route.Pattern, mws...); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tfor method, handler := range route.Handlers {\n\t\t\tif method == \"*\" {\n\t\t\t\t// Ignore a \"catchAll\" method, since we pass down all the specific methods for each route.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfullRoute := parentRoute + route.Pattern\n\n\t\t\tif chain, ok := handler.(*ChainHandler); ok {\n\t\t\t\tif err := walkFn(method, fullRoute, chain.Endpoint, append(mws, chain.Middlewares...)...); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := walkFn(method, fullRoute, handler, mws...); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/chi/tree_test.go",
    "content": "package chi\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"testing\"\n)\n\nfunc TestTree(t *testing.T) {\n\thStub := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thIndex := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thFavicon := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleNear := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShowRelated := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleShowOpts := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleSlug := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thArticleByUser := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserList := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminCatchall := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminAppShow := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thAdminAppShowCatchall := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserProfile := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserSuper := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thUserAll := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thHubView3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\n\ttr.InsertRoute(mGET, \"/\", hIndex)\n\ttr.InsertRoute(mGET, \"/favicon.ico\", hFavicon)\n\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub)\n\n\ttr.InsertRoute(mGET, \"/article\", hArticleList)\n\ttr.InsertRoute(mGET, \"/article/\", hArticleList)\n\n\ttr.InsertRoute(mGET, \"/article/near\", hArticleNear)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hStub)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hArticleShow)\n\ttr.InsertRoute(mGET, \"/article/{id}\", hArticleShow) // duplicate will have no effect\n\ttr.InsertRoute(mGET, \"/article/@{user}\", hArticleByUser)\n\n\ttr.InsertRoute(mGET, \"/article/{sup}/{opts}\", hArticleShowOpts)\n\ttr.InsertRoute(mGET, \"/article/{id}/{opts}\", hArticleShowOpts) // overwrite above route, latest wins\n\n\ttr.InsertRoute(mGET, \"/article/{iffd}/edit\", hStub)\n\ttr.InsertRoute(mGET, \"/article/{id}//related\", hArticleShowRelated)\n\ttr.InsertRoute(mGET, \"/article/slug/{month}/-/{day}/{year}\", hArticleSlug)\n\n\ttr.InsertRoute(mGET, \"/admin/user\", hUserList)\n\ttr.InsertRoute(mGET, \"/admin/user/\", hStub) // will get replaced by next route\n\ttr.InsertRoute(mGET, \"/admin/user/\", hUserList)\n\n\ttr.InsertRoute(mGET, \"/admin/user//{id}\", hUserShow)\n\ttr.InsertRoute(mGET, \"/admin/user/{id}\", hUserShow)\n\n\ttr.InsertRoute(mGET, \"/admin/apps/{id}\", hAdminAppShow)\n\ttr.InsertRoute(mGET, \"/admin/apps/{id}/*ff\", hAdminAppShowCatchall) // TODO: ALLOWED...? prob not.. panic..?\n\n\ttr.InsertRoute(mGET, \"/admin/*ff\", hStub) // catchall segment will get replaced by next route\n\ttr.InsertRoute(mGET, \"/admin/*\", hAdminCatchall)\n\n\ttr.InsertRoute(mGET, \"/users/{userID}/profile\", hUserProfile)\n\ttr.InsertRoute(mGET, \"/users/super/*\", hUserSuper)\n\ttr.InsertRoute(mGET, \"/users/*\", hUserAll)\n\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/view\", hHubView1)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/view/*\", hHubView2)\n\tsr := NewRouter()\n\tsr.Get(\"/users\", hHubView3)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/*\", sr)\n\ttr.InsertRoute(mGET, \"/hubs/{hubID}/users\", hHubView3)\n\n\ttests := []struct {\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{r: \"/\", h: hIndex, k: []string{}, v: []string{}},\n\t\t{r: \"/favicon.ico\", h: hFavicon, k: []string{}, v: []string{}},\n\n\t\t{r: \"/pages\", h: nil, k: []string{}, v: []string{}},\n\t\t{r: \"/pages/\", h: hStub, k: []string{\"*\"}, v: []string{\"\"}},\n\t\t{r: \"/pages/yes\", h: hStub, k: []string{\"*\"}, v: []string{\"yes\"}},\n\n\t\t{r: \"/article\", h: hArticleList, k: []string{}, v: []string{}},\n\t\t{r: \"/article/\", h: hArticleList, k: []string{}, v: []string{}},\n\t\t{r: \"/article/near\", h: hArticleNear, k: []string{}, v: []string{}},\n\t\t{r: \"/article/neard\", h: hArticleShow, k: []string{\"id\"}, v: []string{\"neard\"}},\n\t\t{r: \"/article/123\", h: hArticleShow, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{r: \"/article/123/456\", h: hArticleShowOpts, k: []string{\"id\", \"opts\"}, v: []string{\"123\", \"456\"}},\n\t\t{r: \"/article/@peter\", h: hArticleByUser, k: []string{\"user\"}, v: []string{\"peter\"}},\n\t\t{r: \"/article/22//related\", h: hArticleShowRelated, k: []string{\"id\"}, v: []string{\"22\"}},\n\t\t{r: \"/article/111/edit\", h: hStub, k: []string{\"iffd\"}, v: []string{\"111\"}},\n\t\t{r: \"/article/slug/sept/-/4/2015\", h: hArticleSlug, k: []string{\"month\", \"day\", \"year\"}, v: []string{\"sept\", \"4\", \"2015\"}},\n\t\t{r: \"/article/:id\", h: hArticleShow, k: []string{\"id\"}, v: []string{\":id\"}},\n\n\t\t{r: \"/admin/user\", h: hUserList, k: []string{}, v: []string{}},\n\t\t{r: \"/admin/user/\", h: hUserList, k: []string{}, v: []string{}},\n\t\t{r: \"/admin/user/1\", h: hUserShow, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{r: \"/admin/user//1\", h: hUserShow, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{r: \"/admin/hi\", h: hAdminCatchall, k: []string{\"*\"}, v: []string{\"hi\"}},\n\t\t{r: \"/admin/lots/of/:fun\", h: hAdminCatchall, k: []string{\"*\"}, v: []string{\"lots/of/:fun\"}},\n\t\t{r: \"/admin/apps/333\", h: hAdminAppShow, k: []string{\"id\"}, v: []string{\"333\"}},\n\t\t{r: \"/admin/apps/333/woot\", h: hAdminAppShowCatchall, k: []string{\"id\", \"*\"}, v: []string{\"333\", \"woot\"}},\n\n\t\t{r: \"/hubs/123/view\", h: hHubView1, k: []string{\"hubID\"}, v: []string{\"123\"}},\n\t\t{r: \"/hubs/123/view/index.html\", h: hHubView2, k: []string{\"hubID\", \"*\"}, v: []string{\"123\", \"index.html\"}},\n\t\t{r: \"/hubs/123/users\", h: hHubView3, k: []string{\"hubID\"}, v: []string{\"123\"}},\n\n\t\t{r: \"/users/123/profile\", h: hUserProfile, k: []string{\"userID\"}, v: []string{\"123\"}},\n\t\t{r: \"/users/super/123/okay/yes\", h: hUserSuper, k: []string{\"*\"}, v: []string{\"123/okay/yes\"}},\n\t\t{r: \"/users/123/okay/yes\", h: hUserAll, k: []string{\"*\"}, v: []string{\"123/okay/yes\"}},\n\t}\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, mGET, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[mGET]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeMoar(t *testing.T) {\n\thStub := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub7 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub8 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub9 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub10 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub11 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub12 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub13 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub14 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub15 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub16 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\t// TODO: panic if we see {id}{x} because we're missing a delimiter, its not possible.\n\t// also {:id}* is not possible.\n\n\ttr := &node{}\n\n\ttr.InsertRoute(mGET, \"/articlefun\", hStub5)\n\ttr.InsertRoute(mGET, \"/articles/{id}\", hStub)\n\ttr.InsertRoute(mDELETE, \"/articles/{slug}\", hStub8)\n\ttr.InsertRoute(mGET, \"/articles/search\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id}:delete\", hStub8)\n\ttr.InsertRoute(mGET, \"/articles/{iidd}!sup\", hStub4)\n\ttr.InsertRoute(mGET, \"/articles/{id}:{op}\", hStub3)\n\ttr.InsertRoute(mGET, \"/articles/{id}:{op}\", hStub2)                              // this route sets a new handler for the above route\n\ttr.InsertRoute(mGET, \"/articles/{slug:^[a-z]+}/posts\", hStub)                    // up to tail '/' will only match if contents match the rex\n\ttr.InsertRoute(mGET, \"/articles/{id}/posts/{pid}\", hStub6)                       // /articles/123/posts/1\n\ttr.InsertRoute(mGET, \"/articles/{id}/posts/{month}/{day}/{year}/{slug}\", hStub7) // /articles/123/posts/09/04/1984/juice\n\ttr.InsertRoute(mGET, \"/articles/{id}.json\", hStub10)\n\ttr.InsertRoute(mGET, \"/articles/{id}/data.json\", hStub11)\n\ttr.InsertRoute(mGET, \"/articles/files/{file}.{ext}\", hStub12)\n\ttr.InsertRoute(mPUT, \"/articles/me\", hStub13)\n\n\t// TODO: make a separate test case for this one..\n\t// tr.InsertRoute(mGET, \"/articles/{id}/{id}\", hStub1)                              // panic expected, we're duplicating param keys\n\n\ttr.InsertRoute(mGET, \"/pages/*ff\", hStub) // TODO: panic, allow it..?\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub9)\n\n\ttr.InsertRoute(mGET, \"/users/{id}\", hStub14)\n\ttr.InsertRoute(mGET, \"/users/{id}/settings/{key}\", hStub15)\n\ttr.InsertRoute(mGET, \"/users/{id}/settings/*\", hStub16)\n\n\ttests := []struct {\n\t\tm methodTyp    // input request http method\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{m: mGET, r: \"/articles/search\", h: hStub1, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articlefun\", h: hStub5, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articles/123\", h: hStub, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{m: mDELETE, r: \"/articles/123mm\", h: hStub8, k: []string{\"slug\"}, v: []string{\"123mm\"}},\n\t\t{m: mGET, r: \"/articles/789:delete\", h: hStub8, k: []string{\"id\"}, v: []string{\"789\"}},\n\t\t{m: mGET, r: \"/articles/789!sup\", h: hStub4, k: []string{\"iidd\"}, v: []string{\"789\"}},\n\t\t{m: mGET, r: \"/articles/123:sync\", h: hStub2, k: []string{\"id\", \"op\"}, v: []string{\"123\", \"sync\"}},\n\t\t{m: mGET, r: \"/articles/456/posts/1\", h: hStub6, k: []string{\"id\", \"pid\"}, v: []string{\"456\", \"1\"}},\n\t\t{m: mGET, r: \"/articles/456/posts/09/04/1984/juice\", h: hStub7, k: []string{\"id\", \"month\", \"day\", \"year\", \"slug\"}, v: []string{\"456\", \"09\", \"04\", \"1984\", \"juice\"}},\n\t\t{m: mGET, r: \"/articles/456.json\", h: hStub10, k: []string{\"id\"}, v: []string{\"456\"}},\n\t\t{m: mGET, r: \"/articles/456/data.json\", h: hStub11, k: []string{\"id\"}, v: []string{\"456\"}},\n\n\t\t{m: mGET, r: \"/articles/files/file.zip\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"file\", \"zip\"}},\n\t\t{m: mGET, r: \"/articles/files/photos.tar.gz\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"photos\", \"tar.gz\"}},\n\t\t{m: mGET, r: \"/articles/files/photos.tar.gz\", h: hStub12, k: []string{\"file\", \"ext\"}, v: []string{\"photos\", \"tar.gz\"}},\n\n\t\t{m: mPUT, r: \"/articles/me\", h: hStub13, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/articles/me\", h: hStub, k: []string{\"id\"}, v: []string{\"me\"}},\n\t\t{m: mGET, r: \"/pages\", h: nil, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/pages/\", h: hStub9, k: []string{\"*\"}, v: []string{\"\"}},\n\t\t{m: mGET, r: \"/pages/yes\", h: hStub9, k: []string{\"*\"}, v: []string{\"yes\"}},\n\n\t\t{m: mGET, r: \"/users/1\", h: hStub14, k: []string{\"id\"}, v: []string{\"1\"}},\n\t\t{m: mGET, r: \"/users/\", h: nil, k: []string{}, v: []string{}},\n\t\t{m: mGET, r: \"/users/2/settings/password\", h: hStub15, k: []string{\"id\", \"key\"}, v: []string{\"2\", \"password\"}},\n\t\t{m: mGET, r: \"/users/2/settings/\", h: hStub16, k: []string{\"id\", \"*\"}, v: []string{\"2\", \"\"}},\n\t}\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, tt.m, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[tt.m]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeRegexp(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub4 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub5 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub6 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub7 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/articles/{rid:^[0-9]{5,6}}\", hStub7)\n\ttr.InsertRoute(mGET, \"/articles/{zid:^0[0-9]+}\", hStub3)\n\ttr.InsertRoute(mGET, \"/articles/{name:^@[a-z]+}/posts\", hStub4)\n\ttr.InsertRoute(mGET, \"/articles/{op:^[0-9]+}/run\", hStub5)\n\ttr.InsertRoute(mGET, \"/articles/{id:^[0-9]+}\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id:^[1-9]+}-{aux}\", hStub6)\n\ttr.InsertRoute(mGET, \"/articles/{slug}\", hStub2)\n\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\t// debugPrintTree(0, 0, tr, 0)\n\t// log.Println(\"~~~~~~~~~\")\n\t// log.Println(\"~~~~~~~~~\")\n\n\ttests := []struct {\n\t\tr string       // input request path\n\t\th http.Handler // output matched handler\n\t\tk []string     // output param keys\n\t\tv []string     // output param values\n\t}{\n\t\t{r: \"/articles\", h: nil, k: []string{}, v: []string{}},\n\t\t{r: \"/articles/12345\", h: hStub7, k: []string{\"rid\"}, v: []string{\"12345\"}},\n\t\t{r: \"/articles/123\", h: hStub1, k: []string{\"id\"}, v: []string{\"123\"}},\n\t\t{r: \"/articles/how-to-build-a-router\", h: hStub2, k: []string{\"slug\"}, v: []string{\"how-to-build-a-router\"}},\n\t\t{r: \"/articles/0456\", h: hStub3, k: []string{\"zid\"}, v: []string{\"0456\"}},\n\t\t{r: \"/articles/@pk/posts\", h: hStub4, k: []string{\"name\"}, v: []string{\"@pk\"}},\n\t\t{r: \"/articles/1/run\", h: hStub5, k: []string{\"op\"}, v: []string{\"1\"}},\n\t\t{r: \"/articles/1122\", h: hStub1, k: []string{\"id\"}, v: []string{\"1122\"}},\n\t\t{r: \"/articles/1122-yes\", h: hStub6, k: []string{\"id\", \"aux\"}, v: []string{\"1122\", \"yes\"}},\n\t}\n\n\tfor i, tt := range tests {\n\t\trctx := NewRouteContext()\n\n\t\t_, handlers, _ := tr.FindRoute(rctx, mGET, tt.r)\n\n\t\tvar handler http.Handler\n\t\tif methodHandler, ok := handlers[mGET]; ok {\n\t\t\thandler = methodHandler.handler\n\t\t}\n\n\t\tparamKeys := rctx.routeParams.Keys\n\t\tparamValues := rctx.routeParams.Values\n\n\t\tif fmt.Sprintf(\"%v\", tt.h) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting handler:%v , got:%v\", i, tt.r, tt.h, handler)\n\t\t}\n\t\tif !stringSliceEqual(tt.k, paramKeys) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramKeys:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.k), tt.k, len(paramKeys), paramKeys)\n\t\t}\n\t\tif !stringSliceEqual(tt.v, paramValues) {\n\t\t\tt.Errorf(\"input [%d]: find '%s' expecting paramValues:(%d)%v , got:(%d)%v\", i, tt.r, len(tt.v), tt.v, len(paramValues), paramValues)\n\t\t}\n\t}\n}\n\nfunc TestTreeRegexMatchWholeParam(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\trctx := NewRouteContext()\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/{id:[0-9]+}\", hStub1)\n\n\ttests := []struct {\n\t\turl             string\n\t\texpectedHandler http.Handler\n\t}{\n\t\t{url: \"/13\", expectedHandler: hStub1},\n\t\t{url: \"/a13\", expectedHandler: nil},\n\t\t{url: \"/13.jpg\", expectedHandler: nil},\n\t\t{url: \"/a13.jpg\", expectedHandler: nil},\n\t}\n\n\tfor _, tc := range tests {\n\t\t_, _, handler := tr.FindRoute(rctx, mGET, tc.url)\n\t\tif fmt.Sprintf(\"%v\", tc.expectedHandler) != fmt.Sprintf(\"%v\", handler) {\n\t\t\tt.Errorf(\"expecting handler:%v , got:%v\", tc.expectedHandler, handler)\n\t\t}\n\t}\n}\n\nfunc TestTreeFindPattern(t *testing.T) {\n\thStub1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\thStub3 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/pages/*\", hStub1)\n\ttr.InsertRoute(mGET, \"/articles/{id}/*\", hStub2)\n\ttr.InsertRoute(mGET, \"/articles/{slug}/{uid}/*\", hStub3)\n\n\tif tr.findPattern(\"/pages\") != false {\n\t\tt.Errorf(\"find /pages failed\")\n\t}\n\tif tr.findPattern(\"/pages*\") != false {\n\t\tt.Errorf(\"find /pages* failed - should be nil\")\n\t}\n\tif tr.findPattern(\"/pages/*\") == false {\n\t\tt.Errorf(\"find /pages/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{id}/*\") == false {\n\t\tt.Errorf(\"find /articles/{id}/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{something}/*\") == false {\n\t\tt.Errorf(\"find /articles/{something}/* failed\")\n\t}\n\tif tr.findPattern(\"/articles/{slug}/{uid}/*\") == false {\n\t\tt.Errorf(\"find /articles/{slug}/{uid}/* failed\")\n\t}\n}\n\nfunc debugPrintTree(parent int, i int, n *node, label byte) bool {\n\tnumEdges := 0\n\tfor _, nds := range n.children {\n\t\tnumEdges += len(nds)\n\t}\n\n\t// if n.handlers != nil {\n\t// \tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v handler:%v pat:%s keys:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.handlers, n.pattern, n.paramKeys)\n\t// } else {\n\t// \tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v pat:%s keys:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.pattern, n.paramKeys)\n\t// }\n\tif n.endpoints != nil {\n\t\tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v handler:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf(), n.endpoints)\n\t} else {\n\t\tlog.Printf(\"[node %d parent:%d] typ:%d prefix:%s label:%s tail:%s numEdges:%d isLeaf:%v\\n\", i, parent, n.typ, n.prefix, string(label), string(n.tail), numEdges, n.isLeaf())\n\t}\n\tparent = i\n\tfor _, nds := range n.children {\n\t\tfor _, e := range nds {\n\t\t\ti++\n\t\t\tif debugPrintTree(parent, i, e, e.label) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc stringSliceEqual(a, b []string) bool {\n\tif len(a) != len(b) {\n\t\treturn false\n\t}\n\tfor i := range a {\n\t\tif b[i] != a[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc BenchmarkTreeGet(b *testing.B) {\n\th1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\th2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})\n\n\ttr := &node{}\n\ttr.InsertRoute(mGET, \"/\", h1)\n\ttr.InsertRoute(mGET, \"/ping\", h2)\n\ttr.InsertRoute(mGET, \"/pingall\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}/woop\", h2)\n\ttr.InsertRoute(mGET, \"/ping/{id}/{opt}\", h2)\n\ttr.InsertRoute(mGET, \"/pinggggg\", h2)\n\ttr.InsertRoute(mGET, \"/hello\", h1)\n\n\tmctx := NewRouteContext()\n\n\tb.ReportAllocs()\n\tb.ResetTimer()\n\n\tfor i := 0; i < b.N; i++ {\n\t\tmctx.Reset()\n\t\ttr.FindRoute(mctx, mGET, \"/ping/123/456\")\n\t}\n}\n\nfunc TestWalker(t *testing.T) {\n\tr := bigMux()\n\n\t// Walk the muxBig router tree.\n\tif err := Walk(r, func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {\n\t\tt.Logf(\"%v %v\", method, route)\n\n\t\treturn nil\n\t}); err != nil {\n\t\tt.Error(err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/cors/README.md",
    "content": "# CORS net/http middleware\n\n(fork of github.com/rs/cors)\n\n## Usage\n\n```go\nfunc main() {\n  r := chi.NewRouter()\n\n  // Basic CORS\n  // for more ideas, see: https://developer.github.com/v3/#cross-origin-resource-sharing\n  cors := cors.New(cors.Options{\n    // AllowedOrigins: []string{\"https://foo.com\"}, // Use this to allow specific origin hosts\n    AllowedOrigins:   []string{\"*\"},\n    // AllowOriginFunc:  func(r *http.Request, origin string) bool { return true },\n    AllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"},\n    AllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n    ExposedHeaders:   []string{\"Link\"},\n    AllowCredentials: true,\n    MaxAge:           300, // Maximum value not ignored by any of major browsers\n  })\n  r.Use(cors.Handler)\n  \n  r.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n    w.Write([]byte(\"welcome\"))\n  })\n  \n  http.ListenAndServe(\":3000\", r)\n}\n```\n\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/cors/_example/main.go",
    "content": "// cors example\n//\n// ie.\n//\n// Unsuccessful Preflight request:\n// ===============================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://no.com\" -H \"Access-Control-Request-Method: GET\" -X OPTIONS\n// HTTP/1.1 200 OK\n// Vary: Origin\n// Vary: Access-Control-Request-Method\n// Vary: Access-Control-Request-Headers\n// Date: Fri, 28 Jul 2017 17:55:47 GMT\n// Content-Length: 0\n// Content-Type: text/plain; charset=utf-8\n//\n//\n// Successful Preflight request:\n// =============================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://example.com\" -H \"Access-Control-Request-Method: GET\" -X OPTIONS\n// HTTP/1.1 200 OK\n// Access-Control-Allow-Credentials: true\n// Access-Control-Allow-Methods: GET\n// Access-Control-Allow-Origin: http://example.com\n// Access-Control-Max-Age: 300\n// Vary: Origin\n// Vary: Access-Control-Request-Method\n// Vary: Access-Control-Request-Headers\n// Date: Fri, 28 Jul 2017 17:56:44 GMT\n// Content-Length: 0\n// Content-Type: text/plain; charset=utf-8\n//\n//\n// Content request (after a successful preflight):\n// ===============================================\n// $ curl -i http://localhost:3000/ -H \"Origin: http://example.com\"\n// HTTP/1.1 200 OK\n// Access-Control-Allow-Credentials: true\n// Access-Control-Allow-Origin: http://example.com\n// Access-Control-Expose-Headers: Link\n// Vary: Origin\n// Date: Fri, 28 Jul 2017 17:57:52 GMT\n// Content-Length: 7\n// Content-Type: text/plain; charset=utf-8\n//\n// welcome%\n//\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/go-chi/chi\"\n\t\"github.com/go-chi/cors\"\n)\n\nfunc main() {\n\tr := chi.NewRouter()\n\n\t// Basic CORS\n\t// for more ideas, see: https://developer.github.com/v3/#cross-origin-resource-sharing\n\tcors := cors.New(cors.Options{\n\t\tAllowOriginFunc:  AllowOriginFunc,\n\t\tAllowedMethods:   []string{\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"},\n\t\tAllowedHeaders:   []string{\"Accept\", \"Authorization\", \"Content-Type\", \"X-CSRF-Token\"},\n\t\tExposedHeaders:   []string{\"Link\"},\n\t\tAllowCredentials: true,\n\t\tMaxAge:           300, // Maximum value not ignored by any of major browsers\n\t})\n\tr.Use(cors.Handler)\n\n\tr.Get(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"welcome\"))\n\t})\n\n\thttp.ListenAndServe(\":3000\", r)\n}\n\nfunc AllowOriginFunc(r *http.Request, origin string) bool {\n\tif origin == \"http://example.com\" {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/cors/cors.go",
    "content": "// cors package is net/http handler to handle CORS related requests\n// as defined by http://www.w3.org/TR/cors/\n//\n// You can configure it by passing an option struct to cors.New:\n//\n//     c := cors.New(cors.Options{\n//         AllowedOrigins: []string{\"foo.com\"},\n//         AllowedMethods: []string{\"GET\", \"POST\", \"DELETE\"},\n//         AllowCredentials: true,\n//     })\n//\n// Then insert the handler in the chain:\n//\n//     handler = c.Handler(handler)\n//\n// See Options documentation for more options.\n//\n// The resulting handler is a standard net/http handler.\npackage cors\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Options is a configuration container to setup the CORS middleware.\ntype Options struct {\n\t// AllowedOrigins is a list of origins a cross-domain request can be executed from.\n\t// If the special \"*\" value is present in the list, all origins will be allowed.\n\t// An origin may contain a wildcard (*) to replace 0 or more characters\n\t// (i.e.: http://*.domain.com). Usage of wildcards implies a small performance penality.\n\t// Only one wildcard can be used per origin.\n\t// Default value is [\"*\"]\n\tAllowedOrigins []string\n\n\t// AllowOriginFunc is a custom function to validate the origin. It take the origin\n\t// as argument and returns true if allowed or false otherwise. If this option is\n\t// set, the content of AllowedOrigins is ignored.\n\tAllowOriginFunc func(r *http.Request, origin string) bool\n\n\t// AllowedMethods is a list of methods the client is allowed to use with\n\t// cross-domain requests. Default value is simple methods (GET and POST)\n\tAllowedMethods []string\n\n\t// AllowedHeaders is list of non simple headers the client is allowed to use with\n\t// cross-domain requests.\n\t// If the special \"*\" value is present in the list, all headers will be allowed.\n\t// Default value is [] but \"Origin\" is always appended to the list.\n\tAllowedHeaders []string\n\n\t// ExposedHeaders indicates which headers are safe to expose to the API of a CORS\n\t// API specification\n\tExposedHeaders []string\n\n\t// AllowCredentials indicates whether the request can include user credentials like\n\t// cookies, HTTP authentication or client side SSL certificates.\n\tAllowCredentials bool\n\n\t// MaxAge indicates how long (in seconds) the results of a preflight request\n\t// can be cached\n\tMaxAge int\n\n\t// OptionsPassthrough instructs preflight to let other potential next handlers to\n\t// process the OPTIONS method. Turn this on if your application handles OPTIONS.\n\tOptionsPassthrough bool\n\n\t// Debugging flag adds additional output to debug server side CORS issues\n\tDebug bool\n}\n\n// Cors http handler\ntype Cors struct {\n\t// Debug logger\n\tlog *log.Logger\n\n\t// Set to true when allowed origins contains a \"*\"\n\tallowedOriginsAll bool\n\n\t// Normalized list of plain allowed origins\n\tallowedOrigins []string\n\n\t// List of allowed origins containing wildcards\n\tallowedWOrigins []wildcard\n\n\t// Optional origin validator function\n\tallowOriginFunc func(r *http.Request, origin string) bool\n\n\t// Set to true when allowed headers contains a \"*\"\n\tallowedHeadersAll bool\n\n\t// Normalized list of allowed headers\n\tallowedHeaders []string\n\n\t// Normalized list of allowed methods\n\tallowedMethods []string\n\n\t// Normalized list of exposed headers\n\texposedHeaders    []string\n\tallowCredentials  bool\n\tmaxAge            int\n\toptionPassthrough bool\n}\n\n// New creates a new Cors handler with the provided options.\nfunc New(options Options) *Cors {\n\tc := &Cors{\n\t\texposedHeaders:    convert(options.ExposedHeaders, http.CanonicalHeaderKey),\n\t\tallowOriginFunc:   options.AllowOriginFunc,\n\t\tallowCredentials:  options.AllowCredentials,\n\t\tmaxAge:            options.MaxAge,\n\t\toptionPassthrough: options.OptionsPassthrough,\n\t}\n\tif options.Debug {\n\t\tc.log = log.New(os.Stdout, \"[cors] \", log.LstdFlags)\n\t}\n\n\t// Normalize options\n\t// Note: for origins and methods matching, the spec requires a case-sensitive matching.\n\t// As it may error prone, we chose to ignore the spec here.\n\n\t// Allowed Origins\n\tif len(options.AllowedOrigins) == 0 {\n\t\t// Default is all origins\n\t\tc.allowedOriginsAll = true\n\t} else {\n\t\tc.allowedOrigins = []string{}\n\t\tc.allowedWOrigins = []wildcard{}\n\t\tfor _, origin := range options.AllowedOrigins {\n\t\t\t// Normalize\n\t\t\torigin = strings.ToLower(origin)\n\t\t\tif origin == \"*\" {\n\t\t\t\t// If \"*\" is present in the list, turn the whole list into a match all\n\t\t\t\tc.allowedOriginsAll = true\n\t\t\t\tc.allowedOrigins = nil\n\t\t\t\tc.allowedWOrigins = nil\n\t\t\t\tbreak\n\t\t\t} else if i := strings.IndexByte(origin, '*'); i >= 0 {\n\t\t\t\t// Split the origin in two: start and end string without the *\n\t\t\t\tw := wildcard{origin[0:i], origin[i+1 : len(origin)]}\n\t\t\t\tc.allowedWOrigins = append(c.allowedWOrigins, w)\n\t\t\t} else {\n\t\t\t\tc.allowedOrigins = append(c.allowedOrigins, origin)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allowed Headers\n\tif len(options.AllowedHeaders) == 0 {\n\t\t// Use sensible defaults\n\t\tc.allowedHeaders = []string{\"Origin\", \"Accept\", \"Content-Type\"}\n\t} else {\n\t\t// Origin is always appended as some browsers will always request for this header at preflight\n\t\tc.allowedHeaders = convert(append(options.AllowedHeaders, \"Origin\"), http.CanonicalHeaderKey)\n\t\tfor _, h := range options.AllowedHeaders {\n\t\t\tif h == \"*\" {\n\t\t\t\tc.allowedHeadersAll = true\n\t\t\t\tc.allowedHeaders = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Allowed Methods\n\tif len(options.AllowedMethods) == 0 {\n\t\t// Default is spec's \"simple\" methods\n\t\tc.allowedMethods = []string{\"GET\", \"POST\"}\n\t} else {\n\t\tc.allowedMethods = convert(options.AllowedMethods, strings.ToUpper)\n\t}\n\n\treturn c\n}\n\n// Default creates a new Cors handler with default options\nfunc Default() *Cors {\n\treturn New(Options{})\n}\n\n// Handler apply the CORS specification on the request, and add relevant CORS headers\n// as necessary.\nfunc (c *Cors) Handler(next http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif r.Method == \"OPTIONS\" {\n\t\t\tc.logf(\"Handler: Preflight request\")\n\t\t\tc.handlePreflight(w, r)\n\t\t\t// Preflight requests are standalone and should stop the chain as some other\n\t\t\t// middleware may not handle OPTIONS requests correctly. One typical example\n\t\t\t// is authentication middleware ; OPTIONS requests won't carry authentication\n\t\t\t// headers (see #1)\n\t\t\tif c.optionPassthrough {\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t}\n\t\t} else {\n\t\t\tc.logf(\"Handler: Actual request\")\n\t\t\tc.handleActualRequest(w, r)\n\t\t\tnext.ServeHTTP(w, r)\n\t\t}\n\t})\n}\n\n// handlePreflight handles pre-flight CORS requests\nfunc (c *Cors) handlePreflight(w http.ResponseWriter, r *http.Request) {\n\theaders := w.Header()\n\torigin := r.Header.Get(\"Origin\")\n\n\tif r.Method != \"OPTIONS\" {\n\t\tc.logf(\"Preflight aborted: %s!=OPTIONS\", r.Method)\n\t\treturn\n\t}\n\t// Always set Vary headers\n\t// see https://github.com/rs/cors/issues/10,\n\t//     https://github.com/rs/cors/commit/dbdca4d95feaa7511a46e6f1efb3b3aa505bc43f#commitcomment-12352001\n\theaders.Add(\"Vary\", \"Origin\")\n\theaders.Add(\"Vary\", \"Access-Control-Request-Method\")\n\theaders.Add(\"Vary\", \"Access-Control-Request-Headers\")\n\n\tif origin == \"\" {\n\t\tc.logf(\"Preflight aborted: empty origin\")\n\t\treturn\n\t}\n\tif !c.isOriginAllowed(r, origin) {\n\t\tc.logf(\"Preflight aborted: origin '%s' not allowed\", origin)\n\t\treturn\n\t}\n\n\treqMethod := r.Header.Get(\"Access-Control-Request-Method\")\n\tif !c.isMethodAllowed(reqMethod) {\n\t\tc.logf(\"Preflight aborted: method '%s' not allowed\", reqMethod)\n\t\treturn\n\t}\n\treqHeaders := parseHeaderList(r.Header.Get(\"Access-Control-Request-Headers\"))\n\tif !c.areHeadersAllowed(reqHeaders) {\n\t\tc.logf(\"Preflight aborted: headers '%v' not allowed\", reqHeaders)\n\t\treturn\n\t}\n\theaders.Set(\"Access-Control-Allow-Origin\", origin)\n\t// Spec says: Since the list of methods can be unbounded, simply returning the method indicated\n\t// by Access-Control-Request-Method (if supported) can be enough\n\theaders.Set(\"Access-Control-Allow-Methods\", strings.ToUpper(reqMethod))\n\tif len(reqHeaders) > 0 {\n\n\t\t// Spec says: Since the list of headers can be unbounded, simply returning supported headers\n\t\t// from Access-Control-Request-Headers can be enough\n\t\theaders.Set(\"Access-Control-Allow-Headers\", strings.Join(reqHeaders, \", \"))\n\t}\n\tif c.allowCredentials {\n\t\theaders.Set(\"Access-Control-Allow-Credentials\", \"true\")\n\t}\n\tif c.maxAge > 0 {\n\t\theaders.Set(\"Access-Control-Max-Age\", strconv.Itoa(c.maxAge))\n\t}\n\tc.logf(\"Preflight response headers: %v\", headers)\n}\n\n// handleActualRequest handles simple cross-origin requests, actual request or redirects\nfunc (c *Cors) handleActualRequest(w http.ResponseWriter, r *http.Request) {\n\theaders := w.Header()\n\torigin := r.Header.Get(\"Origin\")\n\n\tif r.Method == \"OPTIONS\" {\n\t\tc.logf(\"Actual request no headers added: method == %s\", r.Method)\n\t\treturn\n\t}\n\t// Always set Vary, see https://github.com/rs/cors/issues/10\n\theaders.Add(\"Vary\", \"Origin\")\n\tif origin == \"\" {\n\t\tc.logf(\"Actual request no headers added: missing origin\")\n\t\treturn\n\t}\n\tif !c.isOriginAllowed(r, origin) {\n\t\tc.logf(\"Actual request no headers added: origin '%s' not allowed\", origin)\n\t\treturn\n\t}\n\n\t// Note that spec does define a way to specifically disallow a simple method like GET or\n\t// POST. Access-Control-Allow-Methods is only used for pre-flight requests and the\n\t// spec doesn't instruct to check the allowed methods for simple cross-origin requests.\n\t// We think it's a nice feature to be able to have control on those methods though.\n\tif !c.isMethodAllowed(r.Method) {\n\t\tif c.log != nil {\n\t\t\tc.logf(\"Actual request no headers added: method '%s' not allowed\",\n\t\t\t\tr.Method)\n\t\t}\n\n\t\treturn\n\t}\n\theaders.Set(\"Access-Control-Allow-Origin\", origin)\n\tif len(c.exposedHeaders) > 0 {\n\t\theaders.Set(\"Access-Control-Expose-Headers\", strings.Join(c.exposedHeaders, \", \"))\n\t}\n\tif c.allowCredentials {\n\t\theaders.Set(\"Access-Control-Allow-Credentials\", \"true\")\n\t}\n\tc.logf(\"Actual response added headers: %v\", headers)\n}\n\n// convenience method. checks if debugging is turned on before printing\nfunc (c *Cors) logf(format string, a ...interface{}) {\n\tif c.log != nil {\n\t\tc.log.Printf(format, a...)\n\t}\n}\n\n// isOriginAllowed checks if a given origin is allowed to perform cross-domain requests\n// on the endpoint\nfunc (c *Cors) isOriginAllowed(r *http.Request, origin string) bool {\n\tif c.allowOriginFunc != nil {\n\t\treturn c.allowOriginFunc(r, origin)\n\t}\n\tif c.allowedOriginsAll {\n\t\treturn true\n\t}\n\torigin = strings.ToLower(origin)\n\tfor _, o := range c.allowedOrigins {\n\t\tif o == origin {\n\t\t\treturn true\n\t\t}\n\t}\n\tfor _, w := range c.allowedWOrigins {\n\t\tif w.match(origin) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// isMethodAllowed checks if a given method can be used as part of a cross-domain request\n// on the endpoing\nfunc (c *Cors) isMethodAllowed(method string) bool {\n\tif len(c.allowedMethods) == 0 {\n\t\t// If no method allowed, always return false, even for preflight request\n\t\treturn false\n\t}\n\tmethod = strings.ToUpper(method)\n\tif method == \"OPTIONS\" {\n\t\t// Always allow preflight requests\n\t\treturn true\n\t}\n\tfor _, m := range c.allowedMethods {\n\t\tif m == method {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// areHeadersAllowed checks if a given list of headers are allowed to used within\n// a cross-domain request.\nfunc (c *Cors) areHeadersAllowed(requestedHeaders []string) bool {\n\tif c.allowedHeadersAll || len(requestedHeaders) == 0 {\n\t\treturn true\n\t}\n\tfor _, header := range requestedHeaders {\n\t\theader = http.CanonicalHeaderKey(header)\n\t\tfound := false\n\t\tfor _, h := range c.allowedHeaders {\n\t\t\tif h == header {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/go-chi/cors/utils.go",
    "content": "package cors\n\nimport \"strings\"\n\nconst toLower = 'a' - 'A'\n\ntype converter func(string) string\n\ntype wildcard struct {\n\tprefix string\n\tsuffix string\n}\n\nfunc (w wildcard) match(s string) bool {\n\treturn len(s) >= len(w.prefix+w.suffix) && strings.HasPrefix(s, w.prefix) && strings.HasSuffix(s, w.suffix)\n}\n\n// convert converts a list of string using the passed converter function\nfunc convert(s []string, c converter) []string {\n\tout := []string{}\n\tfor _, i := range s {\n\t\tout = append(out, c(i))\n\t}\n\treturn out\n}\n\n// parseHeaderList tokenize + normalize a string containing a list of headers\nfunc parseHeaderList(headerList string) []string {\n\tl := len(headerList)\n\th := make([]byte, 0, l)\n\tupper := true\n\t// Estimate the number headers in order to allocate the right splice size\n\tt := 0\n\tfor i := 0; i < l; i++ {\n\t\tif headerList[i] == ',' {\n\t\t\tt++\n\t\t}\n\t}\n\theaders := make([]string, 0, t)\n\tfor i := 0; i < l; i++ {\n\t\tb := headerList[i]\n\t\tif b >= 'a' && b <= 'z' {\n\t\t\tif upper {\n\t\t\t\th = append(h, b-toLower)\n\t\t\t} else {\n\t\t\t\th = append(h, b)\n\t\t\t}\n\t\t} else if b >= 'A' && b <= 'Z' {\n\t\t\tif !upper {\n\t\t\t\th = append(h, b+toLower)\n\t\t\t} else {\n\t\t\t\th = append(h, b)\n\t\t\t}\n\t\t} else if b == '-' || (b >= '0' && b <= '9') {\n\t\t\th = append(h, b)\n\t\t}\n\n\t\tif b == ' ' || b == ',' || i == l-1 {\n\t\t\tif len(h) > 0 {\n\t\t\t\t// Flush the found header\n\t\t\t\theaders = append(headers, string(h))\n\t\t\t\th = h[:0]\n\t\t\t\tupper = true\n\t\t\t}\n\t\t} else {\n\t\t\tupper = b == '-'\n\t\t}\n\t}\n\treturn headers\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/.travis.yml",
    "content": "language: go\ngo_import_path: github.com/pkg/errors\ngo:\n  - 1.4.3\n  - 1.5.4\n  - 1.6.2\n  - 1.7.1\n  - tip\n\nscript:\n  - go test -v ./...\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\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\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": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/README.md",
    "content": "# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors)\n\nPackage errors provides simple error handling primitives.\n\n`go get github.com/pkg/errors`\n\nThe traditional error handling idiom in Go is roughly akin to\n```go\nif err != nil {\n        return err\n}\n```\nwhich applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.\n\n## Adding context to an error\n\nThe errors.Wrap function returns a new error that adds context to the original error. For example\n```go\n_, err := ioutil.ReadAll(r)\nif err != nil {\n        return errors.Wrap(err, \"read failed\")\n}\n```\n## Retrieving the cause of an error\n\nUsing `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.\n```go\ntype causer interface {\n        Cause() error\n}\n```\n`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:\n```go\nswitch err := errors.Cause(err).(type) {\ncase *MyError:\n        // handle specifically\ndefault:\n        // unknown error\n}\n```\n\n[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).\n\n## Contributing\n\nWe welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.\n\nBefore proposing a change, please discuss your change by raising an issue.\n\n## Licence\n\nBSD-2-Clause\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/appveyor.yml",
    "content": "version: build-{build}.{branch}\n\nclone_folder: C:\\gopath\\src\\github.com\\pkg\\errors\nshallow_clone: true # for startup speed\n\nenvironment:\n  GOPATH: C:\\gopath\n\nplatform:\n  - x64\n\n# http://www.appveyor.com/docs/installed-software\ninstall:\n  # some helpful output for debugging builds\n  - go version\n  - go env\n  # pre-installed MinGW at C:\\MinGW is 32bit only\n  # but MSYS2 at C:\\msys64 has mingw64\n  - set PATH=C:\\msys64\\mingw64\\bin;%PATH%\n  - gcc --version\n  - g++ --version\n\nbuild_script:\n  - go install -v ./...\n\ntest_script:\n  - set PATH=C:\\gopath\\bin;%PATH%\n  - go test -v ./...\n\n#artifacts:\n#  - path: '%GOPATH%\\bin\\*.exe'\ndeploy: off\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/bench_test.go",
    "content": "// +build go1.7\n\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\tstderrors \"errors\"\n)\n\nfunc noErrors(at, depth int) error {\n\tif at >= depth {\n\t\treturn stderrors.New(\"no error\")\n\t}\n\treturn noErrors(at+1, depth)\n}\nfunc yesErrors(at, depth int) error {\n\tif at >= depth {\n\t\treturn New(\"ye error\")\n\t}\n\treturn yesErrors(at+1, depth)\n}\n\nfunc BenchmarkErrors(b *testing.B) {\n\tvar toperr error\n\ttype run struct {\n\t\tstack int\n\t\tstd   bool\n\t}\n\truns := []run{\n\t\t{10, false},\n\t\t{10, true},\n\t\t{100, false},\n\t\t{100, true},\n\t\t{1000, false},\n\t\t{1000, true},\n\t}\n\tfor _, r := range runs {\n\t\tpart := \"pkg/errors\"\n\t\tif r.std {\n\t\t\tpart = \"errors\"\n\t\t}\n\t\tname := fmt.Sprintf(\"%s-stack-%d\", part, r.stack)\n\t\tb.Run(name, func(b *testing.B) {\n\t\t\tvar err error\n\t\t\tf := yesErrors\n\t\t\tif r.std {\n\t\t\t\tf = noErrors\n\t\t\t}\n\t\t\tb.ReportAllocs()\n\t\t\tfor i := 0; i < b.N; i++ {\n\t\t\t\terr = f(0, r.stack)\n\t\t\t}\n\t\t\tb.StopTimer()\n\t\t\ttoperr = err\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Wrap function returns a new error that adds context to the\n// original error by recording a stack trace at the point Wrap is called,\n// and the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Wrap(err, \"read failed\")\n//     }\n//\n// If additional control is required the errors.WithStack and errors.WithMessage\n// functions destructure errors.Wrap into its component operations of annotating\n// an error with a stack trace and an a message, respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Wrap constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Wrap to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error which does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// causer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are\n// invoked. This information can be retrieved with the following interface.\n//\n//     type stackTracer interface {\n//             StackTrace() errors.StackTrace\n//     }\n//\n// Where errors.StackTrace is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if err, ok := err.(stackTracer); ok {\n//             for _, f := range err.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\", f)\n//             }\n//     }\n//\n// stackTracer interface is not exported by this package, but is considered a part\n// of stable public API.\n//\n// See the documentation for Frame.Format for more details.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is call, and the format specifier.\n// If err is nil, Wrapf returns nil.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n}\n\ntype withMessage struct {\n\tcause error\n\tmsg   string\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's', 'q':\n\t\tio.WriteString(s, w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\n\tfor err != nil {\n\t\tcause, ok := err.(causer)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\terr = cause.Cause()\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/errors_test.go",
    "content": "package errors\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestNew(t *testing.T) {\n\ttests := []struct {\n\t\terr  string\n\t\twant error\n\t}{\n\t\t{\"\", fmt.Errorf(\"\")},\n\t\t{\"foo\", fmt.Errorf(\"foo\")},\n\t\t{\"foo\", New(\"foo\")},\n\t\t{\"string with format specifiers: %v\", errors.New(\"string with format specifiers: %v\")},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := New(tt.err)\n\t\tif got.Error() != tt.want.Error() {\n\t\t\tt.Errorf(\"New.Error(): got: %q, want %q\", got, tt.want)\n\t\t}\n\t}\n}\n\nfunc TestWrapNil(t *testing.T) {\n\tgot := Wrap(nil, \"no error\")\n\tif got != nil {\n\t\tt.Errorf(\"Wrap(nil, \\\"no error\\\"): got %#v, expected nil\", got)\n\t}\n}\n\nfunc TestWrap(t *testing.T) {\n\ttests := []struct {\n\t\terr     error\n\t\tmessage string\n\t\twant    string\n\t}{\n\t\t{io.EOF, \"read error\", \"read error: EOF\"},\n\t\t{Wrap(io.EOF, \"read error\"), \"client error\", \"client error: read error: EOF\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := Wrap(tt.err, tt.message).Error()\n\t\tif got != tt.want {\n\t\t\tt.Errorf(\"Wrap(%v, %q): got: %v, want %v\", tt.err, tt.message, got, tt.want)\n\t\t}\n\t}\n}\n\ntype nilError struct{}\n\nfunc (nilError) Error() string { return \"nil error\" }\n\nfunc TestCause(t *testing.T) {\n\tx := New(\"error\")\n\ttests := []struct {\n\t\terr  error\n\t\twant error\n\t}{{\n\t\t// nil error is nil\n\t\terr:  nil,\n\t\twant: nil,\n\t}, {\n\t\t// explicit nil error is nil\n\t\terr:  (error)(nil),\n\t\twant: nil,\n\t}, {\n\t\t// typed nil is nil\n\t\terr:  (*nilError)(nil),\n\t\twant: (*nilError)(nil),\n\t}, {\n\t\t// uncaused error is unaffected\n\t\terr:  io.EOF,\n\t\twant: io.EOF,\n\t}, {\n\t\t// caused error returns cause\n\t\terr:  Wrap(io.EOF, \"ignored\"),\n\t\twant: io.EOF,\n\t}, {\n\t\terr:  x, // return from errors.New\n\t\twant: x,\n\t}, {\n\t\tWithMessage(nil, \"whoops\"),\n\t\tnil,\n\t}, {\n\t\tWithMessage(io.EOF, \"whoops\"),\n\t\tio.EOF,\n\t}, {\n\t\tWithStack(nil),\n\t\tnil,\n\t}, {\n\t\tWithStack(io.EOF),\n\t\tio.EOF,\n\t}}\n\n\tfor i, tt := range tests {\n\t\tgot := Cause(tt.err)\n\t\tif !reflect.DeepEqual(got, tt.want) {\n\t\t\tt.Errorf(\"test %d: got %#v, want %#v\", i+1, got, tt.want)\n\t\t}\n\t}\n}\n\nfunc TestWrapfNil(t *testing.T) {\n\tgot := Wrapf(nil, \"no error\")\n\tif got != nil {\n\t\tt.Errorf(\"Wrapf(nil, \\\"no error\\\"): got %#v, expected nil\", got)\n\t}\n}\n\nfunc TestWrapf(t *testing.T) {\n\ttests := []struct {\n\t\terr     error\n\t\tmessage string\n\t\twant    string\n\t}{\n\t\t{io.EOF, \"read error\", \"read error: EOF\"},\n\t\t{Wrapf(io.EOF, \"read error without format specifiers\"), \"client error\", \"client error: read error without format specifiers: EOF\"},\n\t\t{Wrapf(io.EOF, \"read error with %d format specifier\", 1), \"client error\", \"client error: read error with 1 format specifier: EOF\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := Wrapf(tt.err, tt.message).Error()\n\t\tif got != tt.want {\n\t\t\tt.Errorf(\"Wrapf(%v, %q): got: %v, want %v\", tt.err, tt.message, got, tt.want)\n\t\t}\n\t}\n}\n\nfunc TestErrorf(t *testing.T) {\n\ttests := []struct {\n\t\terr  error\n\t\twant string\n\t}{\n\t\t{Errorf(\"read error without format specifiers\"), \"read error without format specifiers\"},\n\t\t{Errorf(\"read error with %d format specifier\", 1), \"read error with 1 format specifier\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := tt.err.Error()\n\t\tif got != tt.want {\n\t\t\tt.Errorf(\"Errorf(%v): got: %q, want %q\", tt.err, got, tt.want)\n\t\t}\n\t}\n}\n\nfunc TestWithStackNil(t *testing.T) {\n\tgot := WithStack(nil)\n\tif got != nil {\n\t\tt.Errorf(\"WithStack(nil): got %#v, expected nil\", got)\n\t}\n}\n\nfunc TestWithStack(t *testing.T) {\n\ttests := []struct {\n\t\terr  error\n\t\twant string\n\t}{\n\t\t{io.EOF, \"EOF\"},\n\t\t{WithStack(io.EOF), \"EOF\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := WithStack(tt.err).Error()\n\t\tif got != tt.want {\n\t\t\tt.Errorf(\"WithStack(%v): got: %v, want %v\", tt.err, got, tt.want)\n\t\t}\n\t}\n}\n\nfunc TestWithMessageNil(t *testing.T) {\n\tgot := WithMessage(nil, \"no error\")\n\tif got != nil {\n\t\tt.Errorf(\"WithMessage(nil, \\\"no error\\\"): got %#v, expected nil\", got)\n\t}\n}\n\nfunc TestWithMessage(t *testing.T) {\n\ttests := []struct {\n\t\terr     error\n\t\tmessage string\n\t\twant    string\n\t}{\n\t\t{io.EOF, \"read error\", \"read error: EOF\"},\n\t\t{WithMessage(io.EOF, \"read error\"), \"client error\", \"client error: read error: EOF\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := WithMessage(tt.err, tt.message).Error()\n\t\tif got != tt.want {\n\t\t\tt.Errorf(\"WithMessage(%v, %q): got: %q, want %q\", tt.err, tt.message, got, tt.want)\n\t\t}\n\t}\n\n}\n\n// errors.New, etc values are not expected to be compared by value\n// but the change in errors#27 made them incomparable. Assert that\n// various kinds of errors have a functional equality operator, even\n// if the result of that equality is always false.\nfunc TestErrorEquality(t *testing.T) {\n\tvals := []error{\n\t\tnil,\n\t\tio.EOF,\n\t\terrors.New(\"EOF\"),\n\t\tNew(\"EOF\"),\n\t\tErrorf(\"EOF\"),\n\t\tWrap(io.EOF, \"EOF\"),\n\t\tWrapf(io.EOF, \"EOF%d\", 2),\n\t\tWithMessage(nil, \"whoops\"),\n\t\tWithMessage(io.EOF, \"whoops\"),\n\t\tWithStack(io.EOF),\n\t\tWithStack(nil),\n\t}\n\n\tfor i := range vals {\n\t\tfor j := range vals {\n\t\t\t_ = vals[i] == vals[j] // mustn't panic\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/example_test.go",
    "content": "package errors_test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pkg/errors\"\n)\n\nfunc ExampleNew() {\n\terr := errors.New(\"whoops\")\n\tfmt.Println(err)\n\n\t// Output: whoops\n}\n\nfunc ExampleNew_printf() {\n\terr := errors.New(\"whoops\")\n\tfmt.Printf(\"%+v\", err)\n\n\t// Example output:\n\t// whoops\n\t// github.com/pkg/errors_test.ExampleNew_printf\n\t//         /home/dfc/src/github.com/pkg/errors/example_test.go:17\n\t// testing.runExample\n\t//         /home/dfc/go/src/testing/example.go:114\n\t// testing.RunExamples\n\t//         /home/dfc/go/src/testing/example.go:38\n\t// testing.(*M).Run\n\t//         /home/dfc/go/src/testing/testing.go:744\n\t// main.main\n\t//         /github.com/pkg/errors/_test/_testmain.go:106\n\t// runtime.main\n\t//         /home/dfc/go/src/runtime/proc.go:183\n\t// runtime.goexit\n\t//         /home/dfc/go/src/runtime/asm_amd64.s:2059\n}\n\nfunc ExampleWithMessage() {\n\tcause := errors.New(\"whoops\")\n\terr := errors.WithMessage(cause, \"oh noes\")\n\tfmt.Println(err)\n\n\t// Output: oh noes: whoops\n}\n\nfunc ExampleWithStack() {\n\tcause := errors.New(\"whoops\")\n\terr := errors.WithStack(cause)\n\tfmt.Println(err)\n\n\t// Output: whoops\n}\n\nfunc ExampleWithStack_printf() {\n\tcause := errors.New(\"whoops\")\n\terr := errors.WithStack(cause)\n\tfmt.Printf(\"%+v\", err)\n\n\t// Example Output:\n\t// whoops\n\t// github.com/pkg/errors_test.ExampleWithStack_printf\n\t//         /home/fabstu/go/src/github.com/pkg/errors/example_test.go:55\n\t// testing.runExample\n\t//         /usr/lib/go/src/testing/example.go:114\n\t// testing.RunExamples\n\t//         /usr/lib/go/src/testing/example.go:38\n\t// testing.(*M).Run\n\t//         /usr/lib/go/src/testing/testing.go:744\n\t// main.main\n\t//         github.com/pkg/errors/_test/_testmain.go:106\n\t// runtime.main\n\t//         /usr/lib/go/src/runtime/proc.go:183\n\t// runtime.goexit\n\t//         /usr/lib/go/src/runtime/asm_amd64.s:2086\n\t// github.com/pkg/errors_test.ExampleWithStack_printf\n\t//         /home/fabstu/go/src/github.com/pkg/errors/example_test.go:56\n\t// testing.runExample\n\t//         /usr/lib/go/src/testing/example.go:114\n\t// testing.RunExamples\n\t//         /usr/lib/go/src/testing/example.go:38\n\t// testing.(*M).Run\n\t//         /usr/lib/go/src/testing/testing.go:744\n\t// main.main\n\t//         github.com/pkg/errors/_test/_testmain.go:106\n\t// runtime.main\n\t//         /usr/lib/go/src/runtime/proc.go:183\n\t// runtime.goexit\n\t//         /usr/lib/go/src/runtime/asm_amd64.s:2086\n}\n\nfunc ExampleWrap() {\n\tcause := errors.New(\"whoops\")\n\terr := errors.Wrap(cause, \"oh noes\")\n\tfmt.Println(err)\n\n\t// Output: oh noes: whoops\n}\n\nfunc fn() error {\n\te1 := errors.New(\"error\")\n\te2 := errors.Wrap(e1, \"inner\")\n\te3 := errors.Wrap(e2, \"middle\")\n\treturn errors.Wrap(e3, \"outer\")\n}\n\nfunc ExampleCause() {\n\terr := fn()\n\tfmt.Println(err)\n\tfmt.Println(errors.Cause(err))\n\n\t// Output: outer: middle: inner: error\n\t// error\n}\n\nfunc ExampleWrap_extended() {\n\terr := fn()\n\tfmt.Printf(\"%+v\\n\", err)\n\n\t// Example output:\n\t// error\n\t// github.com/pkg/errors_test.fn\n\t//         /home/dfc/src/github.com/pkg/errors/example_test.go:47\n\t// github.com/pkg/errors_test.ExampleCause_printf\n\t//         /home/dfc/src/github.com/pkg/errors/example_test.go:63\n\t// testing.runExample\n\t//         /home/dfc/go/src/testing/example.go:114\n\t// testing.RunExamples\n\t//         /home/dfc/go/src/testing/example.go:38\n\t// testing.(*M).Run\n\t//         /home/dfc/go/src/testing/testing.go:744\n\t// main.main\n\t//         /github.com/pkg/errors/_test/_testmain.go:104\n\t// runtime.main\n\t//         /home/dfc/go/src/runtime/proc.go:183\n\t// runtime.goexit\n\t//         /home/dfc/go/src/runtime/asm_amd64.s:2059\n\t// github.com/pkg/errors_test.fn\n\t// \t  /home/dfc/src/github.com/pkg/errors/example_test.go:48: inner\n\t// github.com/pkg/errors_test.fn\n\t//        /home/dfc/src/github.com/pkg/errors/example_test.go:49: middle\n\t// github.com/pkg/errors_test.fn\n\t//      /home/dfc/src/github.com/pkg/errors/example_test.go:50: outer\n}\n\nfunc ExampleWrapf() {\n\tcause := errors.New(\"whoops\")\n\terr := errors.Wrapf(cause, \"oh noes #%d\", 2)\n\tfmt.Println(err)\n\n\t// Output: oh noes #2: whoops\n}\n\nfunc ExampleErrorf_extended() {\n\terr := errors.Errorf(\"whoops: %s\", \"foo\")\n\tfmt.Printf(\"%+v\", err)\n\n\t// Example output:\n\t// whoops: foo\n\t// github.com/pkg/errors_test.ExampleErrorf\n\t//         /home/dfc/src/github.com/pkg/errors/example_test.go:101\n\t// testing.runExample\n\t//         /home/dfc/go/src/testing/example.go:114\n\t// testing.RunExamples\n\t//         /home/dfc/go/src/testing/example.go:38\n\t// testing.(*M).Run\n\t//         /home/dfc/go/src/testing/testing.go:744\n\t// main.main\n\t//         /github.com/pkg/errors/_test/_testmain.go:102\n\t// runtime.main\n\t//         /home/dfc/go/src/runtime/proc.go:183\n\t// runtime.goexit\n\t//         /home/dfc/go/src/runtime/asm_amd64.s:2059\n}\n\nfunc Example_stackTrace() {\n\ttype stackTracer interface {\n\t\tStackTrace() errors.StackTrace\n\t}\n\n\terr, ok := errors.Cause(fn()).(stackTracer)\n\tif !ok {\n\t\tpanic(\"oops, err does not implement stackTracer\")\n\t}\n\n\tst := err.StackTrace()\n\tfmt.Printf(\"%+v\", st[0:2]) // top two frames\n\n\t// Example output:\n\t// github.com/pkg/errors_test.fn\n\t//\t/home/dfc/src/github.com/pkg/errors/example_test.go:47\n\t// github.com/pkg/errors_test.Example_stackTrace\n\t//\t/home/dfc/src/github.com/pkg/errors/example_test.go:127\n}\n\nfunc ExampleCause_printf() {\n\terr := errors.Wrap(func() error {\n\t\treturn func() error {\n\t\t\treturn errors.Errorf(\"hello %s\", fmt.Sprintf(\"world\"))\n\t\t}()\n\t}(), \"failed\")\n\n\tfmt.Printf(\"%v\", err)\n\n\t// Output: failed: hello world\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/format_test.go",
    "content": "package errors\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestFormatNew(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tNew(\"error\"),\n\t\t\"%s\",\n\t\t\"error\",\n\t}, {\n\t\tNew(\"error\"),\n\t\t\"%v\",\n\t\t\"error\",\n\t}, {\n\t\tNew(\"error\"),\n\t\t\"%+v\",\n\t\t\"error\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatNew\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:26\",\n\t}, {\n\t\tNew(\"error\"),\n\t\t\"%q\",\n\t\t`\"error\"`,\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.error, tt.format, tt.want)\n\t}\n}\n\nfunc TestFormatErrorf(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tErrorf(\"%s\", \"error\"),\n\t\t\"%s\",\n\t\t\"error\",\n\t}, {\n\t\tErrorf(\"%s\", \"error\"),\n\t\t\"%v\",\n\t\t\"error\",\n\t}, {\n\t\tErrorf(\"%s\", \"error\"),\n\t\t\"%+v\",\n\t\t\"error\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatErrorf\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:56\",\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.error, tt.format, tt.want)\n\t}\n}\n\nfunc TestFormatWrap(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tWrap(New(\"error\"), \"error2\"),\n\t\t\"%s\",\n\t\t\"error2: error\",\n\t}, {\n\t\tWrap(New(\"error\"), \"error2\"),\n\t\t\"%v\",\n\t\t\"error2: error\",\n\t}, {\n\t\tWrap(New(\"error\"), \"error2\"),\n\t\t\"%+v\",\n\t\t\"error\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatWrap\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:82\",\n\t}, {\n\t\tWrap(io.EOF, \"error\"),\n\t\t\"%s\",\n\t\t\"error: EOF\",\n\t}, {\n\t\tWrap(io.EOF, \"error\"),\n\t\t\"%v\",\n\t\t\"error: EOF\",\n\t}, {\n\t\tWrap(io.EOF, \"error\"),\n\t\t\"%+v\",\n\t\t\"EOF\\n\" +\n\t\t\t\"error\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatWrap\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:96\",\n\t}, {\n\t\tWrap(Wrap(io.EOF, \"error1\"), \"error2\"),\n\t\t\"%+v\",\n\t\t\"EOF\\n\" +\n\t\t\t\"error1\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatWrap\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:103\\n\",\n\t}, {\n\t\tWrap(New(\"error with space\"), \"context\"),\n\t\t\"%q\",\n\t\t`\"context: error with space\"`,\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.error, tt.format, tt.want)\n\t}\n}\n\nfunc TestFormatWrapf(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tWrapf(io.EOF, \"error%d\", 2),\n\t\t\"%s\",\n\t\t\"error2: EOF\",\n\t}, {\n\t\tWrapf(io.EOF, \"error%d\", 2),\n\t\t\"%v\",\n\t\t\"error2: EOF\",\n\t}, {\n\t\tWrapf(io.EOF, \"error%d\", 2),\n\t\t\"%+v\",\n\t\t\"EOF\\n\" +\n\t\t\t\"error2\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatWrapf\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:134\",\n\t}, {\n\t\tWrapf(New(\"error\"), \"error%d\", 2),\n\t\t\"%s\",\n\t\t\"error2: error\",\n\t}, {\n\t\tWrapf(New(\"error\"), \"error%d\", 2),\n\t\t\"%v\",\n\t\t\"error2: error\",\n\t}, {\n\t\tWrapf(New(\"error\"), \"error%d\", 2),\n\t\t\"%+v\",\n\t\t\"error\\n\" +\n\t\t\t\"github.com/pkg/errors.TestFormatWrapf\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:149\",\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.error, tt.format, tt.want)\n\t}\n}\n\nfunc TestFormatWithStack(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   []string\n\t}{{\n\t\tWithStack(io.EOF),\n\t\t\"%s\",\n\t\t[]string{\"EOF\"},\n\t}, {\n\t\tWithStack(io.EOF),\n\t\t\"%v\",\n\t\t[]string{\"EOF\"},\n\t}, {\n\t\tWithStack(io.EOF),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:175\"},\n\t}, {\n\t\tWithStack(New(\"error\")),\n\t\t\"%s\",\n\t\t[]string{\"error\"},\n\t}, {\n\t\tWithStack(New(\"error\")),\n\t\t\"%v\",\n\t\t[]string{\"error\"},\n\t}, {\n\t\tWithStack(New(\"error\")),\n\t\t\"%+v\",\n\t\t[]string{\"error\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:189\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:189\"},\n\t}, {\n\t\tWithStack(WithStack(io.EOF)),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:197\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:197\"},\n\t}, {\n\t\tWithStack(WithStack(Wrapf(io.EOF, \"message\"))),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\",\n\t\t\t\"message\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:205\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:205\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:205\"},\n\t}, {\n\t\tWithStack(Errorf(\"error%d\", 1)),\n\t\t\"%+v\",\n\t\t[]string{\"error1\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:216\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithStack\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:216\"},\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true)\n\t}\n}\n\nfunc TestFormatWithMessage(t *testing.T) {\n\ttests := []struct {\n\t\terror\n\t\tformat string\n\t\twant   []string\n\t}{{\n\t\tWithMessage(New(\"error\"), \"error2\"),\n\t\t\"%s\",\n\t\t[]string{\"error2: error\"},\n\t}, {\n\t\tWithMessage(New(\"error\"), \"error2\"),\n\t\t\"%v\",\n\t\t[]string{\"error2: error\"},\n\t}, {\n\t\tWithMessage(New(\"error\"), \"error2\"),\n\t\t\"%+v\",\n\t\t[]string{\n\t\t\t\"error\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:244\",\n\t\t\t\"error2\"},\n\t}, {\n\t\tWithMessage(io.EOF, \"addition1\"),\n\t\t\"%s\",\n\t\t[]string{\"addition1: EOF\"},\n\t}, {\n\t\tWithMessage(io.EOF, \"addition1\"),\n\t\t\"%v\",\n\t\t[]string{\"addition1: EOF\"},\n\t}, {\n\t\tWithMessage(io.EOF, \"addition1\"),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\", \"addition1\"},\n\t}, {\n\t\tWithMessage(WithMessage(io.EOF, \"addition1\"), \"addition2\"),\n\t\t\"%v\",\n\t\t[]string{\"addition2: addition1: EOF\"},\n\t}, {\n\t\tWithMessage(WithMessage(io.EOF, \"addition1\"), \"addition2\"),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\", \"addition1\", \"addition2\"},\n\t}, {\n\t\tWrap(WithMessage(io.EOF, \"error1\"), \"error2\"),\n\t\t\"%+v\",\n\t\t[]string{\"EOF\", \"error1\", \"error2\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:272\"},\n\t}, {\n\t\tWithMessage(Errorf(\"error%d\", 1), \"error2\"),\n\t\t\"%+v\",\n\t\t[]string{\"error1\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:278\",\n\t\t\t\"error2\"},\n\t}, {\n\t\tWithMessage(WithStack(io.EOF), \"error\"),\n\t\t\"%+v\",\n\t\t[]string{\n\t\t\t\"EOF\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:285\",\n\t\t\t\"error\"},\n\t}, {\n\t\tWithMessage(Wrap(WithStack(io.EOF), \"inside-error\"), \"outside-error\"),\n\t\t\"%+v\",\n\t\t[]string{\n\t\t\t\"EOF\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:293\",\n\t\t\t\"inside-error\",\n\t\t\t\"github.com/pkg/errors.TestFormatWithMessage\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:293\",\n\t\t\t\"outside-error\"},\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true)\n\t}\n}\n\nfunc TestFormatGeneric(t *testing.T) {\n\tstarts := []struct {\n\t\terr  error\n\t\twant []string\n\t}{\n\t\t{New(\"new-error\"), []string{\n\t\t\t\"new-error\",\n\t\t\t\"github.com/pkg/errors.TestFormatGeneric\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:315\"},\n\t\t}, {Errorf(\"errorf-error\"), []string{\n\t\t\t\"errorf-error\",\n\t\t\t\"github.com/pkg/errors.TestFormatGeneric\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/format_test.go:319\"},\n\t\t}, {errors.New(\"errors-new-error\"), []string{\n\t\t\t\"errors-new-error\"},\n\t\t},\n\t}\n\n\twrappers := []wrapper{\n\t\t{\n\t\t\tfunc(err error) error { return WithMessage(err, \"with-message\") },\n\t\t\t[]string{\"with-message\"},\n\t\t}, {\n\t\t\tfunc(err error) error { return WithStack(err) },\n\t\t\t[]string{\n\t\t\t\t\"github.com/pkg/errors.(func·002|TestFormatGeneric.func2)\\n\\t\" +\n\t\t\t\t\t\".+/github.com/pkg/errors/format_test.go:333\",\n\t\t\t},\n\t\t}, {\n\t\t\tfunc(err error) error { return Wrap(err, \"wrap-error\") },\n\t\t\t[]string{\n\t\t\t\t\"wrap-error\",\n\t\t\t\t\"github.com/pkg/errors.(func·003|TestFormatGeneric.func3)\\n\\t\" +\n\t\t\t\t\t\".+/github.com/pkg/errors/format_test.go:339\",\n\t\t\t},\n\t\t}, {\n\t\t\tfunc(err error) error { return Wrapf(err, \"wrapf-error%d\", 1) },\n\t\t\t[]string{\n\t\t\t\t\"wrapf-error1\",\n\t\t\t\t\"github.com/pkg/errors.(func·004|TestFormatGeneric.func4)\\n\\t\" +\n\t\t\t\t\t\".+/github.com/pkg/errors/format_test.go:346\",\n\t\t\t},\n\t\t},\n\t}\n\n\tfor s := range starts {\n\t\terr := starts[s].err\n\t\twant := starts[s].want\n\t\ttestFormatCompleteCompare(t, s, err, \"%+v\", want, false)\n\t\ttestGenericRecursive(t, err, want, wrappers, 3)\n\t}\n}\n\nfunc testFormatRegexp(t *testing.T, n int, arg interface{}, format, want string) {\n\tgot := fmt.Sprintf(format, arg)\n\tgotLines := strings.SplitN(got, \"\\n\", -1)\n\twantLines := strings.SplitN(want, \"\\n\", -1)\n\n\tif len(wantLines) > len(gotLines) {\n\t\tt.Errorf(\"test %d: wantLines(%d) > gotLines(%d):\\n got: %q\\nwant: %q\", n+1, len(wantLines), len(gotLines), got, want)\n\t\treturn\n\t}\n\n\tfor i, w := range wantLines {\n\t\tmatch, err := regexp.MatchString(w, gotLines[i])\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif !match {\n\t\t\tt.Errorf(\"test %d: line %d: fmt.Sprintf(%q, err):\\n got: %q\\nwant: %q\", n+1, i+1, format, got, want)\n\t\t}\n\t}\n}\n\nvar stackLineR = regexp.MustCompile(`\\.`)\n\n// parseBlocks parses input into a slice, where:\n//  - incase entry contains a newline, its a stacktrace\n//  - incase entry contains no newline, its a solo line.\n//\n// Detecting stack boundaries only works incase the WithStack-calls are\n// to be found on the same line, thats why it is optionally here.\n//\n// Example use:\n//\n// for _, e := range blocks {\n//   if strings.ContainsAny(e, \"\\n\") {\n//     // Match as stack\n//   } else {\n//     // Match as line\n//   }\n// }\n//\nfunc parseBlocks(input string, detectStackboundaries bool) ([]string, error) {\n\tvar blocks []string\n\n\tstack := \"\"\n\twasStack := false\n\tlines := map[string]bool{} // already found lines\n\n\tfor _, l := range strings.Split(input, \"\\n\") {\n\t\tisStackLine := stackLineR.MatchString(l)\n\n\t\tswitch {\n\t\tcase !isStackLine && wasStack:\n\t\t\tblocks = append(blocks, stack, l)\n\t\t\tstack = \"\"\n\t\t\tlines = map[string]bool{}\n\t\tcase isStackLine:\n\t\t\tif wasStack {\n\t\t\t\t// Detecting two stacks after another, possible cause lines match in\n\t\t\t\t// our tests due to WithStack(WithStack(io.EOF)) on same line.\n\t\t\t\tif detectStackboundaries {\n\t\t\t\t\tif lines[l] {\n\t\t\t\t\t\tif len(stack) == 0 {\n\t\t\t\t\t\t\treturn nil, errors.New(\"len of block must not be zero here\")\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tblocks = append(blocks, stack)\n\t\t\t\t\t\tstack = l\n\t\t\t\t\t\tlines = map[string]bool{l: true}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstack = stack + \"\\n\" + l\n\t\t\t} else {\n\t\t\t\tstack = l\n\t\t\t}\n\t\t\tlines[l] = true\n\t\tcase !isStackLine && !wasStack:\n\t\t\tblocks = append(blocks, l)\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"must not happen\")\n\t\t}\n\n\t\twasStack = isStackLine\n\t}\n\n\t// Use up stack\n\tif stack != \"\" {\n\t\tblocks = append(blocks, stack)\n\t}\n\treturn blocks, nil\n}\n\nfunc testFormatCompleteCompare(t *testing.T, n int, arg interface{}, format string, want []string, detectStackBoundaries bool) {\n\tgotStr := fmt.Sprintf(format, arg)\n\n\tgot, err := parseBlocks(gotStr, detectStackBoundaries)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif len(got) != len(want) {\n\t\tt.Fatalf(\"test %d: fmt.Sprintf(%s, err) -> wrong number of blocks: got(%d) want(%d)\\n got: %s\\nwant: %s\\ngotStr: %q\",\n\t\t\tn+1, format, len(got), len(want), prettyBlocks(got), prettyBlocks(want), gotStr)\n\t}\n\n\tfor i := range got {\n\t\tif strings.ContainsAny(want[i], \"\\n\") {\n\t\t\t// Match as stack\n\t\t\tmatch, err := regexp.MatchString(want[i], got[i])\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tif !match {\n\t\t\t\tt.Fatalf(\"test %d: block %d: fmt.Sprintf(%q, err):\\ngot:\\n%q\\nwant:\\n%q\\nall-got:\\n%s\\nall-want:\\n%s\\n\",\n\t\t\t\t\tn+1, i+1, format, got[i], want[i], prettyBlocks(got), prettyBlocks(want))\n\t\t\t}\n\t\t} else {\n\t\t\t// Match as message\n\t\t\tif got[i] != want[i] {\n\t\t\t\tt.Fatalf(\"test %d: fmt.Sprintf(%s, err) at block %d got != want:\\n got: %q\\nwant: %q\", n+1, format, i+1, got[i], want[i])\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype wrapper struct {\n\twrap func(err error) error\n\twant []string\n}\n\nfunc prettyBlocks(blocks []string, prefix ...string) string {\n\tvar out []string\n\n\tfor _, b := range blocks {\n\t\tout = append(out, fmt.Sprintf(\"%v\", b))\n\t}\n\n\treturn \"   \" + strings.Join(out, \"\\n   \")\n}\n\nfunc testGenericRecursive(t *testing.T, beforeErr error, beforeWant []string, list []wrapper, maxDepth int) {\n\tif len(beforeWant) == 0 {\n\t\tpanic(\"beforeWant must not be empty\")\n\t}\n\tfor _, w := range list {\n\t\tif len(w.want) == 0 {\n\t\t\tpanic(\"want must not be empty\")\n\t\t}\n\n\t\terr := w.wrap(beforeErr)\n\n\t\t// Copy required cause append(beforeWant, ..) modified beforeWant subtly.\n\t\tbeforeCopy := make([]string, len(beforeWant))\n\t\tcopy(beforeCopy, beforeWant)\n\n\t\tbeforeWant := beforeCopy\n\t\tlast := len(beforeWant) - 1\n\t\tvar want []string\n\n\t\t// Merge two stacks behind each other.\n\t\tif strings.ContainsAny(beforeWant[last], \"\\n\") && strings.ContainsAny(w.want[0], \"\\n\") {\n\t\t\twant = append(beforeWant[:last], append([]string{beforeWant[last] + \"((?s).*)\" + w.want[0]}, w.want[1:]...)...)\n\t\t} else {\n\t\t\twant = append(beforeWant, w.want...)\n\t\t}\n\n\t\ttestFormatCompleteCompare(t, maxDepth, err, \"%+v\", want, false)\n\t\tif maxDepth > 0 {\n\t\t\ttestGenericRecursive(t, err, want, list, maxDepth-1)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// Frame represents a program counter inside a stack frame.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   path of source file relative to the compile time GOPATH\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tpc := f.pc()\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn == nil {\n\t\t\t\tio.WriteString(s, \"unknown\")\n\t\t\t} else {\n\t\t\t\tfile, _ := fn.FileLine(pc)\n\t\t\t\tfmt.Fprintf(s, \"%s\\n\\t%s\", fn.Name(), file)\n\t\t\t}\n\t\tdefault:\n\t\t\tio.WriteString(s, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tfmt.Fprintf(s, \"%d\", f.line())\n\tcase 'n':\n\t\tname := runtime.FuncForPC(f.pc()).Name()\n\t\tio.WriteString(s, funcname(name))\n\tcase 'v':\n\t\tf.Format(s, 's')\n\t\tio.WriteString(s, \":\")\n\t\tf.Format(s, 'd')\n\t}\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tfor _, f := range st {\n\t\t\t\tfmt.Fprintf(s, \"\\n%+v\", f)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(s, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tfmt.Fprintf(s, \"%v\", []Frame(st))\n\t\t}\n\tcase 's':\n\t\tfmt.Fprintf(s, \"%s\", []Frame(st))\n\t}\n}\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tfmt.Fprintf(st, \"\\n%+v\", f)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(3, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n\nfunc trimGOPATH(name, file string) string {\n\t// Here we want to get the source file path relative to the compile time\n\t// GOPATH. As of Go 1.6.x there is no direct way to know the compiled\n\t// GOPATH at runtime, but we can infer the number of path segments in the\n\t// GOPATH. We note that fn.Name() returns the function name qualified by\n\t// the import path, which does not include the GOPATH. Thus we can trim\n\t// segments from the beginning of the file path until the number of path\n\t// separators remaining is one more than the number of path separators in\n\t// the function name. For example, given:\n\t//\n\t//    GOPATH     /home/user\n\t//    file       /home/user/src/pkg/sub/file.go\n\t//    fn.Name()  pkg/sub.Type.Method\n\t//\n\t// We want to produce:\n\t//\n\t//    pkg/sub/file.go\n\t//\n\t// From this we can easily see that fn.Name() has one less path separator\n\t// than our desired output. We count separators from the end of the file\n\t// path until it finds two more than in the function name and then move\n\t// one character forward to preserve the initial path segment without a\n\t// leading separator.\n\tconst sep = \"/\"\n\tgoal := strings.Count(name, sep) + 2\n\ti := len(file)\n\tfor n := 0; n < goal; n++ {\n\t\ti = strings.LastIndex(file[:i], sep)\n\t\tif i == -1 {\n\t\t\t// not enough separators found, set i so that the slice expression\n\t\t\t// below leaves file unmodified\n\t\t\ti = -len(sep)\n\t\t\tbreak\n\t\t}\n\t}\n\t// get back to 0 or trim the leading separator\n\tfile = file[i+len(sep):]\n\treturn file\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/pkg/errors/stack_test.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"testing\"\n)\n\nvar initpc, _, _, _ = runtime.Caller(0)\n\nfunc TestFrameLine(t *testing.T) {\n\tvar tests = []struct {\n\t\tFrame\n\t\twant int\n\t}{{\n\t\tFrame(initpc),\n\t\t9,\n\t}, {\n\t\tfunc() Frame {\n\t\t\tvar pc, _, _, _ = runtime.Caller(0)\n\t\t\treturn Frame(pc)\n\t\t}(),\n\t\t20,\n\t}, {\n\t\tfunc() Frame {\n\t\t\tvar pc, _, _, _ = runtime.Caller(1)\n\t\t\treturn Frame(pc)\n\t\t}(),\n\t\t28,\n\t}, {\n\t\tFrame(0), // invalid PC\n\t\t0,\n\t}}\n\n\tfor _, tt := range tests {\n\t\tgot := tt.Frame.line()\n\t\twant := tt.want\n\t\tif want != got {\n\t\t\tt.Errorf(\"Frame(%v): want: %v, got: %v\", uintptr(tt.Frame), want, got)\n\t\t}\n\t}\n}\n\ntype X struct{}\n\nfunc (x X) val() Frame {\n\tvar pc, _, _, _ = runtime.Caller(0)\n\treturn Frame(pc)\n}\n\nfunc (x *X) ptr() Frame {\n\tvar pc, _, _, _ = runtime.Caller(0)\n\treturn Frame(pc)\n}\n\nfunc TestFrameFormat(t *testing.T) {\n\tvar tests = []struct {\n\t\tFrame\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tFrame(initpc),\n\t\t\"%s\",\n\t\t\"stack_test.go\",\n\t}, {\n\t\tFrame(initpc),\n\t\t\"%+s\",\n\t\t\"github.com/pkg/errors.init\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go\",\n\t}, {\n\t\tFrame(0),\n\t\t\"%s\",\n\t\t\"unknown\",\n\t}, {\n\t\tFrame(0),\n\t\t\"%+s\",\n\t\t\"unknown\",\n\t}, {\n\t\tFrame(initpc),\n\t\t\"%d\",\n\t\t\"9\",\n\t}, {\n\t\tFrame(0),\n\t\t\"%d\",\n\t\t\"0\",\n\t}, {\n\t\tFrame(initpc),\n\t\t\"%n\",\n\t\t\"init\",\n\t}, {\n\t\tfunc() Frame {\n\t\t\tvar x X\n\t\t\treturn x.ptr()\n\t\t}(),\n\t\t\"%n\",\n\t\t`\\(\\*X\\).ptr`,\n\t}, {\n\t\tfunc() Frame {\n\t\t\tvar x X\n\t\t\treturn x.val()\n\t\t}(),\n\t\t\"%n\",\n\t\t\"X.val\",\n\t}, {\n\t\tFrame(0),\n\t\t\"%n\",\n\t\t\"\",\n\t}, {\n\t\tFrame(initpc),\n\t\t\"%v\",\n\t\t\"stack_test.go:9\",\n\t}, {\n\t\tFrame(initpc),\n\t\t\"%+v\",\n\t\t\"github.com/pkg/errors.init\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:9\",\n\t}, {\n\t\tFrame(0),\n\t\t\"%v\",\n\t\t\"unknown:0\",\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.Frame, tt.format, tt.want)\n\t}\n}\n\nfunc TestFuncname(t *testing.T) {\n\ttests := []struct {\n\t\tname, want string\n\t}{\n\t\t{\"\", \"\"},\n\t\t{\"runtime.main\", \"main\"},\n\t\t{\"github.com/pkg/errors.funcname\", \"funcname\"},\n\t\t{\"funcname\", \"funcname\"},\n\t\t{\"io.copyBuffer\", \"copyBuffer\"},\n\t\t{\"main.(*R).Write\", \"(*R).Write\"},\n\t}\n\n\tfor _, tt := range tests {\n\t\tgot := funcname(tt.name)\n\t\twant := tt.want\n\t\tif got != want {\n\t\t\tt.Errorf(\"funcname(%q): want: %q, got %q\", tt.name, want, got)\n\t\t}\n\t}\n}\n\nfunc TestTrimGOPATH(t *testing.T) {\n\tvar tests = []struct {\n\t\tFrame\n\t\twant string\n\t}{{\n\t\tFrame(initpc),\n\t\t\"github.com/pkg/errors/stack_test.go\",\n\t}}\n\n\tfor i, tt := range tests {\n\t\tpc := tt.Frame.pc()\n\t\tfn := runtime.FuncForPC(pc)\n\t\tfile, _ := fn.FileLine(pc)\n\t\tgot := trimGOPATH(fn.Name(), file)\n\t\ttestFormatRegexp(t, i, got, \"%s\", tt.want)\n\t}\n}\n\nfunc TestStackTrace(t *testing.T) {\n\ttests := []struct {\n\t\terr  error\n\t\twant []string\n\t}{{\n\t\tNew(\"ooh\"), []string{\n\t\t\t\"github.com/pkg/errors.TestStackTrace\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:172\",\n\t\t},\n\t}, {\n\t\tWrap(New(\"ooh\"), \"ahh\"), []string{\n\t\t\t\"github.com/pkg/errors.TestStackTrace\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:177\", // this is the stack of Wrap, not New\n\t\t},\n\t}, {\n\t\tCause(Wrap(New(\"ooh\"), \"ahh\")), []string{\n\t\t\t\"github.com/pkg/errors.TestStackTrace\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:182\", // this is the stack of New\n\t\t},\n\t}, {\n\t\tfunc() error { return New(\"ooh\") }(), []string{\n\t\t\t`github.com/pkg/errors.(func·009|TestStackTrace.func1)` +\n\t\t\t\t\"\\n\\t.+/github.com/pkg/errors/stack_test.go:187\", // this is the stack of New\n\t\t\t\"github.com/pkg/errors.TestStackTrace\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:187\", // this is the stack of New's caller\n\t\t},\n\t}, {\n\t\tCause(func() error {\n\t\t\treturn func() error {\n\t\t\t\treturn Errorf(\"hello %s\", fmt.Sprintf(\"world\"))\n\t\t\t}()\n\t\t}()), []string{\n\t\t\t`github.com/pkg/errors.(func·010|TestStackTrace.func2.1)` +\n\t\t\t\t\"\\n\\t.+/github.com/pkg/errors/stack_test.go:196\", // this is the stack of Errorf\n\t\t\t`github.com/pkg/errors.(func·011|TestStackTrace.func2)` +\n\t\t\t\t\"\\n\\t.+/github.com/pkg/errors/stack_test.go:197\", // this is the stack of Errorf's caller\n\t\t\t\"github.com/pkg/errors.TestStackTrace\\n\" +\n\t\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:198\", // this is the stack of Errorf's caller's caller\n\t\t},\n\t}}\n\tfor i, tt := range tests {\n\t\tx, ok := tt.err.(interface {\n\t\t\tStackTrace() StackTrace\n\t\t})\n\t\tif !ok {\n\t\t\tt.Errorf(\"expected %#v to implement StackTrace() StackTrace\", tt.err)\n\t\t\tcontinue\n\t\t}\n\t\tst := x.StackTrace()\n\t\tfor j, want := range tt.want {\n\t\t\ttestFormatRegexp(t, i, st[j], \"%+v\", want)\n\t\t}\n\t}\n}\n\nfunc stackTrace() StackTrace {\n\tconst depth = 8\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(1, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn st.StackTrace()\n}\n\nfunc TestStackTraceFormat(t *testing.T) {\n\ttests := []struct {\n\t\tStackTrace\n\t\tformat string\n\t\twant   string\n\t}{{\n\t\tnil,\n\t\t\"%s\",\n\t\t`\\[\\]`,\n\t}, {\n\t\tnil,\n\t\t\"%v\",\n\t\t`\\[\\]`,\n\t}, {\n\t\tnil,\n\t\t\"%+v\",\n\t\t\"\",\n\t}, {\n\t\tnil,\n\t\t\"%#v\",\n\t\t`\\[\\]errors.Frame\\(nil\\)`,\n\t}, {\n\t\tmake(StackTrace, 0),\n\t\t\"%s\",\n\t\t`\\[\\]`,\n\t}, {\n\t\tmake(StackTrace, 0),\n\t\t\"%v\",\n\t\t`\\[\\]`,\n\t}, {\n\t\tmake(StackTrace, 0),\n\t\t\"%+v\",\n\t\t\"\",\n\t}, {\n\t\tmake(StackTrace, 0),\n\t\t\"%#v\",\n\t\t`\\[\\]errors.Frame{}`,\n\t}, {\n\t\tstackTrace()[:2],\n\t\t\"%s\",\n\t\t`\\[stack_test.go stack_test.go\\]`,\n\t}, {\n\t\tstackTrace()[:2],\n\t\t\"%v\",\n\t\t`\\[stack_test.go:225 stack_test.go:272\\]`,\n\t}, {\n\t\tstackTrace()[:2],\n\t\t\"%+v\",\n\t\t\"\\n\" +\n\t\t\t\"github.com/pkg/errors.stackTrace\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:225\\n\" +\n\t\t\t\"github.com/pkg/errors.TestStackTraceFormat\\n\" +\n\t\t\t\"\\t.+/github.com/pkg/errors/stack_test.go:276\",\n\t}, {\n\t\tstackTrace()[:2],\n\t\t\"%#v\",\n\t\t`\\[\\]errors.Frame{stack_test.go:225, stack_test.go:284}`,\n\t}}\n\n\tfor i, tt := range tests {\n\t\ttestFormatRegexp(t, i, tt.StackTrace, tt.format, tt.want)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/LICENSE",
    "content": "            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n                    Version 2, December 2004\n\n Copyright (C) 2017+ Tit Petric <black@scene-si.org>\n\n Everyone is permitted to copy and distribute verbatim or modified\n copies of this license document, and changing it is allowed as long\n as the name is changed.\n\n            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. You just DO WHAT THE FUCK YOU WANT TO.\n\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/README.md",
    "content": "# factory\n\nGo factories for some common things which I use.\n\n- Database (sqlx + mysql & pq) + utility functions\n- Database query profiler for Stdout or Memory ([]string)\n- Sonyflake ID generator for uint64 ids\n\nWritten by [@TitPetric](https://twitter.com/TitPetric) and licensed under the permissive [WTFPL](http://www.wtfpl.net/txt/copying/).\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/database.go",
    "content": "package factory\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"database/sql\"\n\n\t_ \"github.com/go-sql-driver/mysql\"\n\t_ \"github.com/lib/pq\"\n\n\t\"github.com/jmoiron/sqlx\"\n\t\"github.com/pkg/errors\"\n)\n\ntype DatabaseProfiler interface {\n\tPre(query string, args ...interface{}) *DatabaseProfilerContext\n\tPost(*DatabaseProfilerContext)\n\tFlush()\n}\n\ntype DatabaseProfilerContext struct {\n\tQuery string\n\tArgs  string\n\tTime  time.Time\n}\n\ntype DatabaseCredential struct {\n\tDSN string\n}\n\ntype DatabaseFactory struct {\n\tcredentials map[string]*DatabaseCredential\n\tinstances   map[string]*DB\n\n\tProfilerStdout DatabaseProfilerStdout\n\tProfilerMemory DatabaseProfilerMemory\n}\n\nvar Database *DatabaseFactory\n\nfunc init() {\n\tDatabase = &DatabaseFactory{}\n\tDatabase.credentials = make(map[string]*DatabaseCredential)\n\tDatabase.instances = make(map[string]*DB)\n}\n\nfunc (r *DatabaseFactory) Add(name string, config interface{}) {\n\tswitch val := config.(type) {\n\tcase string:\n\t\tr.credentials[name] = &DatabaseCredential{DSN: val}\n\tcase DatabaseCredential:\n\t\tr.credentials[name] = &val\n\tdefault:\n\t\tpanic(\"factory.Database.Add can take config as string|factory.DatabaseCredential\")\n\t}\n}\n\nfunc (r *DatabaseFactory) GetDSN(name string) (string, error) {\n\taddOption := func(s, match, option string) string {\n\t\tif !strings.Contains(s, match) {\n\t\t\ts += option\n\t\t}\n\t\treturn s\n\t}\n\n\tif value, ok := r.credentials[name]; ok {\n\t\tvalue.DSN = addOption(value.DSN, \"?\", \"?\")\n\t\tvalue.DSN = addOption(value.DSN, \"collation=\", \"&collation=utf8_general_ci\")\n\t\tvalue.DSN = addOption(value.DSN, \"parseTime=\", \"&parseTime=true\")\n\t\tvalue.DSN = addOption(value.DSN, \"loc=\", \"&loc=Local\")\n\t\tvalue.DSN = strings.Replace(value.DSN, \"?&\", \"?\", 1)\n\t\treturn value.DSN, nil\n\t}\n\treturn \"\", fmt.Errorf(\"No configuration found for database: %v\", name)\n}\n\nfunc (r *DatabaseFactory) Get(dbName ...string) (*DB, error) {\n\tnames := dbName\n\tif len(names) == 0 {\n\t\tnames = []string{\"default\"}\n\t}\n\tfor _, name := range names {\n\t\tif value, ok := r.instances[name]; ok {\n\t\t\treturn value, nil\n\t\t}\n\t\tdsn, _ := r.GetDSN(name)\n\t\tif dsn != \"\" {\n\t\t\thandle, err := sqlx.Open(\"mysql\", dsn)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tr.instances[name] = &DB{handle, nil}\n\t\t\treturn r.instances[name], nil\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"No configuration found for database: %v\", names)\n}\n\n// DB struct encapsulates sqlx.DB to add new functions\ntype DB struct {\n\t*sqlx.DB\n\n\tProfiler DatabaseProfiler\n}\n\nfunc (r *DB) SetFields(fields []string) string {\n\tidx := 0\n\tsql := \"\"\n\tfor _, field := range fields {\n\t\tif idx > 0 {\n\t\t\tsql = sql + \", \"\n\t\t}\n\t\tidx++\n\t\tsql = sql + field + \"=:\" + field\n\t}\n\treturn sql\n}\n\nfunc (r *DB) Select(dest interface{}, query string, args ...interface{}) error {\n\tvar err error\n\tif r.Profiler != nil {\n\t\tctx := r.Profiler.Pre(query, args...)\n\t\terr = r.DB.Select(dest, query, args...)\n\t\tr.Profiler.Post(ctx)\n\t} else {\n\t\terr = r.DB.Select(dest, query, args...)\n\t}\n\t// clear no rows returned error\n\tif err == sql.ErrNoRows {\n\t\treturn nil\n\t}\n\treturn errors.Wrap(err, \"select query failed\")\n}\n\nfunc (r *DB) Get(dest interface{}, query string, args ...interface{}) error {\n\tvar err error\n\tif r.Profiler != nil {\n\t\tctx := r.Profiler.Pre(query, args...)\n\t\terr = r.DB.Get(dest, query, args...)\n\t\tr.Profiler.Post(ctx)\n\t} else {\n\t\terr = r.DB.Get(dest, query, args...)\n\t}\n\t// clear no rows returned error\n\tif err == sql.ErrNoRows {\n\t\treturn nil\n\t}\n\treturn errors.Wrap(err, \"get query failed\")\n}\n\nfunc (r *DB) set(data interface{}) string {\n\tmessage_value := reflect.ValueOf(data)\n\tif message_value.Kind() == reflect.Ptr {\n\t\tmessage_value = message_value.Elem()\n\t}\n\n\tmessage_fields := make([]string, message_value.NumField())\n\n\tfor i := 0; i < len(message_fields); i++ {\n\t\tfieldType := message_value.Type().Field(i)\n\t\tmessage_fields[i] = fieldType.Tag.Get(\"db\")\n\t}\n\n\tsql := \"\"\n\tfor _, tagFull := range message_fields {\n\t\tif tagFull != \"\" && tagFull != \"-\" {\n\t\t\ttag := strings.Split(tagFull, \",\")\n\t\t\tsql = sql + \" \" + tag[0] + \"=:\" + tag[0] + \",\"\n\t\t}\n\t}\n\treturn sql[1 : len(sql)-1]\n}\n\nfunc (r *DB) Replace(table string, data interface{}) error {\n\tsql := \"replace into \" + table + \" set \" + r.set(data)\n\t_, err := r.NamedExec(sql, data)\n\treturn err\n}\n\nfunc (r *DB) Insert(table string, data interface{}) error {\n\tsql := \"insert into \" + table + \" set \" + r.set(data)\n\t_, err := r.NamedExec(sql, data)\n\treturn err\n}\n\nfunc (r *DB) InsertIgnore(table string, data interface{}) error {\n\tsql := \"insert ignore into \" + table + \" set \" + r.set(data)\n\t_, err := r.NamedExec(sql, data)\n\treturn err\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/profiler.go",
    "content": "package factory\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n/* Log query statistics to stdout */\ntype DatabaseProfilerStdout struct {\n}\n\nfunc (*DatabaseProfilerStdout) Pre(query string, args ...interface{}) *DatabaseProfilerContext {\n\treturn &DatabaseProfilerContext{\n\t\tQuery: query,\n\t\tArgs:  fmt.Sprintf(\"%#v\", args),\n\t\tTime:  time.Now(),\n\t}\n}\n\nfunc (*DatabaseProfilerStdout) Post(p *DatabaseProfilerContext) {\n\tduration := time.Since(p.Time).Seconds()\n\tfmt.Printf(\"[%.4fs] %s (%s)\\n\", duration, p.Query, p.Args)\n}\n\nfunc (*DatabaseProfilerStdout) Flush() {\n}\n\n/* Log query statistics to memory */\ntype DatabaseProfilerMemory struct {\n\tLog []string\n}\n\nfunc (*DatabaseProfilerMemory) Pre(query string, args ...interface{}) *DatabaseProfilerContext {\n\treturn &DatabaseProfilerContext{\n\t\tQuery: query,\n\t\tArgs:  fmt.Sprintf(\"%#v\", args),\n\t\tTime:  time.Now(),\n\t}\n}\n\nfunc (this *DatabaseProfilerMemory) Post(p *DatabaseProfilerContext) {\n\tduration := time.Since(p.Time).Seconds()\n\tthis.Log = append(this.Log, fmt.Sprintf(\"[%.4fs] %s (%s)\", duration, p.Query, p.Args))\n}\n\nfunc (this *DatabaseProfilerMemory) Flush() {\n\tcount := len(this.Log)\n\tfor _, line := range this.Log[:count] {\n\t\tfmt.Println(line)\n\t}\n\tthis.Log = this.Log[count:]\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/resputil/resputil.go",
    "content": "package resputil\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\n\t\"github.com/pkg/errors\"\n)\n\ntype stackTracer interface {\n\tStackTrace() errors.StackTrace\n}\n\ntype successMessage struct {\n\tSuccess struct {\n\t\tMessage string `json:\"message\"`\n\t} `json:\"success\"`\n}\n\ntype errorMessage struct {\n\tError struct {\n\t\tMessage string `json:\"message\"`\n\t\tTrace   string `json:\"trace,omitempty\"`\n\t} `json:\"error\"`\n}\n\n// Error returns a structured error for API responses\nfunc Error(err error) errorMessage {\n\tresponse := errorMessage{}\n\t// add stack trace to the response if available\n\tterr, ok := errors.Cause(err).(stackTracer)\n\tif ok {\n\t\tst := terr.StackTrace()\n\t\tresponse.Error.Trace = fmt.Sprintf(\"%+v\", st)\n\t}\n\tresponse.Error.Message = fmt.Sprintf(\"%s\", err)\n\treturn response\n}\n\n// Success returns a structured sucess message for API responses\nfunc Success(success ...string) successMessage {\n\tresponse := successMessage{}\n\tresponse.Success.Message = \"OK\"\n\tif len(success) > 0 {\n\t\tresponse.Success.Message = success[0]\n\t}\n\treturn response\n}\n\n// Debug request\nfunc Debug(w http.ResponseWriter, r *http.Request) {\n\toutput, err := httputil.DumpRequest(r, true)\n\tif err != nil {\n\t\tfmt.Println(\"Error dumping request:\", err)\n\t\treturn\n\t}\n\tfmt.Println(string(output))\n}\n\n// JSON responds with the first non-nil payload, formats error messages\nfunc JSON(w http.ResponseWriter, responses ...interface{}) {\n\trespond := func(payload interface{}) {\n\t\tvar result []byte\n\t\tvar err error\n\t\tencode := func(payload interface{}) ([]byte, error) {\n\t\t\t// json, err := json.Marshal(payload)\n\t\t\treturn json.MarshalIndent(payload, \"\", \"\\t\")\n\t\t}\n\t\tswitch value := payload.(type) {\n\t\tcase errorMessage:\n\t\t\t// main key is \"error\"\n\t\t\tresult, err = encode(value)\n\t\tcase successMessage:\n\t\t\t// main key is \"success\"\n\t\t\tresult, err = encode(value)\n\t\tdefault:\n\t\t\t// main key is \"response\"\n\t\t\tresult, err = encode(struct {\n\t\t\t\tResponse interface{} `json:\"response\"`\n\t\t\t}{value})\n\t\t}\n\t\tif err != nil {\n\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\t\tw.Header().Set(\"Content-Type\", \"application/json\")\n\t\tw.Write(result)\n\t}\n\n\tfor _, response := range responses {\n\t\tswitch value := response.(type) {\n\t\tcase nil:\n\t\t\tcontinue\n\t\tcase func() (interface{}, error):\n\t\t\tresult, err := value()\n\t\t\tJSON(w, err, result)\n\t\tcase func() error:\n\t\t\terr := value()\n\t\t\tif err == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trespond(Error(err))\n\t\tcase error:\n\t\t\trespond(Error(value))\n\t\tcase string:\n\t\t\tif value == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trespond(value)\n\t\tcase bool:\n\t\t\tif !value {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trespond(value)\n\t\tcase errorMessage:\n\t\t\trespond(value)\n\t\tcase successMessage:\n\t\t\trespond(value)\n\t\tdefault:\n\t\t\trespond(value)\n\t\t}\n\t\t// Exit on the first output...\n\t\treturn\n\t}\n\trespond(false)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/semaphore.go",
    "content": "package factory\n\nimport (\n\t\"sync/atomic\"\n)\n\ntype Semaphore struct {\n\tsemaphore int32\n}\n\nfunc (l *Semaphore) CanRun() bool {\n\treturn atomic.CompareAndSwapInt32(&l.semaphore, 0, 1)\n}\nfunc (l *Semaphore) Done() {\n\tatomic.CompareAndSwapInt32(&l.semaphore, 1, 0)\n}\n"
  },
  {
    "path": "api-foundations/chapter4b-jwt/vendor/github.com/titpetric/factory/sonyflake.go",
    "content": "package factory\n\nimport (\n\t\"github.com/sony/sonyflake\"\n\t\"time\"\n)\n\ntype SonyflakeFactory struct {\n\t*sonyflake.Sonyflake\n}\n\nvar Sonyflake *SonyflakeFactory\n\nfunc init() {\n\tSonyflake = &SonyflakeFactory{\n\t\tsonyflake.NewSonyflake(sonyflake.Settings{\n\t\t\tStartTime: time.Unix(1503550784, 0),\n\t\t}),\n\t}\n}\n\n// NextID returns uint64 ID, escalates possible error to a panic\nfunc (s *SonyflakeFactory) NextID() uint64 {\n\t// sonyflake errors out only when the time overflows, that will\n\t// occur in approximately 174 years after the custom epoch.\n\t// If the 10ms keyspace is exhausted, NextID will sleep and return\n\t// an ID from the next interval. It can't fail, because the generator\n\t// is protected by a Mutex.\n\tid, err := s.Sonyflake.NextID()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn id\n}\n"
  },
  {
    "path": "api-foundations/chapter5/apiservice/apiservice.go",
    "content": "package apiservice\n\nimport \"fmt\"\n\nfunc HelloWorld() {\n\tfmt.Printf(\"Hello world!\\n\")\n}\n"
  },
  {
    "path": "api-foundations/chapter5/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter5/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter5/server1.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"foundations/bootstrap\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n)\n\nfunc json_encode(r interface{}) string {\n\tjsonString, _ := json.MarshalIndent(r, \"\", \"\\t\")\n\treturn string(jsonString[:])\n}\n\ntype FirstName struct {\n\tFirstname string `json:\"firstname\"`\n}\n\nfunc getFirstName(w http.ResponseWriter, r *http.Request) {\n\ttime.Sleep(200 * time.Millisecond)\n\tvalue := r.FormValue(\"firstname\")\n\tresponse := FirstName{Firstname: value}\n\tresponse_json := json_encode(response)\n\tfmt.Fprintf(w, response_json)\n}\n\ntype LastName struct {\n\tLastname string `json:\"lastname\"`\n}\n\nfunc getLastName(w http.ResponseWriter, r *http.Request) {\n\ttime.Sleep(300 * time.Millisecond)\n\tvalue := r.FormValue(\"lastname\")\n\tresponse := LastName{Lastname: value}\n\tresponse_json := json_encode(response)\n\tfmt.Fprintf(w, response_json)\n}\n\ntype FullName struct {\n\tFirstname string `json:\"firstname\"`\n\tLastname  string `json:\"lastname\"`\n}\n\nfunc getFullName(w http.ResponseWriter, r *http.Request) {\n\tbootstrap.StartTime = 0\n\n\tfirstname_value := r.FormValue(\"firstname\")\n\tlastname_value := r.FormValue(\"lastname\")\n\n\tvar firstname FirstName\n\tvar lastname LastName\n\tvar fullname FullName\n\n\tdata := url.Values{}\n\tdata.Add(\"firstname\", firstname_value)\n\tdata.Add(\"lastname\", lastname_value)\n\n\t// fetch firstname\n\n\tfn_url := \"http://localhost/firstname?\" + data.Encode()\n\tfmt.Printf(\"[%.4f] Fetching url: %s\\n\", bootstrap.Now(), fn_url)\n\tfn_response, _ := http.Get(fn_url)\n\n\tfn_contents, _ := ioutil.ReadAll(fn_response.Body)\n\n\t_ = json.Unmarshal(fn_contents, &firstname)\n\tfullname.Firstname = firstname.Firstname\n\n\t// fetch lastname\n\n\tln_url := \"http://localhost/lastname?\" + data.Encode()\n\tfmt.Printf(\"[%.4f] Fetching url: %s\\n\", bootstrap.Now(), ln_url)\n\tln_response, _ := http.Get(ln_url)\n\n\tln_contents, _ := ioutil.ReadAll(ln_response.Body)\n\n\tfmt.Printf(\"[%.4f] Done fetching\\n\", bootstrap.Now())\n\n\t_ = json.Unmarshal(ln_contents, &lastname)\n\tfullname.Lastname = lastname.Lastname\n\n\t// return fullname response\n\tresponse_json := json_encode(fullname)\n\tfmt.Fprintf(w, response_json)\n\tfmt.Printf(\"[%.4f] Done with response: %#v\\n\", bootstrap.Now(), fullname)\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\thttp.HandleFunc(\"/fullname\", getFullName)\n\thttp.HandleFunc(\"/firstname\", getFirstName)\n\thttp.HandleFunc(\"/lastname\", getLastName)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter5/server2.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"foundations/bootstrap\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n)\n\nfunc json_encode(r interface{}) string {\n\tjsonString, _ := json.MarshalIndent(r, \"\", \"\\t\")\n\treturn string(jsonString[:])\n}\n\ntype FirstName struct {\n\tFirstname string `json:\"firstname\"`\n}\n\nfunc getFirstName(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"[%.4f] Request with firstname\\n\", bootstrap.Now())\n\ttime.Sleep(300 * time.Millisecond)\n\tvalue := r.FormValue(\"firstname\")\n\tresponse := FirstName{Firstname: value}\n\tresponse_json := json_encode(response)\n\tfmt.Fprintf(w, response_json)\n\tfmt.Printf(\"[%.4f] Response with firstname\\n\", bootstrap.Now())\n}\n\ntype LastName struct {\n\tLastname string `json:\"lastname\"`\n}\n\nfunc getLastName(w http.ResponseWriter, r *http.Request) {\n\tfmt.Printf(\"[%.4f] Request with lastname\\n\", bootstrap.Now())\n\ttime.Sleep(200 * time.Millisecond)\n\tvalue := r.FormValue(\"lastname\")\n\tresponse := LastName{Lastname: value}\n\tresponse_json := json_encode(response)\n\tfmt.Fprintf(w, response_json)\n\tfmt.Printf(\"[%.4f] Response with lastname\\n\", bootstrap.Now())\n}\n\ntype FullName struct {\n\tFirstname string `json:\"firstname\"`\n\tLastname  string `json:\"lastname\"`\n}\n\nfunc getFullName(w http.ResponseWriter, r *http.Request) {\n\tbootstrap.StartTime = 0\n\n\tfirstname_value := r.FormValue(\"firstname\")\n\tlastname_value := r.FormValue(\"lastname\")\n\n\tvar firstname FirstName\n\tvar lastname LastName\n\tvar fullname FullName\n\n\tdata := url.Values{}\n\tdata.Add(\"firstname\", firstname_value)\n\tdata.Add(\"lastname\", lastname_value)\n\n\t// fetch firstname\n\tfn_chan := make(chan []byte, 1)\n\tgo func() {\n\t\tfn_url := \"http://localhost/firstname?\" + data.Encode()\n\t\tfmt.Printf(\"[%.4f] Fetching url: %s\\n\", bootstrap.Now(), fn_url)\n\t\tfn_response, _ := http.Get(fn_url)\n\t\tcontents, _ := ioutil.ReadAll(fn_response.Body)\n\t\tfn_chan <- contents\n\t}()\n\n\t// fetch lastname\n\tln_chan := make(chan []byte, 1)\n\tgo func() {\n\t\tln_url := \"http://localhost/lastname?\" + data.Encode()\n\t\tfmt.Printf(\"[%.4f] Fetching url: %s\\n\", bootstrap.Now(), ln_url)\n\t\tln_response, _ := http.Get(ln_url)\n\t\tcontents, _ := ioutil.ReadAll(ln_response.Body)\n\t\tln_chan <- contents\n\t}()\n\n\t// fetch response data\n\n\tfn_contents := <-fn_chan\n\t_ = json.Unmarshal(fn_contents, &firstname)\n\tfullname.Firstname = firstname.Firstname\n\n\tln_contents := <-ln_chan\n\t_ = json.Unmarshal(ln_contents, &lastname)\n\tfullname.Lastname = lastname.Lastname\n\n\tfmt.Printf(\"[%.4f] Done fetching\\n\", bootstrap.Now())\n\n\t// return fullname response\n\tresponse_json := json_encode(fullname)\n\tfmt.Fprintf(w, response_json)\n\tfmt.Printf(\"[%.4f] Done with response: %#v\\n\", bootstrap.Now(), fullname)\n}\n\nfunc main() {\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\thttp.HandleFunc(\"/fullname\", getFullName)\n\thttp.HandleFunc(\"/firstname\", getFirstName)\n\thttp.HandleFunc(\"/lastname\", getLastName)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter5/server3.go",
    "content": "package main\n\nimport \"foundations/apiservice\"\n\nfunc main() {\n\tapiservice.HelloWorld()\n}\n"
  },
  {
    "path": "api-foundations/chapter6/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter6/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"fmt\"\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis\" + fmt.Sprintf(\"%d\", serverIndex) + \":6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 2    // hold two connections\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\tfmt.Println(\"New redis connection: \" + serverName)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tif commandName != \"PING\" {\n\t\tfmt.Printf(\"%s: %#v\\n\", commandName, r)\n\t}\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/bootstrap/redigo.go.txt",
    "content": "package bootstrap\n\nimport \"fmt\"\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis\" + fmt.Sprintf(\"%d\", serverIndex) + \":6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 2    // hold two connections\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\tfmt.Println(\"New redis connection: \" + serverName)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/redis1.go",
    "content": "package main\n\nimport \"foundations/bootstrap\"\nimport \"log\"\nimport \"fmt\"\n\nfunc main() {\n\tredis, err := bootstrap.GetRedis()\n\tif err != nil {\n\t\tlog.Fatal(\"Fatal error: \", err)\n\t}\n\tfmt.Printf(\"[%.4f] Starting\\n\", bootstrap.Now())\n\tpong, err := redis.Do(\"PING\")\n\tfmt.Printf(\"[%.4f] Response %s, err %#v\\n\", bootstrap.Now(), pong, err)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/redis1.go.txt",
    "content": "== go run redis1.go ==\n[0.0000] Starting\n[0.4575] Response PONG, err <nil>"
  },
  {
    "path": "api-foundations/chapter6/redis2.go",
    "content": "package main\n\nimport \"foundations/bootstrap\"\nimport \"log\"\nimport \"fmt\"\n\nfunc main() {\n\tredis, err := bootstrap.GetRedis()\n\tif err != nil {\n\t\tlog.Fatal(\"Fatal error: \", err)\n\t}\n\tredis.Do(\"PING\")\n\n\tfmt.Printf(\"[%.4f] Starting\\n\", bootstrap.Now())\n\n\tsleep1, err := redis.Do(\"DEBUG\", \"SLEEP\", \"0.1\")\n\tfmt.Printf(\"[%.4f] End Sleep 100ms, result %s err %v\\n\",\n\t\tbootstrap.Now(), sleep1, err)\n\n\tsleep2, err := redis.Do(\"DEBUG\", \"SLEEP\", \"0.2\")\n\tfmt.Printf(\"[%.4f] End Sleep 200ms, result %s err %v\\n\",\n\t\tbootstrap.Now(), sleep2, err)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/redis2.go.txt",
    "content": "== go run redis2.go ==\n[0.0000] Starting\n[101.0354] End Sleep 100ms, result OK err <nil>\n[301.9424] End Sleep 200ms, result OK err <nil>"
  },
  {
    "path": "api-foundations/chapter6/redis3.go",
    "content": "package main\n\nimport \"foundations/bootstrap\"\nimport \"fmt\"\n\nfunc main() {\n\tredis := bootstrap.RedigoPool()\n\tdefer redis.Close()\n\n\tfor i := 0; i < 5; i++ {\n\t\tbootstrap.RedigoDo(\"PING\")\n\t}\n\n\tfmt.Printf(\"[%.4f] Start\\n\", bootstrap.Now())\n\n\tsleep1_chan := make(chan string, 1)\n\tsleep2_chan := make(chan string, 1)\n\n\tgo func() {\n\t\tfmt.Printf(\"[%.4f] Run sleep 100ms\\n\", bootstrap.Now())\n\t\tsleep1, err := bootstrap.RedigoDo(\"DEBUG\", \"SLEEP\", \"0.1\")\n\t\tif err != nil {\n\t\t\tsleep1 = \"ERROR\"\n\t\t}\n\t\tsleep1_chan <- sleep1.(string)\n\t}()\n\n\tgo func() {\n\t\tfmt.Printf(\"[%.4f] Run sleep 200ms\\n\", bootstrap.Now())\n\t\tsleep2, err := bootstrap.RedigoDo(\"DEBUG\", \"SLEEP\", \"0.2\")\n\t\tif err != nil {\n\t\t\tsleep2 = \"ERROR\"\n\t\t}\n\t\tsleep2_chan <- sleep2.(string)\n\t}()\n\n\tvar result string\n\tresult = <-sleep1_chan\n\tfmt.Printf(\"[%.4f] End Sleep 100ms, result %s\\n\", bootstrap.Now(), result)\n\tresult = <-sleep2_chan\n\tfmt.Printf(\"[%.4f] End Sleep 200ms, result %s\\n\", bootstrap.Now(), result)\n}\n"
  },
  {
    "path": "api-foundations/chapter6/redis3.go.txt",
    "content": "== go run redis3.go ==\nNew redis connection: redis1:6379\nNew redis connection: redis2:6379\n[0.0000] Start\n[0.0225] Run sleep 200ms\nDEBUG: bootstrap.ResourceConn{Conn:(*redis.conn)(0xc8200e6140)}\n[0.1160] Run sleep 100ms\nDEBUG: bootstrap.ResourceConn{Conn:(*redis.conn)(0xc8200e60a0)}\n[100.4375] End Sleep 100ms, result OK\n[200.5356] End Sleep 200ms, result OK"
  },
  {
    "path": "api-foundations/chapter6/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/garyburd/redigo/redis\"\ngvt fetch \"github.com/youtube/vitess/go/pools\"\ngvt fetch \"golang.org/x/net/context\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE | tee \"$FILE.txt\"\ndone\n\n# strip \\r\nsed -i 's/\\cM//g' *txt\n# strip trailing spaces/lines\nsed -i -e :a -e '/^\\n*$/{$d;N;};/\\n$/ba' *txt\n# strip off final newline\ntruncate -s -1 *txt\n"
  },
  {
    "path": "api-foundations/chapter6/run_containers",
    "content": "#!/bin/bash\nNAMES=\"redis redis1 redis2\"\nDOCKERFILE=\"redis\"\nfor NAME in $NAMES; do\n\tdocker rm -f $NAME\n\tdocker run --restart=always -h $NAME --name $NAME --net=party -d $DOCKERFILE\ndone"
  },
  {
    "path": "api-foundations/chapter6b/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/bootstrap/sqlx.go",
    "content": "package bootstrap\n\nimport \"fmt\"\nimport \"time\"\n\nimport _ \"github.com/go-sql-driver/mysql\"\nimport \"github.com/jmoiron/sqlx\"\n\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype SqlxResourceConn struct {\n\t*sqlx.DB\n}\n\nfunc (r SqlxResourceConn) Close() {\n\tr.DB.Close()\n}\n\nvar (\n\tpool            *pools.ResourcePool\n\thasPool         = false\n\tconnectionIndex = 1\n)\n\nfunc SqlxConnectionPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 2    // hold two connections\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tdb, err := sqlx.Open(\"mysql\", \"api:api@tcp(db1:3306)/api\")\n\t\t\tfmt.Printf(\"New mysql connection: %d\\n\", connectionIndex)\n\t\t\tconnectionIndex++\n\t\t\treturn SqlxResourceConn{db}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc SqlxGetConnection() (SqlxResourceConn, error) {\n\tctx := context.TODO()\n\tdb, err := pool.Get(ctx)\n\treturn db.(SqlxResourceConn), err\n}\n\nfunc SqlxReleaseConnection(r SqlxResourceConn) {\n\tpool.Put(r)\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/main_sql.go",
    "content": "package main\n\nimport \"log\"\nimport \"fmt\"\nimport \"github.com/davecgh/go-spew/spew\"\nimport \"database/sql\"\nimport _ \"github.com/go-sql-driver/mysql\"\n\nfunc showDatabases(conn *sql.DB, sql string) error {\n\tstmt, err := conn.Query(sql)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer stmt.Close()\n\tfor stmt.Next() {\n\t\tvar name string\n\t\tif err := stmt.Scan(&name); err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tfmt.Printf(\"Database: %s\\n\", name)\n\t}\n\treturn nil\n}\n\nfunc main() {\n\tdb, err := sql.Open(\"mysql\", \"api:api@tcp(db1:3306)/api\")\n\tif err != nil {\n\t\tlog.Fatal(\"Error when connecting: \", err)\n\t}\n\n\terr = showDatabases(db, \"show databases where `database` REGEXP '^inf'\")\n\tif err != nil {\n\t\tlog.Fatal(\"Error in query: \", err)\n\t}\n\n\tspew.Dump(\"db\")\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/main_sql.go.txt",
    "content": "== go run main_sql.go ==\nDatabase: information_schema\n(string) (len=2) \"db\""
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx.go",
    "content": "package main\n\nimport \"log\"\nimport _ \"github.com/go-sql-driver/mysql\"\nimport \"github.com/jmoiron/sqlx\"\nimport \"github.com/davecgh/go-spew/spew\"\n\ntype Database struct {\n\tName string `db:\"Database\"`\n}\n\nfunc main() {\n\tdb, err := sqlx.Open(\"mysql\", \"api:api@tcp(db1:3306)/api\")\n\tif err != nil {\n\t\tlog.Fatal(\"Error when connecting: \", err)\n\t}\n\tdatabases := []Database{}\n\terr = db.Select(&databases, \"show databases\")\n\tif err != nil {\n\t\tlog.Fatal(\"Error in query: \", err)\n\t}\n\tspew.Dump(databases)\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx.go.txt",
    "content": "== go run main_sqlx.go ==\n([]main.Database) (len=2 cap=2) {\n (main.Database) {\n  Name: (string) (len=18) \"information_schema\"\n },\n (main.Database) {\n  Name: (string) (len=3) \"api\"\n }\n}"
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx2.go",
    "content": "package main\n\nimport \"log\"\nimport \"foundations/bootstrap\"\nimport \"github.com/davecgh/go-spew/spew\"\n\ntype Database struct {\n\tName string `db:\"Database\"`\n}\n\nfunc main() {\n\tpool := bootstrap.SqlxConnectionPool()\n\tdefer pool.Close()\n\n\tdb, err := bootstrap.SqlxGetConnection()\n\tif err != nil {\n\t\tlog.Fatal(\"Error when connecting: \", err)\n\t}\n\tdefer bootstrap.SqlxReleaseConnection(db)\n\n\tdatabases := []Database{}\n\terr = db.Select(&databases, \"show databases\")\n\tif err != nil {\n\t\tlog.Fatal(\"Error in query: \", err)\n\t}\n\n\tspew.Dump(databases)\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx2.go.txt",
    "content": "== go run main_sqlx2.go ==\nNew mysql connection: 1\n([]main.Database) (len=2 cap=2) {\n (main.Database) {\n  Name: (string) (len=18) \"information_schema\"\n },\n (main.Database) {\n  Name: (string) (len=3) \"api\"\n }\n}"
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx3.go",
    "content": "package main\n\nimport \"log\"\nimport \"fmt\"\nimport \"foundations/bootstrap\"\n\ntype SleepResult struct {\n\tResult string `db:\"sleepfor\"`\n}\n\nfunc main() {\n\tpool := bootstrap.SqlxConnectionPool()\n\tdefer pool.Close()\n\n\t// warm up the connection pool\n\tfor i := 0; i < 5; i++ {\n\t\tdb, _ := bootstrap.SqlxGetConnection()\n\t\tdb.Ping()\n\t\tbootstrap.SqlxReleaseConnection(db)\n\t}\n\n\tfmt.Printf(\"[%.4f] Start\\n\", bootstrap.Now())\n\n\tsleep1_chan := make(chan string, 1)\n\tsleep2_chan := make(chan string, 1)\n\n\tgo func() {\n\t\tdb, err := bootstrap.SqlxGetConnection()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"Error when connecting: \", err)\n\t\t}\n\t\tdefer bootstrap.SqlxReleaseConnection(db)\n\n\t\tfmt.Printf(\"[%.4f] Run sleep 100ms\\n\", bootstrap.Now())\n\n\t\tfromSleep := SleepResult{}\n\t\terr = db.Get(&fromSleep, \"select sleep(0.1) as sleepfor\")\n\t\tif err != nil {\n\t\t\tsleep1_chan <- \"ERROR\"\n\t\t\treturn\n\t\t}\n\t\tsleep1_chan <- fromSleep.Result\n\t}()\n\n\tgo func() {\n\t\tdb, err := bootstrap.SqlxGetConnection()\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"Error when connecting: \", err)\n\t\t}\n\t\tdefer bootstrap.SqlxReleaseConnection(db)\n\n\t\tfmt.Printf(\"[%.4f] Run sleep 200ms\\n\", bootstrap.Now())\n\n\t\tfromSleep := SleepResult{}\n\t\terr = db.Get(&fromSleep, \"select sleep(0.2) as sleepfor\")\n\t\tif err != nil {\n\t\t\tsleep2_chan <- \"ERROR\"\n\t\t}\n\t\tsleep2_chan <- fromSleep.Result\n\t}()\n\n\tvar result string\n\tresult = <-sleep1_chan\n\tfmt.Printf(\"[%.4f] End Sleep 100ms, result %s\\n\", bootstrap.Now(), result)\n\tresult = <-sleep2_chan\n\tfmt.Printf(\"[%.4f] End Sleep 200ms, result %s\\n\", bootstrap.Now(), result)\n}\n"
  },
  {
    "path": "api-foundations/chapter6b/main_sqlx3.go.txt",
    "content": "== go run main_sqlx3.go ==\nNew mysql connection: 1\nNew mysql connection: 2\n[0.0000] Start\n[0.1985] Run sleep 200ms\n[0.5979] Run sleep 100ms\n[101.2529] End Sleep 100ms, result 0\n[200.9956] End Sleep 200ms, result 0"
  },
  {
    "path": "api-foundations/chapter6b/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/davecgh/go-spew/spew\"\ngvt fetch \"github.com/go-sql-driver/mysql\"\ngvt fetch \"github.com/jmoiron/sqlx\"\ngvt fetch \"github.com/youtube/vitess/go/pools\"\ngvt fetch \"golang.org/x/net/context\"\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE | tee \"$FILE.txt\"\ndone\n\n# strip \\r\nsed -i 's/\\cM//g' *txt\n# strip trailing spaces/lines\nsed -i -e :a -e '/^\\n*$/{$d;N;};/\\n$/ba' *txt\n# strip off final newline\ntruncate -s -1 *txt\n"
  },
  {
    "path": "api-foundations/chapter7/.gitignore",
    "content": "/*/vendor\n/*/coverage.html\n/*/coverage.out"
  },
  {
    "path": "api-foundations/chapter7/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/garyburd/redigo/redis\"\ngvt fetch \"github.com/youtube/vitess/go/pools\"\ngvt fetch \"golang.org/x/net/context\"\n\nFOLDERS=\"t1 t2 t3\"\nfor FOLDER in $FOLDERS; do\n\trsync -a vendor/ $FOLDER/vendor/\n\tcd $FOLDER\n\tgo test -coverprofile=coverage.out -covermode count\n\tgo tool cover -html=coverage.out -o coverage.html\n\tcd ..\ndone"
  },
  {
    "path": "api-foundations/chapter7/t1/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t1/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"fmt\"\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis\" + fmt.Sprintf(\"%d\", serverIndex) + \":6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 2    // hold two connections\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t1/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t1/registry.go",
    "content": "package api\n\nimport \"foundations/bootstrap\"\nimport \"github.com/garyburd/redigo/redis\"\n\ntype Registry struct {\n\tName string\n}\n\nfunc (r Registry) GetKey(key string) string {\n\treturn r.Name + \":\" + key\n}\nfunc (r Registry) Get(key string) (string, error) {\n\tk := r.GetKey(key)\n\treturn redis.String(bootstrap.RedigoDo(\"GET\", k))\n}\nfunc (r Registry) Del(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"DEL\", k)\n}\nfunc (r Registry) Set(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"SET\", k)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t1/registry_test.go",
    "content": "package api\n\nimport \"testing\"\nimport \"foundations/bootstrap\"\n\nfunc TestRegistryGet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Del(\"name\")\n\tval, err := reg.Get(\"name\")\n\tif err == nil || val != \"\" {\n\t\tt.Errorf(\"Unexpected result when getting name: %s/%s\\n\", val, err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t2/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t2/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis:6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 2    // hold two connections\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t2/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t2/registry.go",
    "content": "package api\n\nimport \"foundations/bootstrap\"\nimport \"github.com/garyburd/redigo/redis\"\n\ntype Registry struct {\n\tName string\n}\n\nfunc (r Registry) GetKey(key string) string {\n\treturn r.Name + \":\" + key\n}\nfunc (r Registry) Get(key string) (string, error) {\n\tk := r.GetKey(key)\n\treturn redis.String(bootstrap.RedigoDo(\"GET\", k))\n}\nfunc (r Registry) Del(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"DEL\", k)\n}\nfunc (r Registry) Set(key string, value string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"SET\", k, value)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t2/registry_test.go",
    "content": "package api\n\nimport \"testing\"\nimport \"foundations/bootstrap\"\n\nfunc TestRegistryGet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Del(\"name\")\n\tval, err := reg.Get(\"name\")\n\tif err == nil || val != \"\" {\n\t\tt.Errorf(\"Unexpected result when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistrySet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\tstatus, err := reg.Set(\"name\", \"Tit Petric\")\n\tif status != \"OK\" || err != nil {\n\t\tt.Errorf(\"Error when using SET: %s\", err)\n\t}\n\tval, err := reg.Get(\"name\")\n\tif err != nil || val != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting name: %s/%s\\n\", val, err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t3/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t3/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis:6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 1    // hold one connection\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t3/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t3/registry.go",
    "content": "package api\n\nimport \"foundations/bootstrap\"\nimport \"github.com/garyburd/redigo/redis\"\n\ntype Registry struct {\n\tName string\n}\n\nfunc (r Registry) GetKey(key string) string {\n\treturn r.Name + \":\" + key\n}\nfunc (r Registry) Get(key string) (string, error) {\n\tk := r.GetKey(key)\n\treturn redis.String(bootstrap.RedigoDo(\"GET\", k))\n}\nfunc (r Registry) Del(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"DEL\", k)\n}\nfunc (r Registry) Set(key string, value string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"SET\", k, value)\n}\nfunc (r Registry) GetAll() (map[string]string, error) {\n\tk := r.GetKey(\"*\")\n\tkeys, err := redis.Strings(bootstrap.RedigoDo(\"KEYS\", k))\n\tallkeys := map[string]string{}\n\tif len(keys) == 0 || err != nil {\n\t\treturn allkeys, nil\n\t}\n\tfor _, value := range keys {\n\t\tvalue_redis, err := redis.String(bootstrap.RedigoDo(\"GET\", value))\n\t\tif err == nil {\n\t\t\tallkeys[value[len(r.Name+\":\"):]] = value_redis\n\t\t}\n\t}\n\treturn allkeys, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter7/t3/registry_test.go",
    "content": "package api\n\nimport \"testing\"\nimport \"foundations/bootstrap\"\n\nfunc TestRegistryGet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Del(\"name\")\n\tval, err := reg.Get(\"name\")\n\tif err == nil || val != \"\" {\n\t\tt.Errorf(\"Unexpected result when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistrySet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\tstatus, err := reg.Set(\"name\", \"Tit Petric\")\n\tif status != \"OK\" || err != nil {\n\t\tt.Errorf(\"Error when using SET: %s\", err)\n\t}\n\tval, err := reg.Get(\"name\")\n\tif err != nil || val != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAll(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Set(\"name\", \"Tit Petric\")\n\tval, err := reg.GetAll()\n\tif err != nil || val[\"name\"] != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAllErr(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"testerr\"}\n\tval, err := reg.GetAll()\n\tif err != nil || len(val) != 0 {\n\t\tt.Errorf(\"Expected len=0 and error=nil when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter8/.gitignore",
    "content": "/bin\n/vendor\n"
  },
  {
    "path": "api-foundations/chapter8/api/registry.go",
    "content": "package api\n\nimport \"foundations/bootstrap\"\nimport \"github.com/garyburd/redigo/redis\"\n\ntype Registry struct {\n\tName string\n}\n\nfunc (r Registry) GetKey(key string) string {\n\treturn r.Name + \":\" + key\n}\nfunc (r Registry) Get(key string) (string, error) {\n\tk := r.GetKey(key)\n\treturn redis.String(bootstrap.RedigoDo(\"GET\", k))\n}\nfunc (r Registry) Del(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"DEL\", k)\n}\nfunc (r Registry) Set(key string, value string) (interface{}, error) {\n\tk := r.GetKey(key)\n\treturn bootstrap.RedigoDo(\"SET\", k, value)\n}\nfunc (r Registry) GetAll() (map[string]string, error) {\n\tk := r.GetKey(\"*\")\n\tkeys, err := redis.Strings(bootstrap.RedigoDo(\"KEYS\", k))\n\tallkeys := map[string]string{}\n\tif len(keys) == 0 || err != nil {\n\t\treturn allkeys, nil\n\t}\n\tfor _, value := range keys {\n\t\tvalue_redis, err := redis.String(bootstrap.RedigoDo(\"GET\", value))\n\t\tif err == nil {\n\t\t\tallkeys[value[len(r.Name+\":\"):]] = value_redis\n\t\t}\n\t}\n\treturn allkeys, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter8/api/registry_test.go",
    "content": "package api\n\nimport \"testing\"\nimport \"foundations/bootstrap\"\n\nfunc TestRegistryGet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Del(\"name\")\n\tval, err := reg.Get(\"name\")\n\tif err == nil || val != \"\" {\n\t\tt.Errorf(\"Unexpected result when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistrySet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\tstatus, err := reg.Set(\"name\", \"Tit Petric\")\n\tif status != \"OK\" || err != nil {\n\t\tt.Errorf(\"Error when using SET: %s\", err)\n\t}\n\tval, err := reg.Get(\"name\")\n\tif err != nil || val != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAll(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Set(\"name\", \"Tit Petric\")\n\tval, err := reg.GetAll()\n\tif err != nil || val[\"name\"] != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAllErr(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"testerr\"}\n\tval, err := reg.GetAll()\n\tif err != nil || len(val) != 0 {\n\t\tt.Errorf(\"Expected len=0 and error=nil when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter8/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter8/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis:6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 1    // hold one connection\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter8/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter8/redis_api.go",
    "content": "package main\n\nimport \"foundations/api\"\nimport \"foundations/bootstrap\"\nimport \"fmt\"\nimport \"log\"\nimport \"encoding/json\"\nimport \"net/http\"\n\nvar apiService api.Registry\n\nfunc respondWithError(w http.ResponseWriter, err error) {\n\tresponse := map[string]string{}\n\tresponse[\"error\"] = fmt.Sprintf(\"%s\", err)\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respondWith(w http.ResponseWriter, response interface{}) {\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respond(w http.ResponseWriter, response interface{}, err error) {\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\trespondWith(w, response)\n}\n\nfunc main() {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\tapiService = api.Registry{Name: \"api\"}\n\thttp.HandleFunc(\"/getAll\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse, err := apiService.GetAll()\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/get\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tresponse, err := apiService.Get(key)\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/set\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tvalue := r.FormValue(\"value\")\n\t\tresponse, err := apiService.Set(key, value)\n\t\trespond(w, response, err)\n\t})\n\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter8/redis_api2.go",
    "content": "package main\n\nimport \"foundations/api\"\nimport \"foundations/bootstrap\"\nimport \"fmt\"\nimport \"log\"\nimport \"encoding/json\"\nimport \"net/http\"\n\nvar apiService api.Registry\n\nfunc respondWithError(w http.ResponseWriter, err error) {\n\tresponse := map[string]string{}\n\tresponse[\"error\"] = fmt.Sprintf(\"%s\", err)\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respondWith(w http.ResponseWriter, response interface{}) {\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respond(w http.ResponseWriter, response interface{}, err error) {\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\trespondWith(w, response)\n}\n\nfunc main() {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\tapiService = api.Registry{Name: \"api\"}\n\thttp.HandleFunc(\"/getAll\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse, err := apiService.GetAll()\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/get\", func(w http.ResponseWriter, r *http.Request) {\n\t\taResponse, aErr := make(chan interface{}, 1), make(chan error, 1)\n\t\tkey := r.FormValue(\"key\")\n\t\tgo func() {\n\t\t\tresponse, err := apiService.Get(key)\n\t\t\taResponse <- response\n\t\t\taErr <- err\n\t\t}()\n\t\tresponse := <-aResponse\n\t\terr := <-aErr\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/set\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tvalue := r.FormValue(\"value\")\n\t\tresponse, err := apiService.Set(key, value)\n\t\trespond(w, response, err)\n\t})\n\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter8/redis_api_pprof.go",
    "content": "package main\n\nimport \"foundations/api\"\nimport \"foundations/bootstrap\"\nimport \"fmt\"\nimport \"log\"\nimport \"encoding/json\"\nimport \"net/http\"\n\nimport _ \"net/http/pprof\"\n\nvar apiService api.Registry\n\nfunc respondWithError(w http.ResponseWriter, err error) {\n\tresponse := map[string]string{}\n\tresponse[\"error\"] = fmt.Sprintf(\"%s\", err)\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respondWith(w http.ResponseWriter, response interface{}) {\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respond(w http.ResponseWriter, response interface{}, err error) {\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\trespondWith(w, response)\n}\n\nfunc main() {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\tapiService = api.Registry{Name: \"api\"}\n\thttp.HandleFunc(\"/getAll\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse, err := apiService.GetAll()\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/get\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tresponse, err := apiService.Get(key)\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/set\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tvalue := r.FormValue(\"value\")\n\t\tresponse, err := apiService.Set(key, value)\n\t\trespond(w, response, err)\n\t})\n\n\tfmt.Printf(\"Starting server on port :80\\n\")\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter8/run",
    "content": "#!/bin/bash\nsource ../shell/common.sh\n\nAPP=\"foundations\"\n\ngvt fetch \"github.com/garyburd/redigo/redis\"\ngvt fetch \"github.com/garyburd/redigo/redis\"\ngvt fetch \"github.com/youtube/vitess/go/pools\"\ngvt fetch \"golang.org/x/net/context\"\n\n# install flamegraph scripts\nif [ ! -d \"/opt/flamegraph\" ]; then\n\techo \"Installing flamegraph (git clone)\"\n\tgit clone --depth=1 https://github.com/brendangregg/FlameGraph.git /opt/flamegraph\nfi\n\n# install go-torch using docker\nif [ ! -f \"bin/go-torch\" ]; then\n\techo \"Installing go-torch via docker\"\n\tdocker run --net=party --rm=true --env-file /tmp/docker.env -it -v $(pwd)/bin:/go/bin golang go get github.com/uber/go-torch\nfi\n\nFILES=$(ls *.go | sort)\nfor FILE in $FILES; do\n\tgo run $FILE\ndone\n"
  },
  {
    "path": "api-foundations/chapter8/run_benchmark",
    "content": "#!/bin/bash\nab -c 4 -n 40000 http://localhost:8080/get?key=name\n"
  },
  {
    "path": "api-foundations/chapter8/test_curl",
    "content": "#!/bin/bash\nLINKS=\"http://localhost:8080/set?key=foo&value=bar http://localhost:8080/set?key=name&value=Tit%20Petric http://localhost:8080/get?key=name http://localhost:8080/getAll\"\nfor LINK in $LINKS; do\n\techo '$ curl' $LINK\n\tcurl $LINK\n\techo\ndone\n"
  },
  {
    "path": "api-foundations/chapter8/test_pprof",
    "content": "go tool pprof http://10.1.1.2:8080/debug/pprof/profile\n"
  },
  {
    "path": "api-foundations/chapter8/test_torch",
    "content": "#!/bin/bash\nPATH=\"$PATH:/opt/flamegraph\"\nbin/go-torch --time=15 --file \"torch.svg\" --url http://10.1.1.2:8080\n"
  },
  {
    "path": "api-foundations/chapter9/.gitignore",
    "content": "/flags\n/vendor\n"
  },
  {
    "path": "api-foundations/chapter9/Dockerfile",
    "content": "FROM alpine:latest\n\nADD flags /flags\nRUN chmod +x /flags ; sync; sleep 1\n\nWORKDIR /\n\nENV GO_PORT 8080\nEXPOSE $GO_PORT\n\nENTRYPOINT [\"/flags\"]\n"
  },
  {
    "path": "api-foundations/chapter9/api/registry.go",
    "content": "package api\n\nimport \"foundations/bootstrap\"\nimport \"github.com/garyburd/redigo/redis\"\n\nimport \"expvar\"\n\nvar (\n\tcountGet       *expvar.Int\n\tcountSet       *expvar.Int\n\tcountDel       *expvar.Int\n\tcountGetAll    *expvar.Int\n\tcountGetAllGet *expvar.Int\n)\n\nfunc init() {\n\tcountGet = expvar.NewInt(\"registry.get\")\n\tcountSet = expvar.NewInt(\"registry.set\")\n\tcountDel = expvar.NewInt(\"registry.del\")\n\tcountGetAll = expvar.NewInt(\"registry.getAll\")\n\tcountGetAllGet = expvar.NewInt(\"registry.getAll.get\")\n}\n\ntype Registry struct {\n\tName string\n}\n\nfunc (r Registry) GetKey(key string) string {\n\treturn r.Name + \":\" + key\n}\nfunc (r Registry) Get(key string) (string, error) {\n\tk := r.GetKey(key)\n\tcountGet.Add(1)\n\treturn redis.String(bootstrap.RedigoDo(\"GET\", k))\n}\nfunc (r Registry) Del(key string) (interface{}, error) {\n\tk := r.GetKey(key)\n\tcountDel.Add(1)\n\treturn bootstrap.RedigoDo(\"DEL\", k)\n}\nfunc (r Registry) Set(key string, value string) (interface{}, error) {\n\tk := r.GetKey(key)\n\tcountSet.Add(1)\n\treturn bootstrap.RedigoDo(\"SET\", k, value)\n}\nfunc (r Registry) GetAll() (map[string]string, error) {\n\tk := r.GetKey(\"*\")\n\tcountGetAll.Add(1)\n\tkeys, err := redis.Strings(bootstrap.RedigoDo(\"KEYS\", k))\n\tallkeys := map[string]string{}\n\tif len(keys) == 0 || err != nil {\n\t\treturn allkeys, nil\n\t}\n\tcountGetAllGet.Add(int64(len(keys)))\n\tfor _, value := range keys {\n\t\tvalue_redis, err := redis.String(bootstrap.RedigoDo(\"GET\", value))\n\t\tif err == nil {\n\t\t\tallkeys[value[len(r.Name+\":\"):]] = value_redis\n\t\t}\n\t}\n\treturn allkeys, nil\n}\n"
  },
  {
    "path": "api-foundations/chapter9/api/registry_test.go",
    "content": "package api\n\nimport \"testing\"\nimport \"foundations/bootstrap\"\n\nfunc TestRegistryGet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Del(\"name\")\n\tval, err := reg.Get(\"name\")\n\tif err == nil || val != \"\" {\n\t\tt.Errorf(\"Unexpected result when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistrySet(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\tstatus, err := reg.Set(\"name\", \"Tit Petric\")\n\tif status != \"OK\" || err != nil {\n\t\tt.Errorf(\"Error when using SET: %s\", err)\n\t}\n\tval, err := reg.Get(\"name\")\n\tif err != nil || val != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting name: %s/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAll(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"test\"}\n\treg.Set(\"name\", \"Tit Petric\")\n\tval, err := reg.GetAll()\n\tif err != nil || val[\"name\"] != \"Tit Petric\" {\n\t\tt.Errorf(\"Got error when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n\nfunc TestRegistryGetAllErr(t *testing.T) {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\treg := Registry{Name: \"testerr\"}\n\tval, err := reg.GetAll()\n\tif err != nil || len(val) != 0 {\n\t\tt.Errorf(\"Expected len=0 and error=nil when getting all keys: %#v/%s\\n\", val, err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter9/bootstrap/now.go",
    "content": "package bootstrap\n\nimport \"time\"\n\nvar StartTime float64\n\nfunc Now() float64 {\n\tmyTime := float64(time.Now().UnixNano()) / 1000000.0\n\tif StartTime < 0.000001 {\n\t\tStartTime = myTime\n\t}\n\treturn myTime - StartTime\n}\n"
  },
  {
    "path": "api-foundations/chapter9/bootstrap/redigo.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\nimport \"github.com/youtube/vitess/go/pools\"\nimport \"golang.org/x/net/context\"\n\ntype ResourceConn struct {\n\tredis.Conn\n}\n\nfunc (r ResourceConn) Close() {\n\tr.Conn.Close()\n}\n\nvar (\n\tpool        *pools.ResourcePool\n\thasPool     = false\n\tserverIndex = 1\n)\n\nfunc getServerName() string {\n\tname := \"redis:6379\"\n\tserverIndex++\n\tif serverIndex > 2 {\n\t\tserverIndex = 1\n\t}\n\treturn name\n}\n\nfunc RedigoPool() *pools.ResourcePool {\n\tif !hasPool {\n\t\tcapacity := 1    // hold one connection\n\t\tmaxCapacity := 4 // hold up to 4 connections\n\t\tidleTimeout := time.Minute\n\t\tpool = pools.NewResourcePool(func() (pools.Resource, error) {\n\t\t\tserverName := getServerName()\n\t\t\tc, err := redis.Dial(\"tcp\", serverName, connectTimeout, readTimeout, writeTimeout)\n\t\t\treturn ResourceConn{c}, err\n\t\t}, capacity, maxCapacity, idleTimeout)\n\t}\n\treturn pool\n}\n\nfunc RedigoDo(commandName string, params ...interface{}) (interface{}, error) {\n\tctx := context.TODO()\n\tr, err := pool.Get(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer pool.Put(r)\n\n\tc := r.(ResourceConn)\n\treturn c.Do(commandName, params...)\n}\n"
  },
  {
    "path": "api-foundations/chapter9/bootstrap/redis.go",
    "content": "package bootstrap\n\nimport \"time\"\nimport \"github.com/garyburd/redigo/redis\"\n\nvar (\n\tconnectTimeout = redis.DialConnectTimeout(time.Second)\n\treadTimeout    = redis.DialReadTimeout(time.Second)\n\twriteTimeout   = redis.DialWriteTimeout(time.Second)\n)\n\nfunc GetRedis() (redis.Conn, error) {\n\treturn redis.Dial(\"tcp\", \"redis:6379\", connectTimeout, readTimeout, writeTimeout)\n}\n"
  },
  {
    "path": "api-foundations/chapter9/build_docker",
    "content": "#!/bin/bash\ndocker build --rm --no-cache=true -t go-flags ."
  },
  {
    "path": "api-foundations/chapter9/build_flags",
    "content": "#!/bin/bash\ngo build flags.go\n"
  },
  {
    "path": "api-foundations/chapter9/flags.go",
    "content": "package main\n\nimport \"github.com/namsral/flag\"\nimport \"fmt\"\nimport \"os\"\n\nfunc main() {\n\tfs := flag.NewFlagSetWithEnvPrefix(os.Args[0], \"GO\", 0)\n\tvar (\n\t\tport = fs.Int(\"port\", 8080, \"Port number of service\")\n\t)\n\tfs.Parse(os.Args[1:])\n\n\tfmt.Printf(\"Server port: %d\\n\", *port)\n}\n"
  },
  {
    "path": "api-foundations/chapter9/flags.sh",
    "content": "#!/bin/bash\nsource ../shell/common.sh\ngvt fetch \"github.com/namsral/flag\"\nprintenv | grep GO_ > /tmp/docker.env\ndocker run --rm --env-file /tmp/docker.env -i -v `pwd`:/go/src/app -w /go/src/app golang go run flags.go\n"
  },
  {
    "path": "api-foundations/chapter9/redis_api.go",
    "content": "package main\n\nimport \"foundations/api\"\nimport \"foundations/bootstrap\"\nimport \"fmt\"\nimport \"log\"\nimport \"os\"\nimport \"encoding/json\"\nimport \"github.com/namsral/flag\"\nimport \"net/http\"\n\nimport _ \"net/http/pprof\"\n\nvar apiService api.Registry\n\nfunc respondWithError(w http.ResponseWriter, err error) {\n\tresponse := map[string]string{}\n\tresponse[\"error\"] = fmt.Sprintf(\"%s\", err)\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respondWith(w http.ResponseWriter, response interface{}) {\n\tresponse_json, _ := json.MarshalIndent(response, \"\", \"\\t\")\n\tfmt.Fprintf(w, string(response_json[:]))\n}\nfunc respond(w http.ResponseWriter, response interface{}, err error) {\n\tif err != nil {\n\t\trespondWithError(w, err)\n\t\treturn\n\t}\n\trespondWith(w, response)\n}\n\nfunc main() {\n\tredisPool := bootstrap.RedigoPool()\n\tdefer redisPool.Close()\n\n\tfs := flag.NewFlagSetWithEnvPrefix(os.Args[0], \"GO\", 0)\n\tvar (\n\t\tport = fs.Int(\"port\", 80, \"Port number of service\")\n\t)\n\tfs.Parse(os.Args[1:])\n\n\tapiService = api.Registry{Name: \"api\"}\n\thttp.HandleFunc(\"/getAll\", func(w http.ResponseWriter, r *http.Request) {\n\t\tresponse, err := apiService.GetAll()\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/get\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tresponse, err := apiService.Get(key)\n\t\trespond(w, response, err)\n\t})\n\thttp.HandleFunc(\"/set\", func(w http.ResponseWriter, r *http.Request) {\n\t\tkey := r.FormValue(\"key\")\n\t\tvalue := r.FormValue(\"value\")\n\t\tresponse, err := apiService.Set(key, value)\n\t\trespond(w, response, err)\n\t})\n\n\tfmt.Printf(\"Starting server on port :%d\\n\", *port)\n\terr := http.ListenAndServe(fmt.Sprintf(\":%d\", *port), nil)\n\tif err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "api-foundations/chapter9/test-flags",
    "content": "#!/bin/bash\nsource ../shell/common.sh\nfunction run_case {\n\techo '$' \"$@\"\n\t. \"$@\"\n}\n\nfunction run_case2 {\n\techo '$' \"$@\"\n}\n\nrun_case go run flags.go\nrun_case go run flags.go -port=80\n\nrun_case2 PORT=80 go run flags.go\nPORT=80 go run flags.go\n\nrun_case2 GO_PORT=80 go run flags.go\nGO_PORT=80 go run flags.go\n\n"
  },
  {
    "path": "api-foundations/chapter9/test-flags.txt",
    "content": "$ go run flags.go\nServer port: 8080\r\n$ go run flags.go -port=80\nServer port: 80\r\n$ PORT=80 go run flags.go\nServer port: 8080\r\n$ GO_PORT=80 go run flags.go\nServer port: 80\r\n"
  },
  {
    "path": "api-foundations/chapter9/test-flags2",
    "content": "#!/bin/bash\nsource ../shell/common.sh\nfunction run_case {\n\techo '$' \"$@\"\n\t. \"$@\"\n}\n\nfunction run_case2 {\n\techo '$' \"$@\"\n}\n\nrun_case2 ./flags\n./flags\n\nrun_case2 ./flags -port=80\n./flags -port 80\n\nrun_case2 PORT=80 ./flags\nPORT=80 ./flags\n\nrun_case2 GO_PORT=80 ./flags\nGO_PORT=80 ./flags\n\n"
  },
  {
    "path": "api-foundations/chapter9/test-flags2.txt",
    "content": "$ ./flags\nServer port: 8080\n$ ./flags -port=80\nServer port: 80\n$ PORT=80 ./flags\nServer port: 8080\n$ GO_PORT=80 ./flags\nServer port: 80\n"
  },
  {
    "path": "api-foundations/chapter9/test-remote.txt",
    "content": "$ scp flags luxor:/root\nflags                  100% 2627KB   2.6MB/s   00:01\n$ ssh luxor \"/root/flags\"\nServer port: 8080\n$ ssh luxor \"/root/flags -port 80\"\nServer port: 80\n$ ssh luxor \"GO_PORT=80 /root/flags\"\nServer port: 80\n"
  },
  {
    "path": "api-foundations/shell/common.sh",
    "content": "function go {\n\tprintenv | grep \"GO_\" > /tmp/docker.env\n\techo \"== go\" \"$@\" \"==\"\n\tif [ -f \"docker.args\" ]; then\n\t        ARGS=$(cat docker.args | xargs echo -n)\n\tfi\n\tSPECIALS=\"tool get build fmt\"\n\tfor SPECIAL in $SPECIALS; do\n\t        if [ \"$1\" == \"$SPECIAL\" ]; then\n\t                ARGS=\"\"\n\t        fi\n\tdone\n\tif [ -z \"$APP\" ]; then\n\t        APP=\"app\"\n\tfi\n\tWORKDIR=\"/go/src/$APP\"\n\tdocker run --net=party $ARGS --rm=true --env-file /tmp/docker.env -it -v $(pwd):$WORKDIR -w $WORKDIR golang:1.10-alpine go \"$@\"\n\techo \"\"\n}\n\nfunction gvt {\n\techo \"== gvt\" \"$@\" \"==\"\n\tif [ $1 == \"fetch\" ]; then\n\t\tBASE=\"vendor/\"\n\t\tif [ -d \"$BASE$2\" ]; then\n\t\t\treturn\n\t\tfi\n\tfi\n\tdocker run --dns=8.8.8.8 --dns=8.8.4.4 --rm=true -i -v $(pwd):/go/src justincormack/gvt \"$@\"\n}\n"
  },
  {
    "path": "api-foundations/shell/go",
    "content": "#!/bin/bash\ndocker run --net=party -p 8080:80 --rm=true -it -v `pwd`:/go/src/app -w /go/src/app golang:1.10-alpine go \"$@\""
  }
]